Как перенести локальный сайт на хостинг и наоборот

Опубликовано: Комментариев: 0

Любой разработчик рано или поздно сталкивается с необходимостью переноса веб-проекта с одного сервера на другой. Это может быть связано как с развёртыванием локального сайта на удаленном сервере, так и с переносом рабочего сайта с одного сервера на другой (при смене хостинга), а также с переносом сайта на локальный компьютер для дальнейшего тестирования. В этой заметке я расскажу как перенести сайт с одного сервера на другой. Приведенная ниже информация подходит для любых проектов и решает следующие типы задач:

  • Перенос сайта с локального сервера (Денвера, OpenServer, WAMP, LAMP и т.д.) на хостинг;
  • Как перенести сайт с хостинга на локальный сервер;
  • Как перенести сайт с одного сервера на другой.
Для наглядности я опишу процесс миграции на системе WordPress, которая обслуживает мой блог slicks.name, а если у Вас возникнут затруднения с переносом любой другой CMS ( к примеру PrestaShop, OpenCart и т.д.) - вы всегда вольны написать в комментариях, и я Вам помогу!

Немного теоретической подготовки.

Любой современный сайт состоит из двух основных компонентов:
  1. Файловая система;
  2. База данных.
Таким образом, для полного и правильного переноса сайта нам необходимо перенести оба этих компонента.

Копирование файловой системы веб-сайта

Начнём с самого простого. Для переноса файлов сайта с сервера на локальную машину нам потребуется FTP клиент и учётная запись для доступа на сервер, либо Вы можете воспользоваться файловым менеджером внутри панели управления хостинга. А на локальном компьютере следует создать соответствующую папку под файлы сайта. Лично я предпочитаю следующую структуру файлов у себя на ПК: Все сайты у меня расположены по адресу /home/www-data/, для каждого веб-проекта я создаю папку с соответствующим названием, но без указания доменной зоны (для лаконичности названия папки). Для сайта slicks.name я создал папку с адресом /home/www-data/slicks/, а в  папке под конкретный сайт создаю следующую структуру:
  • public_html - для файловой системы сайта. На хостинге домены также расположены по аналогичной схеме (/domains/slicks.name/public_html);
  • back-up - в этой папке хранятся все резервные копии базы данных, а также архивы версий сайта;
  • source - как вы поняли из названия тут у меня различные исходники к веб-проекту (PSD макет шаблона, логотипы и так далее).
Всё, что от нас нужно - это скопировать содержимое из папки с файлами сайта в нашу локальную папку. Маленький совет: если сайт большой и содержит множество файлов, имеет смысл сжать (сделать рез. копию) все файлы сайта в 1 архив через панель хостинга и затем загрузить этот файл. В противном случае, при загрузке через FTP клиент для каждого файла программа будет вынуждена открывать соединение, загружать файл, затем закрывать соединение, открывать его для загрузки следующего файла и так далее.

Создание резервной копии базы данных

Что касается резервного копирования базы данных, то существуют следующие способы реализации задачи:
  • Серверная консоль;
  • Панель хостинга;
  • phpMyAdmin;
  • специальные модули для CMS (Я в Wordpress использую WordPress Database Backup для регулярного копирования БД).
Я остановлюсь на копировании через phpMyAdmin. Т.к. считаю этот способ наиболее простым, доступным и не требующим дополнительных затрат времени и усилий. Заходим в phpMyAdmin по адресу, который вы легко можете найти в панели хостинга, а если же хотите перенести локальный сайт на хостинг, то скорее всего адрес у вас будет такой http://localhost/phpmyadmin/. PhpMyAdmin попросит логин и пароль для доступа к базе данных. Если пароль и логин вам не известны - их легко получить, зная какая CMS на сайте используется. Любой веб-проект, использующий Базу данных для хранения информации о статьях, товарах, комментариях и т.д. хранит у себя в файловой системе файл с конфигурацией для доступа к базе данных. В Wordpress файл называется wp-config.php и  расположен в корне сайта, в PrestaSHop, к примеру, по адресу /config/settings.inc.php. Там мы и найдём наши поля DataBase User и Password, а также имя базы данных, которая содержит информацию о нашем сайте. Заходим в phpMyAdmin, в списке баз данных (слева) нажимаем мышкой на нашу базу. И теперь кликаем EXPORT на панели вверху. Как писал ранее, я сохраняю копии баз данных в папке /home/www-data/slicks/back-up/.

Конфигурация файлов после копирования.

Если вы переносили сайт с одного хостинга на другой и при этом имя сайта не менялось, больше ничего делать не нужно. Смело меняйте NSы и всё будет работать. Но если Вы новичек и переносите сайт впервые в жизни - потренируйтесь с переносом на локальный сайт, а уже потом переносите с сервера на локалку, чтобы избежать проблем. Если же переносили сайт с локального на реальный сервер или наоборот, то читаем дальше. Как правильно, локальному сайту присваивается имя в локальной доменной зоне. Скажем, я сайту slicks.name дал локальное имя slicks.lan. Это удобно тем, что во-первых, всегда видно какой сайт локальный, а какой реальный, а во-вторых нет конфликта, как если бы оба сайта и локальный, и реальный имели бы одинаковое доменное имя slicks.name. Но! Теперь чтобы всё работало, нам нужно немного магии :)

Редактирование файла базы данных

Для начала сделаем рез. копию БД, а новый файл пометим приставкой local. В "локальной" БД через автозамену меняем все вхождения доменного имени (у меня slicks.name) на локальное название сайта (slicks.lan). При переносе с виртуального на реальный хост делаем аналогично, но наоборот. И в phpMyAdmin создаём БД с таким же именем, как имелась на сайте. затем импортируем наш измененный дамп базы данных. И самое важное, создаем в разделе privileges нового пользователя с аналогичным логином и паролем, как в вашем файле конфигурации. Маленький совет: перед импортом файла БД сожмите его в ZIP архив. При импорте БД на другом сервере может возникнуть ошибка, если файл будет превышать максимальный размер файла для загрузки. У меня он установлен в 2,048KiB. При этом моя БД занимает 3,8 Мб, а в zip архиве всего 680 кб! Ну вот и всё! Удачи! Если сайт не запускается, смотрите на ошибку, которую он пишет. У меня потребовалось также подправить файл .htacces, поскольку в нём были установлены специальные правила от хостинга для защиты. Не убрав эти инструкции я получал ошибку 500. А также у меня там стояла защита от hotlink, и я через автозамену подправил все slicks.name на slicks.lan.