Перенос сайтов и баз данных с хостинга на VPS сервер

Следующим шагом после первоначальной настройки удалённого VPS-сервера, которую я описывал в предыдущей статье, является перенос сайтов и баз данных с виртуального хостинга на наш VPS, и окончательная настройка web-сервера, и публикация сайта.

Есть множество способов это сделать, однако я опишу самый эффективный, ибо все остальные считаю форменным извращением и напрасной тратой времени.

Самый простой способ скопировать файлы сайта и базу данных – через консоль ssh-клиента, без всяких FTP.

Практически всем пользователям виртуального хостинга предоставляют ещё и данные для ssh-доступа, но к сожалению, мало кто умеет с ним работать, а некоторые вообще не понимают, для чего это, предпочитая старый добрый FTP, со-всеми его уязвимостями и тормозами.

Между тем, передача файлов по sftp-протоколу не только безопаснее, но ещё и происходит тупо быстрее. Потому считаю ftp-протокол безнадёжно устаревшим.

SFTPSSH File Transfer Protocol — позволяет передавать файлы посредством стандартного ssh, поверх защищённого соединения, без необходимости установки ftp-сервера, и открытия под него дополнительных портов в сетевом интерфейсе, уязвимых для udp-флуда.

Плюс ко-всему прочему, помимо защищённости, по sftp скорость передачи файлов значительно выше, включая все преимущества и меры безопасности, присущие SSH, в т.ч. авторизацию по ключам.

Итак, всё очень просто: для начала нам надо подключиться к VPS-серверу по SSH, а уже с него — опять-же, используя SSH — к виртуальному хостингу, на котором расположен наш сайт.

Почему именно в таком порядке: если вы сначала подключитесь по ssh к виртуальному хостингу — то вы не сможете ничего скопировать на ваш VPS, поскольку у вас не будет прав на запись в каталог будущего сайта, в виду разных пользователей на сервере и на хостинге. Поэтому, сначала авторизуемся на сервере, потом копируем с хостинга.

С виртуального хостинга нам необходимо скачать ДВА файла: сжатый архив файлов сайта, включая файл конфигурации web-сервера (.htaccess, если на сервере виртуального хостинга был установлен Apache), и — дамп базы данных сайта, опять-же — в виде сжатого архива. Но сначала их нужно создать.

Поэтому, ШАГ ПЕРВЫЙ: переходим в консоли на хостинге в домашний каталог пользователя командой CD (вы должны знать, где находятся файлы сайта, на крайний случай гляньте структуру директорий в ftp-клиенте). И архивируем все файлы и каталоги сайта командой tar в сжатый архив:

cd ~/
tar -zcvf archive.tar.gz path/to/files

Опции команды tar: -z — сжатие архива при создании; (create) — непосредственно, создание архива; -v — вывод информации о процессе работы (можно не указывать); -f — направляем вывод в файл. Далее идёт непосредственно имя файла архива — archive.tar.gz (можете указать своё), и путь к корневому каталогу сайта.

После выполнения команды, в домашнем каталоге пользователя появится файл сжатого архива, с заданным именем. Пол-дела сделано!

Далее, создаём сжатый дамп базы данных. Для этого необходимо знать имя базы данных, пользователя MySQL, имеющего на неё права, и пароль этого пользователя. Думаю, не стоит объяснять, что юзер БД и юзер на виртуальном хостинге — это не одно и тоже, а две разные сущности.

Выполняем там-же, в консоли на виртуальном хостинге:

mysqldump -u USER -p DATABASE | gzip > database.sql.gz

Команда запросит пароль юзера БД, вводим, получаем результат. В данном конкретном случае, команда перенаправляет вывод в программу сжатия, для уменьшения объёма дампа БД. В принципе, сжатие можно не использовать, но если БД «раздута» то её копирование на VPS-сервер займёт больше времени. Последним параметром идёт имя файла сжатого архива, можете задать своё.

Итак, что имеем: два файла в домашней директории пользователя на виртуальном хостинге — archive.tar.gz и database.sql.gz.

ШАГ ВТОРОЙ: копируем полученные файлы на наш VPS. Для этого, отключаемся в консоли от виртуального хостинга, командой exit и автоматически возвращаемся в консоль VPS сервера.

И одной простой командой scp копируем всё себе на сервер!

scp user@virtualhost.ru:~/archive.tar.gz ~/
scp user@virtualhost.ru:~/database.sql.gz ~/

Оба файла будут скопированы в домашнюю директорию пользователя на VPS сервере, под которым мы авторизовались.

ШАГ ТРЕТИЙ: распаковываем файлы в нужную директорию, и экспортируем дамп БД на сервер MySQL, с файлами всё просто — используем команду tar:

tar -zxvf archive.tar.gz -C path/to/dir

Флаг -x (eXtract) обозначает извлечение, а параметр указывает путь к каталогу, в который надо всё извлечь. Если у вас установлена хостинг-панель VestaCP — то путь извлечения из домашней директории пользователя будет ~/web/sitedomein.ru/public_html , вместо sitedomein.ru подставьте доменное имя своего сайта.

Не забудьте после извлечения задать правильные права на папки и каталоги, и назначить правильных владельцев и группы, командами chown и chmod.

С базой данных немного сложнее, сначала необходимо её создать через хостинг-панель, либо непосредственно из консоли. Через хостинг-панель это сделать проще, указываете имя БД, имя пользователя и пароль.

Из консоли немного сложнее, сначала из под root в mysql создаёте нового пользователя, с привилегиями на базу данных, потом из-под этого пользователя создаёте новую БД, с именем, на которое у пользователя mysql есть привилегии.

Когда БД создана — импортируем в неё таблицы с данными из сжатого дампа, следующими командами:

gunzip < database.sql.gz | mysql -u USER -p DATABASE

Сначала сжатый дамп разжимается командой gunzip, и сразу же перенаправляется поток в команду mysql, в качестве USER и DATABASE указываем владельца БД и имя БД соответственно, так-же, команда запросит пароль пользователя.

ШАГ ЧЕТВЁРТЫЙ — производим окончательную настройку локального файла конфигурации web-сервера, это необходимо, если на хостинге стоял Apache, а на VPS установлен Nginx.

Обычно, такой файл конфигурации генерируется автоматически хостинг-панелью, при добавлении нового домена. Но всегда можно что-нибудь подправить, например обработку php, или добавить SSL-cертификат и подключить HTTPS-протокол.

Ну и последнее, ШАГ ПЯТЫЙ — это настройка DNS: прописываем правильные NS-записи A и CNAME, что-бы доменное имя указывало на правильный IP-адрес, связанный с нашим VPS-сервером.

Важное примечание: всегда придерживайтесь правила — один домен — один отдельный IP! Все доменные имена ваших сайтов должны висеть на отдельных IP-адресах, причём, на первичном IP, через который вы администрируете VPS, вообще не должно быть никаких доменов, кроме того, что выделил хостер, и он должен быть закрыт фаерволом ото-всех, кроме вас. Прежде всего, это связано с вопросами безопасности.

Таким образом, в три простых шага, легко и непринуждённо, с минимальными временными затратами и без лишних телодвижений, все файлы и данные оперативно переносятся с виртуального хостинга на выделенный VPS-сервер.

Ну и естественно, если вам нужны услуги по удалённой установке и настройке выделенного VPS/VDS сервера Linux, а времени, знаний или желания заморачиваться этим нет — вы всегда можете обратиться ко-мне, консультирую бесплатно!