Перенос сайтов описан с разных сторон, но смена среды разработки может негативно сказаться на сайте, а потому перенос зачастую вызывает страх.
У меня есть опыт переноса 1500 сайтов и хочу поделиться этим опытом кратко и информативно.
Перенос в консоли
Я опишу перенос в консоли. Консолью удобнее пользоваться, когда мы имеем дело с хостингом и сайтами.
Если мы не имеем SSH доступ к старому аккаунту:
- Подключаемся к аккаунту на новом хостинге по SSH.
Инструкция: http://timeweb.com/ru/help/pages/viewpage.action?pageId=4358354
- Создаём временную директорию для переноса:
mkdir tmp_ИМЯ_САЙТА
И заходим в неё:
cd tmp_example
Имя указывается во избежание путаницы, если переносим несколько сайтов с разных хостингов.
Важно! На хостинге Timeweb установлен LFTP. Но рассказывать про него не буду по причине того, что wget более универсален и включен в дистрибутивы, которые стоят на VDS-серверах.
- Ставим перенос:
wget -mc --ftp-user='USER' --ftp-password='PASSWD' -o ./perenos.log ftp://IP_адрес_сервера/путь/до/сайта --restrict-file-names=nocontrol &
- Выполняем команду:
tailf perenos.log
Если по экрану бежит лог - хорошо.
Если строка не бежит - читаем, что написано и анализируем (например, при помощи Google).
Нюансы
- Эта команда умеет производить докачку файлов и переносит скрытые файлы. Подробнее о ключах в man wget.
- Если порт не 21, то пишем:
wget -mc --ftp-user='USER' --ftp-password='PASSWD' -o ./perenos.log ftp://IP_адрес_сервера:ПОРТ/путь/до/сайта --restrict-file-names=nocontrol &
- Если логин и пароль не содержит специальных символов, кавычки не нужны.
- Узнать адрес ftp быстрее всего в браузере. Например: ftp://127.0.0.1/www/example.com/public/
- Для переноса файлов без каких либо директорий используем конструкции вида:
nohup wget -mc --exclude-directories=/www/example.com/public_html/media --ftp-user=USER --ftp-password=PASSWD -o ./wget.log ftp://127.0.0.1/demo/public_html/ --restrict-file-names=nocontrol &
или
nohup wget -mc -X /www/example.com/public_html/media --ftp-user='USER' --ftp-password='PASSWD' -o ./wget.log ftp://127.0.0.1/demo/public_html/ --restrict-file-names=nocontrol &
- В редких случаях перенос может прерываться из-за лимитов одного из хостинг провайдера. Тогда ставим ограничение:
nohup wget -mc --limit-rate 500k --ftp-user='USER' --ftp-password='PASSWD' -o ./wget.log ftp:// --restrict-file-names=nocontrol &
Перенос через Filezilla
Если не удалось перенести в консоли, то можно использовать Filezilla: https://timeweb.com/ru/docs/obshchie-voprosy/filezilla/
Тут есть графический интерфейс. И проще всего это:
- скачать к себе на локальный компьютер со старого хостинга;
- закачать на новый хостинг со своего компьютера.
Пока несутся файлы - несем базу данных (cм. ниже).
После успешного переноса файлов:
- Удаляем листинги от wget:
find . -name '.listing' -exec rm {} \;
- Создаём директорию сайта в разделе "Сайты".
*Директорию лучше называть доменом.
- Заходим в директорию в консоли:
cd ~/example.com/public_html/
- Смотрим содержимое:
ls -lah
Если содержимое директории:
drwx------ 3 USER newcustomers 4096 Jan 10 11:16 . drwx------ 4 USER newcustomers 4096 Jan 10 12:22 .. drwx------ 2 USER newcustomers 4096 Jan 10 11:16 cgi-bin -rw------- 1 USER newcustomers 6701 Jan 10 11:16 index.htm
То выполняем команды:
cd ../ rm -rf public_html/
Если содержимое отличается, значит, у Вас что-то есть в директории. Если Вы не знаете или не помните, что у Вас тут хранится, то выполняем команды:
cd ../ mv public_html/ public_html_old
- Переносим файлы:
mv ~/tmp_example/127.0.0.1/www/example.com/public ./ mv public/ public_html
Удаляем лищнее
rm -rf tmp_example
Перенос базы данных
1. Если есть доступ в phpMyAdmin, входим в phpMyAdmin.
Если нет, используем adminer.
Adminer прост в использовании. Опишу работу с ним кратко:
- Зайти на старый хостинг.
- Создать в директории сайта директорию для админера:
mkdir adminer
- Перейти в директорию adminer:
cd adminer
- Закачать на старый хостинг админер:
wget https://github.com/vrana/adminer/releases/download/v4.5.0/adminer-4.5.0.php
Актуальные версии тут: https://www.adminer.org/
- Зайти в adminer example.com/adminer/adminer-4.5.0.php.
- Скачать дамп.
- Удалить adminer.
2. Создаём дамп базы данных:
- Кликаем на базу данных.
- "Экспорт".
- "Быстрый - отображать минимум настроек".
- "Ok".
Если нет быстрого метода, то необходимые настройки выставляются по умолчанию.
Необходимо обратить внимание на следующие моменты:
- выбрать все таблицы галочками;
- сохранить вывод в файл;
- использовать оператор при сохранении данных: INSERT.
Инструкции:
- http://timeweb.com/ru/help/pages/viewpage.action?pageId=4358203
- http://timeweb.com/ru/help/pages/viewpage.action?pageId=4358268
Дамп автоматически скачивается на локальный компьютер.
3. Создаём базу данных в разделе "Базы данных MySQL" на новом хостинге.
* Пароль берем из конфигурационного файла.
Инструкция:
http://timeweb.com/ru/help//pages/viewpage.action?pageId=9240878
4. Импортируем дамп в БД через phpmyadmin в разделе "Импорт".
Нюансы
- При необходимости. Изменяем привязку CMS к домену в БД. Например, в WordPress таблица option.
Подробнее в документации CMS.
Перенос сайта по SSH
Если мы имеем доступ по SSH:
1. Заходим на сервер старого хостинга.
2. При помощи команды cd попадаем в директорию сайта.
3. Копируем полный путь до директории. Команда:
pwd
4. Заходим на аккаунт на новом хостинге.
Создаём сайта в разделе "Сайты".
*Директорию лучше называть доменом.
5. Подключаемся к аккаунту на новом хостинге по SSH:
http://timeweb.com/ru/help/pages/viewpage.action?pageId=4358354
Заходим в директорию сайта:
cd ~/example.com/public_html/
6. Смотрим содержимое:
ls -lah
7. Если содержимое директории:
drwx------ 3 kaikavs newcustomers 4096 Jan 10 11:16 . drwx------ 4 kaikavs newcustomers 4096 Jan 10 12:22 .. drwx------ 2 kaikavs newcustomers 4096 Jan 10 11:16 cgi-bin -rw------- 1 kaikavs newcustomers 6701 Jan 10 11:16 index.htm
То выполняем команду:
rm -rf *
Если содержимое отличается, выполняем команды:
cd ../ mv public_html/ public_html_old mkdir public_html cd public_html
10. Переносим файлы.
Cлеш в конце пути.
Cлеш есть - rsync переносит файлы из директории;
слеша нет - rsync создаст одноименную директорию и в неё перенесет содержимое.
а. Простой перенос:
rsync -rpPvt login@ip:/home/v/www/site/public/ ./
- Вводим пароль.
* Если перенос прерывается - перезапускаем. rsync очень быстрый, и ограничивать его при небольших объемах сайта ни к чему.
б. Перенос без директории. Бывает, что надо перенести сайт, а у него есть лишняя директория с кешем, которая весит 90% сайта.
На примере Битрикса:
rsync -rpPvt -az --exclude='bitrix/cache/' --exclude='upload/resize_cache/' login@ip:/home/v/www/site/public/ ./
в. Перенос по-настоящему большого сайта, размером больше 10 Гб.
На примере Битрикса:
rsync --progress -rpPvt -az --exclude='bitrix/cache/' --exclude='upload/resize_cache/' --log-file=progress_rsync --bwlimit=500 login@ip:/home/v/www/site/public/ ./ tailf progress_rsync
Перенос БД по SSH
1. Создаём базу данных в разделе "Базы данных MySQL".
Пароль берем из конфигурационных файлов Вашего сайта. Подробнее:
http://timeweb.com/ru/help//pages/viewpage.action?pageId=9240878
2. Переносим БД.
a. Прямой перенос из базы данных в базу данных.
Заходим на сервер старого хостинга по SSH и вводим:
mysqldump -u"login_db" db_name -p"passwd" -h"host" | gzip -c | ssh login@server.timeweb.ru 'zcat > mysql -u"db" db -p"passwd"'
б. Перенос с созданием дампа.
1) Заходим на сервер старого хостинга по SSH и вводим:
mysqldump -u"login_db" db_name -p"passwd" -h"host" | gzip -c | ssh login@server.timeweb.ru 'zcat > DUMP.sql'
2) На новом хостинге хостинге вводим:
mysql -u'ИМЯ_БД' ИМЯ_БД -p'PASSWD' < DUMP.sql
Настройка сайта
1. Открываем один из конфигурационных файлов. Ещё раз:
http://timeweb.com/ru/help//pages/viewpage.action?pageId=9240878
2. Ищем имя базы данных, пароль от базы данных и старые пути.
3. Изменяем пароль от базы данных в Панели Управления нового хостинга на тот, что указан в конфиге.
4. Вне зависимости от CMS, будь то страшный ModX или WordPress, делаем следующее:
а. Изменяем привязку сайта к базе данных во всех файлах:
for i in `find . -type f ! -name '*.sql' -exec grep -H -l NAME_DB_OLD {} \;| cut -d' ' -f1`; do sed -i 's/NAME_DB_OLD/NAME_DB_NEW/g' $i; done
б. Изменяем пути во всех файлах сайта:
for i in `find . -type f ! -name '*.sql' -exec grep -H -l '/home/user/www/site/old/' {} \;| cut -d' ' -f1`; do sed -i 's#/home/user/www/site/#home/c/cl12345/example.com/public_html#g' $i; done
5. Проверить работу сайта.
Заключение
Я не имел цели написать статью для новичков. Поэтому если у Вас возникли вопросы по статье или непонимание, для чего нужна та или иная команда, ни в коем случае не переносите сайт самостоятельно.
Вы можете написать в поддержку Timeweb и перенос будет выполнен специалистами. Перенос сайтов в Timeweb выполняется сотрудниками поддержки бесплатно и не только на виртуальный хостинг, но и на VDS!
Комментарии
Возможно, тем, что по вашей замечательной и несомненно полезной инструкции его не получится перенести - не хватает важной информации о правке путей в бд, чистке кэша, правке конфигов, хотя допускаю, что вы намеренно описали только сам механизм переноса файлов и баз.
Зачастую все новички спотыкаются именно на правке конфигов и базы, плюс возможны несовместимости платформ - это вообще отдельная тема - разные версии ОС, php, разные конфигурации, из-за которых на новом хостинге может не хватить времени выполнения скрипта или memory_limit, особенности настройки php myadmin, из-за которых будут проблемы с кодировками при переносе и т д.
ИМХО вы описали полезные инструменты, особенно wget и админер, я пользовался всегда более тяжелым phpmyadmin, но при переносе сайта нельзя не учитывать особенности фреймворков и движков, простое перетаскивание базы прокатит наверное только с вордпрессом, и то не всегда. Битрикс проще и надежнее переносить его собственными утилитами,
телеграмм @Gennady_onlinepersonal
У робота нет доступа в телеграм, т.к. соц. сетки блокируют роботов
а телеграмм - это способ связи с экспертом и возможность оперативно обсудить ход действий