Перенос сайтов на хостинг Timeweb

5 комментариев
Перенос сайтов на хостинг Timeweb

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

У меня есть опыт переноса 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: http://timeweb.com/ru/help/display/DOC/FileZilla

Тут есть графический интерфейс. И проще всего это:

  1. скачать к себе на локальный компьютер со старого хостинга;
  2. закачать на новый хостинг со своего компьютера.

Пока несутся файлы - несем базу данных (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.

Инструкции:

Дамп автоматически скачивается на локальный компьютер.

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!

Комментарии

Сергей +1
07 авг в 2018
Чем вас MODx напугал?)
Возможно, тем, что по вашей замечательной и несомненно полезной инструкции его не получится перенести - не хватает важной информации о правке путей в бд, чистке кэша, правке конфигов, хотя допускаю, что вы намеренно описали только сам механизм переноса файлов и баз.
Зачастую все новички спотыкаются именно на правке конфигов и базы, плюс возможны несовместимости платформ - это вообще отдельная тема - разные версии ОС, php, разные конфигурации, из-за которых на новом хостинге может не хватить времени выполнения скрипта или memory_limit, особенности настройки php myadmin, из-за которых будут проблемы с кодировками при переносе и т д.
ИМХО вы описали полезные инструменты, особенно wget и админер, я пользовался всегда более тяжелым phpmyadmin, но при переносе сайта нельзя не учитывать особенности фреймворков и движков, простое перетаскивание базы прокатит наверное только с вордпрессом, и то не всегда. Битрикс проще и надежнее переносить его собственными утилитами,
Filip Borcov 0
07 авг в 2018
Можно просто воспользоваться импортом сайта :)
Геннадий +1
03 ноя в 2018
Нужна помощь в переносе сайта.
телеграмм @Gennady_onlinepersonal
Свернуть ответы
Filip Borcov 0
03 ноя в 2018
Пока это работает только с онлайн сайтами.
У робота нет доступа в телеграм, т.к. соц. сетки блокируют роботов
Геннадий +1
03 ноя в 2018
я имел ввиду, что нужна помощь эксперта в переносе сайта.
а телеграмм - это способ связи с экспертом и возможность оперативно обсудить ход действий
С помощью соцсетей
У меня нет аккаунта Зарегистрироваться
Нажимая кнопку «Зарегистрироваться», я даю согласие на обработку своих персональных данных, указанных в форме регистрации.
С помощью соцсетей
У меня уже есть аккаунт Войти
Нажимая кнопку «Зарегистрироваться», я даю согласие на обработку своих персональных данных, указанных в форме регистрации.
Инструкции по восстановлению пароля высланы на Ваш адрес электронной почты.
Пожалуйста, укажите email, который Вы использовали для входа на сайт.