Когда ваш сайт начинает активно работать и принимать посетителей, применять на живом сайте все нововведения, будь то новые модули или плагины, новый шаблон или апдейт версии движка, становится неудобно. Если что-то пойдет не по плану, можно положить сайт, или нарушить его функционал.
При пустом сайте проблема не велика, но если реальные пользователи наткнуться на неработающий сайт они испытают негативный опыт, и в следующий раз могут пренебречь вашим сайтом. Поэтому для тестирования всех мало-мальски значимых изменений нужно иметь резервную копию сайта.
На данном этапе у нас есть сайт с установленным вордпрессом. Давайте разберем, как сделать копию сайта на WordPress. Ее мы сможем использовать для нужд разработки и тестирования. В целом, то, как создать копию сайта имеет много общего с процессом бэкапирования. Единственное, для начала нам нужно подготовить домен для копии.
Отправляемся в наш DNS сервис, в нашем случае это Cloudflare, и добавляем новый поддомен. Так как копия сайта будет находиться на том же хосте, что и живой сайт, и будет иметь тот же IP, я использую запись типа CNAME для присвоения адреса. Хотя можно задать IP и стандартной A записью.

Теперь заходим на хост и делаем новый файл конфига NGINX, для нового сабдомена. Для этого скопируем уже имеющийся и внесем правки.
[root@waky ~]# cp -a /etc/nginx/conf.d/waky.ru.conf /etc/nginx/conf.d/dev.waky.ru.conf
[root@waky ~]# vi /etc/nginx/conf.d/dev.waky.ru.conf
Меняем доменное имя в server_name и root, а так же заменим все блоки с Basic Auth на общий запрет, чтобы закрыть всю дев копию от доступа посторонних. В итоге получим следующие настройки:
server {
listen 80;
listen [::]:80;
server_name dev.waky.ru;
root /usr/share/nginx/dev.waky.ru;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
error_page 404 /404.html;
location = /404.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
# Settings for a TLS enabled server.
#
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name dev.waky.ru;
root /usr/share/nginx/dev.waky.ru;
index index.php;
ssl_certificate "/etc/letsencrypt/live/waky.ru/fullchain.pem";
ssl_certificate_key "/etc/letsencrypt/live/waky.ru/privkey.pem";
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 10m;
ssl_ciphers PROFILE=SYSTEM;
ssl_prefer_server_ciphers on;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
auth_basic "Restricted area";
auth_basic_user_file /usr/share/nginx/.htpasswd;
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
location / {
try_files $uri $uri/ /index.php?$args;
index index.php;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass unix:/run/php-fpm/www.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
Сохраняем изменения, проверяем настройки и перезапускаем NGINX:
[root@waky ~]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@waky ~]# nginx -s reload
Теперь скопируем файлы и базу данных. Но для начала нужно создать новую пару база и пользователь для нашей копии. Все как мы делали для основного сайта. Заходим в консоль mariadb и выполняем следующие команды:
[root@waky ~]# mariadb
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 10
Server version: 10.5.27-MariaDB MariaDB Server
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> CREATE DATABASE dev_waky_db;
Query OK, 1 row affected (0.012 sec)
MariaDB [(none)]> CREATE USER 'dev_waky_user'@'localhost' IDENTIFIED BY 'КакоЙНИбуДьПароЛь';
Query OK, 0 rows affected (0.059 sec)
MariaDB [(none)]> GRANT ALL ON dev_waky_db.* TO 'dev_waky_user'@'localhost';
Query OK, 0 rows affected (0.011 sec)
MariaDB [(none)]> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.010 sec)
MariaDB [(none)]> exit
Bye
[root@waky ~]#
Теперь делаем бэкап базы текущего сайта и заливаем его в базу дев сайта:
[root@waky ~]# mariadb-dump --single-transaction waky_db > waky_db.sql
[root@waky ~]# mariadb dev_waky_db< waky_db.sql
Поправим главную ссылку нашей копии, возвращаемся в консоль mariadb:
MariaDB [(none)]> USE dev_waky_db;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
MariaDB [dev_waky_db]> SELECT * FROM wp_options WHERE option_value='https://waky.ru';
+-----------+-------------------+-----------------+----------+
| option_id | option_name | option_value | autoload |
+-----------+-------------------+-----------------+----------+
| 2 | siteurl | https://waky.ru | on |
| 3 | home | https://waky.ru | on |
| 209 | niteoCS_logo_link | https://waky.ru | auto |
+-----------+-------------------+-----------------+----------+
3 rows in set (0.003 sec)
MariaDB [dev_waky_db]> UPDATE wp_options SET option_value='https://dev.waky.ru' WHERE option_value='https://waky.ru';
Query OK, 3 rows affected (0.006 sec)
Rows matched: 3 Changed: 3 Warnings: 0
С базой закончили, осталось скопировать файлы, и поправить конфиг файл вордпресса:
[root@waky ~]# cp -a /usr/share/nginx/waky.ru/ /usr/share/nginx/dev.waky.ru/
[root@waky ~]# vi /usr/share/nginx/dev.waky.ru/wp-config.php
Меняем следующие строки, заменяя базу, пользователя и пароль от живого сайта на новые:define( 'DB_NAME', 'dev_waky_db' );
define( 'DB_USER', 'dev_waky_user' );
define( 'DB_PASSWORD', 'КакоЙНИбуДьПароЛь' );
Выпустим бесплатный SSL сертификат для нашего поддомена:
[root@waky ~]# certbot certonly -v --webroot -w /usr/share/nginx/dev.waky.ru/ -d dev.waky.ru
Теперь поправим путь к файлам сертификата в NGINX:vi /etc/nginx/conf.d/dev.waky.ru.conf
и меняем доменное имя в следующих строках:ssl_certificate "/etc/letsencrypt/live/dev.waky.ru/fullchain.pem";
ssl_certificate_key "/etc/letsencrypt/live/dev.waky.ru/privkey.pem";
Еще раз перезагрузим NGINX:nginx -s reload
Наша резервная копия сайта WordPress доступна по адресу https://dev.waky.ru/ и закрыта от посторонних глаз. Вводим пароль от Basic Auth и видим, что у нас получилась точная копия сайта вордпресс.
