Здесь шпаргалка по переносу сайтов, работающих под управлением LMS "Moodle". Далее просто и последовательно.
Предварительные работы на принимающей стороне.
Естественно, web-сервер должен быть сконфигурирован и готов к обслуживанию сайтов (например, по родительской инструкции).
Подготовим место для приёма переносимых файлов:
# mkdir -p /var/www/moodle.example.net/www
# mkdir -p /var/www/moodle.example.net/moodledata
# chown -R user /var/www/moodle.example.net
# mkdir -p /var/www/moodle.example.net/moodledata
# chown -R user /var/www/moodle.example.net
Копирование данных на принимающий web-сервер.
На время миграции сайт нужно обязательно перевести в режим обслуживания (admin/settings.php?section=maintenancemode), чтобы в этот период не пускать в него пользователей. Также можно закрыть доступ к сайту посредством web-сервера, оставив проход только себе.
Перед копированием файлов сайта облегчаем этот процесс предварительной зачисткой кешей:
# sudo -u www-data php /var/www/moodle.example.net/www/admin/cli/purge_caches.php
Запускаем процедуру копирования файлов сайта (напрашивающаяся для применения утилита "scp" следует за символическими ссылками, а у нас в каждом сайте ссылки на много много-гигабайтные хранилища данных, так что используем "tar"):
# cd /var/www/moodle.example.net/www ; tar cfv - * | ssh user@new-moodle.example.net "(cd /var/www/moodle.example.net/www ; tar xf - )"
# cd /var/www/moodle.example.net/moodledata ; tar cfv - * --exclude='./filedir' | ssh user@new-moodle.example.net "(cd /var/www/moodle.example.net/moodledata ; tar xf - )"
# cd /var/www/moodle.example.net/moodledata ; tar cfv - * --exclude='./filedir' | ssh user@new-moodle.example.net "(cd /var/www/moodle.example.net/moodledata ; tar xf - )"
Файлы данных копируем отдельно, из примонтированного раздела внешнего хранилища (которое обычно введено в структуру сайта символической ссылкой):
# rsync -av --delete -e ssh /var/www/mnt/moodle.example.net/moodledata/filedir/ user@new-moodle.example.net:/var/www/mnt/moodle.example.net/moodledata/filedir
Выгружаем "логический дамп" БД, на лету передавая его на целевой web-сервер:
# mysqldump -u root moodle_example_net | ssh user@new-moodle.example.net "cat > /var/www/moodle.example.net/moodle_example_net.sql"
Копируем конфигурационные файлы web-сервера, описывающие переносимые сайты:
# scp -r /etc/nginx/sites-available/moodle.example.net.conf user@new-moodle.example.net:/var/www/moodle.example.net/
Выгружаем перечень команд запуска задач пользователя web-сервера по расписанию:
# sudo -u www-data crontab -l | ssh user@new-moodle.example.net "cat > /var/www/moodle.example.net/crontab"
Применение данных проекта на принимающем web-сервере.
Первым делом создадим БД и соответствующего пользователя:
# mysql
MySQL> DROP DATABASE `moodle_example_net`;
MySQL> CREATE DATABASE `moodle_example_net` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
MySQL> CREATE USER 'moodle_example_net'@'localhost' IDENTIFIED BY 'dbPasword';
MySQL> GRANT ALL PRIVILEGES ON `moodle_example_net`.* TO 'moodle_example_net'@'localhost';
MySQL> FLUSH PRIVILEGES;
MySQL> QUIT;
MySQL> DROP DATABASE `moodle_example_net`;
MySQL> CREATE DATABASE `moodle_example_net` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
MySQL> CREATE USER 'moodle_example_net'@'localhost' IDENTIFIED BY 'dbPasword';
MySQL> GRANT ALL PRIVILEGES ON `moodle_example_net`.* TO 'moodle_example_net'@'localhost';
MySQL> FLUSH PRIVILEGES;
MySQL> QUIT;
Внесём в БД содержимое "дампа", полученного с исходного web-сервера
# mysql -u moodle_example_net -p moodle_example_net < /var/www/moodle.example.net/moodle_example_net.sql
Вводим файловое хранилище в структуру сайта:
# ln -s /var/www/mnt/moodle.example.net/moodledata/filedir /var/www/moodle.example.net/moodledata/filedir
Устанавливаем необходимые права доступа к файлам сайта:
# chown -R www-data:www-data /var/www/moodle.example.net
# setfacl --recursive --no-mask --modify user::rwX,group::rwX /var/www/moodle.example.net
# setfacl --recursive --no-mask --modify user:www-data:X /var/www/moodle.example.net
# setfacl --recursive --no-mask --modify user::rwX,group::rwX /var/www/moodle.example.net
# setfacl --recursive --no-mask --modify user:www-data:X /var/www/moodle.example.net
Устанавливаем необходимые права доступа к вынесенным в отдельное хранилище файлам данных:
# chown -R www-data:www-data /var/www/mnt/moodle.example.net/moodledata
# setfacl --recursive --no-mask --modify user::rwX,group::rwX /var/www/mnt/moodle.example.net/moodledata
# setfacl --recursive --no-mask --modify user:www-data:X /var/www/mnt/moodle.example.net/moodledata
# setfacl --recursive --no-mask --modify user::rwX,group::rwX /var/www/mnt/moodle.example.net/moodledata
# setfacl --recursive --no-mask --modify user:www-data:X /var/www/mnt/moodle.example.net/moodledata
Размещаем файлы конфигурации сайта в соответствующих директориях web-сервера и активируем таковой:
# cp /var/www/moodle.example.net/moodle.example.net.conf /etc/nginx/sites-available/moodle.example.net.conf
# ln -s /etc/nginx/sites-available/moodle.example.net.conf /etc/nginx/sites-enabled/moodle.example.net.conf
# nginx -t && nginx -s reload
# ln -s /etc/nginx/sites-available/moodle.example.net.conf /etc/nginx/sites-enabled/moodle.example.net.conf
# nginx -t && nginx -s reload
Переносим из файла "/var/www/moodle.example.net/crontab" задания, имеющие отношение к этому сайту, в "crontab" нового сервера:
# sudo -u www-data crontab -e
Проверяем, верно ли работает сайт на новом месте.
# tail /var/log/nginx/moodle.example.net-error.log