Сегодня речь пойдет не совсем о программировании а скорее о DevOps-е ну или во всяком случае чём-то подобном.
Поговорим о проблеме переноса сайтов. Проблема простая но насущная часто большие сайт не зависимо от CMS на которой они созданы представляют из себя огромнейший набор физических файлов разных по размеру (не всегда больших по объему) и расположенных в большом количестве директорий разных уровней вложенности, как не странно, но в даже сейчас современные компьютеры и серверы часто не в силах обработать большое количество мелких файлов даже локально.
Например при переносе сайта между хостами мы обычно совершаем ряд известных действий что бы архивировать весь наш сайт целиком дабы переносить наш большой сайт
в виде архива что займет
гораздо меньше времени за счет а после переноса распаковать архив на целевом хосте не составит проблемы.
Но даже такой продвинуты казалось бы способ переноса способ не эффективен, если наш сайт содержит слишком много и директорий файлов.
Привычный и давно знакомый способ архивации файлов например такой:
tar -zcvf site-files.tar.gz *
для подобных сайтов будет не быстрым.
Конкретно сложность возникнет стем что создание архива может занять очень много времени например сайт весом 150 GB содержащий около 150 000 файлов и директорий может архивироваться более 12 часов на среднем по ресурсам vps.
Цифры кстати говоря хоть и примерны, но взяты из моей практики.
И так коль уж процесс архивации всё равно займет много времени то пусть он проходит без нашего участия, так как в обычной ситуации текущая задача прервется если закрыть окно терминала или разорвать ssh сессию.
К счастью в Linux системах есть легкий способ запускать процессы в фоновом режиме при помощи утилиты screen.
Может так случиться что на вашем сервере эта утилита не установлена проверить это можно следующим образом:
screen -v
Если установлена то команда выведет что то вроде этого:
Screen version 4.01.00devel (GNU) 2-May-06
если нет то необходимо её установить командой :
sudo apt-get install screen
Теперь когда все установлено разберемся чем нам это может помочь.
Например мы можем сделать вот так :
screen tar -zcvf site-files.tar.gz *
что бы создать скрин после текущий скрин, после чего его (скрин) можно свернут нажав ctrl+a для перевода в командный режим и набрав d.
После этого темнил можно спокойно закрывать компьютер выключать и заниматься своими делами, архивация будет продолжаться в фоне.
Вернуться к текущему мерину можно
Набрав команду
screen -r название
Название скрина можно взять из списка всех скринов которые в свою очередь можно посмотреть так:
screen -list
Можно сразу задать осмысленное имя скрина что бы при необходимости легко к нему вернуться, это делается при помощи ключа -S
screen tar -zcvf site-files.tar.gz -S myscreen
Так же можно запуска скрины уже свернутыми:
screen -dmS myscreen tar -zcvf site-files.tar.gz
В итоге задача архивации решена, в процессе мы может выйти из терминала и выключить локальную машину и заниматься своими делами пока сайт архивируется.
Когда архив будет готов на целевой хост его можно скопировать достаточно тривиальным способом по средствам
wget http://old-site.com/site-files.tar
Конечно хранить архив сайта в публичной директории не безопасно и делать так не стоит, но в качестве примера вполне сгодится.
Для переноса правильнее будет воспользоваться например ftp , как это сделать из терминала я уже описывал ранее здесь.
И разархивировать командой:
tar -xzvf site-files.tar
Базу MYSQL так же легко перегнать в текстовый файл и перенести вместе с остальными фалами командой:
mysql -u user -ppassword mysql_base > mysql.sql
Здесь:
user — имя пользователя MYSQL;
password — пароль пользователя;
mysql_base — название базы данных;
mysql.sql — название файла дампа;
Восстановить дампа на целевом хосте можно похожей командой
mysql -u user -ppassword mysql_base < MySQL.sql
за направление вывода как вы догадались отвечает символ < или > .
Так мы познакомились с технологией переноса сайтов в фоновом режиме как выяснилось технология достаточно проста.