Недавно у меня возникла задача перенести сайт с October CMS на другой домен и на другой хостинг. "Обычный перенос, ничего особенного", - подумал я поначалу. Но в процессе работы возникали непредвиденные ранее нюансы, о которых я хочу рассказать в этом посте.
Кстати, используя логику этой инструкции, можно перенести не только сайт на October CMS, но и на Wordpress, 1С-Битрикс, UMI.CMS, NetCat, Shop-Script, HostCMS и многих других.
Итак, рассмотрим перенос сайта на October CMS
❶Первым делом давайте сделаем дамп нашей базы данных. Если у Вас phpMyAdmin - заходим, нажимаем слева по названию базы данных нашего сайта, затем нажимаем в верхнем меню кнопку "Экспорт", метод оставляем "Быстрый" (он стоит по-умолчанию), нажимаем "Вперёд". Немного ждём, база данных успешно сохраняется в файл с расширением SQL.
Если у Вас сервер и Вы работаете с базой данных напрямую, то подключаемся к серверу по SSH, затем готовим и выполняем команду. Образец команды:
mysqldump -uимяПользователя -p'парольПользователя' имяБазыДанных > dump.sql
После выполнения данной команды файл dump.sql появится в той директории, в которой Вы находились в текущий момент (можете проверить это, выполнив команду pwd в консоли).
Затем открываем файл базы данных через любой подходящий для этого текстовый редактор (я использую Sublime Text) и приступаем к редактированию.
Нажимаем Ctrl+H для включения режима поиска и замены. В строку поиска вставляем наш текущий адрес сайта, например https://old-site.ru/, а в строку замены вставляем новый адрес сайта, например https://new-site.ru/. Нажимаем Replace All (или Заменить все, если Вы используете другой текстовый редактор).
Но это ещё не всё! Здесь я столкнулся с первым непредвиденным моментом: оказалось, что ещё требуется изменить пути для Twig, которые также приписаны в файле базы данных. Для этого, сначала находим текущий полный абсолютный путь к нашему сайту на текущем хостинге. Например, это может быть такой путь: /var/www/u0790650/public_html/, либо другой, но это точно должен быть именно тот путь (относительно корня файловой системы Вашего хостинга), по которому расположен Ваш сайт на текущий момент (до переноса). Кстати, этот путь Вы можете посмотреть в файловом менеджере (например Filezilla или WinSCP). А если Вы работаете с сайтом без файловых менеджеров (через консоль), то зайдите в корневую папку Вашего сайта и выполните команду pwd.
Также, заранее смотрим новый путь, в котором будет расположен наш сайт. Это тот путь, где будет располагаться наш сайт после переноса, например, /home/httpd/vhosts/lisogorsky.ru/httpdocs/. Проверяем, чтобы и в первом и во втором случае в конце пути либо стоял слэш /. Снова нажимаем Ctrl+H и производим полную замену. Замен будет несколько десятков (а то и сотен) тысяч, поэтому не пугайтесь, если Ваш компьютер зависнет. Просто терпеливо ожидаем окончания замен и сохраняем файл.
❷После того, как мы сохраним файл, переходим к загрузке базы данных на хостинг.
Если у Вас phpMyAdmin - заходим, нажимаем слева по названию базы данных нашего сайта, затем нажимаем в верхнем меню кнопку "Импорт", выбираем файл на нашем компьютере, нажимаем "Вперёд".
Если у Вас сервер и Вы работаете с базой данных напрямую, то подключаемся к серверу по SSH, затем готовим и выполняем команду. Образец команды:
mysql -uимяПользователя -p'парольПользователя' имяБазыДанных < нашФайлБазыДанных.sql
С файлом базы данных работу закончили, переходим к следующему шагу.
❸На данном этапе мы создадим архив файлов нашего сайта. Это можно сделать за несколько секунд, особенно, если прочитать мою статью про команду tar, с помощью которой мы за секунды можем создавать архивы и очень быстро копировать их в другие места. Ведь если Вы решите копировать сайт без сжатия, то, во-первых, это может быть очень долго, несколько часов для крупных проектов; во-вторых, могут быть ошибки в тех случаях, когда имена файлов будут иметь некорректные имена с точки зрения Вашей текущей файловой системы. Итог - копируем все файлы и папки с одного домена на другой через архивацию!
❹Следующий шаг: исправление ошибок.
На данном этапе, даже если мы откроем сайт, мы можем увидеть страницу с ошибками:
We're sorry, but an unhandled error occurred. Please see the details below. SQLSTATE[HY000] [1045] Access denied for user 'u0790650_default'@'localhost' (using password: YES) (SQL: select * from `rainlab_blog_categories` where `slug` = personal-blog order by `nest_left` asc limit 1) /home/httpd/vhosts/mcdir.ru/httpdocs/vendor/laravel/framework/src/Illuminate/Database/Connection.php line 664 TYPE PHP Content EXCEPTION Illuminate\Database\QueryException
Это ошибки, которые говорят нам о том, что у нас некорректные настройки соединения с базой данных.
Правим config файл с настройками базы данных в October CMS
Открываем файл /config/database.php, находим mysql и вписываем корректные настройки подключения к нашей новой базе данных. Логин, пароли и хост указаны в панели управления хостингом, либо Вы можете уточнить это у технической поддержки хостинга.
Сохраняем файл, проверяем работу сайта.
Но даже после этого сайт может не работать. Например, может возникнуть ошибка, при некорректной версии PHP. Это может быть в тех случаях, когда хостинг по умолчанию создаёт новый сайт с версией PHP меньше 7. Я как раз сам столкнулся с данной проблемой, и пока вручную не изменил на хостинге версию PHP с 5.6 на 7.3 - ничего не работало, была ошибка: "Страница недоступна. Сайт ...... пока не может обработать этот запрос. HTTP ERROR 500".
Также может быть ещё одна интересная ошибка, предвидеть которую изначально невозможно. При создании сайта я создал свою тему и в папке /themes/ удалил за ненадобностью тему 'demo', которая стояла по-умолчанию. Несмотря на физическое удаление папки, сайт прекрасно продолжал работать до момента переноса. И на новом домене все страницы кроме главной не отображались, выходила ошибка "The active theme is not found":
/var/www/.../modules/cms/classes/Controller.php line 124 Undefined EXCEPTION Cms\Classes\CmsException * If the theme is not specified, the current active theme used. */ public function __construct($theme = null) { $this->theme = $theme ? $theme : Theme::getActiveTheme(); if (!$this->theme) { throw new CmsException(Lang::get('cms::lang.theme.active.not_found')); } $this->assetPath = Config::get('cms.themesPath', '/themes').'/'.$this->theme->getDirName(); $this->router = new Router($this->theme); $this->partialStack = new PartialStack; $this->initTwigEnvironment(); }
Исправить такую ошибку очень просто - нужно установить корректное название темы в файле /config/cms.php. Вот так:
'activeTheme' => 'названиеНашейТемы',
А название нашей темы в общем будет равно названию папки с темой внутри папки /themes/.
Надеюсь, у Вас всё получилось. Если нет - пишите в комментариях, будем разбирать!
Подписывайтесь на группу в ВКонтакте, вступайте в сообщество на Facebook, чтобы всегда быть в курсе актуальных выпусков
Web development blog!