Сайт Земскова Ильи
Веб-мастер, к.т.н., «200000».
Бензин ваш - идеи наши © И.Ильф и Е.Петров

Про синхронизацию maxSiteCMS-сайтов на локальной машине и сервере

В файле install-ru.txt, который идёт в поставке с maxSite CMS, есть подробные инструкции по установки движка «с нуля» и инструкции по обновлению движка с предыдущей версии. Благодаря им я уже много раз успешно поставил и/или обновил движок сайтов. Однако, в моей практике есть ситуация, которая не описана в мануале, но которая встречается даже чаще, чем указанные ситуации. Я имею ввиду ситуацию, когда сайт создан и уже давно «работает в продакшене» на сервере и возникла производственная необходимость синхронизировать состояние скриптов на машине разработчика с файлами на сервере.

С сервера на локальную машину

Отлаживать плагины или дорабатывать шаблон на сервере хоть и не рекомендую никому, но сам иногда этим грешу, ибо бывает нужно быстро заткнуть решить проблему, а уже потом «с чувством, с толком» разбираться с тем, что же произошло. Ещё мне нравится разрабатывать плагины в условиях приближенных к реальным. Т.е. желательно чтобы на локальном сайте крутились не тексты про белку, галактику или «лорем ипсум», а реально опубликованные в данный момент статьи. С картинками, ссылками и т.п. Мне так легче ловить баги вёрстки и функционирования сайта. В общем, без копирования на локальную машину работающей на сервере версии сайта в моём случае не обойтись.

На локальной машине у меня стоит система Windows 7 (+ Denwer). На сервере стандартно-комфортная конфигурация FreeBSD+Apache+MySQL+Php. Поэтому задача немного упрощается, ибо, как минимум, нет необходимости на локальной машине отслеживать права доступа на файлы скрипта и заботиться о настройках Php и Apache. Поэтому план действий по переносу сайта с сервера на машину разработчика выглядит так:

  1. Делаем резервную копию базы данных с помощью Dumper. При стандартном комплекте движка нужно обратиться по адресу 'http://имя_вашего_сайта/dumper/dumper.php' (при условии, что Dumper у вас настроен и имя папки вы не меняли). На своих проектах я использую следующее поколение Dumper - Sypex Dumper 2.0.9. Поэтому обращение идёт по адресу 'http://имя_вашего_сайта/sxd/' (далее буду писать только для стандартной версии Dumper, а для 2.0.9 всё то же самое - только имя папки меняется соответственно).
  2. Скачиваем по FTP папку с сайтом на локальный компьютер. За всё время работы у меня пока не прижились специальные программы FTP-клиенты - я пользуюсь по старинке FTP-клиентом FAR Manager-а. Обычно я копирую серверные файлы в папку 'S:\home\локальное_имя_сайта\www_serv'.
  3. Настраиваем коннект к базе данных. Нахожу файл 'S:\home\локальное_имя_сайта\www_serv\application\config\database.php' и правлю настройки подключения к базе данных. Мой стандартный вариант для локального компьютера:
  4. $db['default']['hostname'] = 'localhost';
    $db['default']['username'] = 'root';
    $db['default']['password'] = '';
    $db['default']['database'] = 'имя_сайта_db';

    Эта операция обычно проводится только при первой синхронизации. При повторных синхронизациях можно не править настройки заново, а просто заменить серверный файл настроек на локальный файл. Я делаю так:

    • переименовываю 'S:\home\локальное_имя_сайта\www_serv\application\config\database.php' в 'S:\home\локальное_имя_сайта\www_serv\application\config\database.php-serv'
    • переименовываю 'S:\home\локальное_имя_сайта\www_serv\application\config\database.php-local' в 'S:\home\локальное_имя_сайта\www_serv\application\config\database.php'
  5. Заменяем локальную версию файлов на скачанную с сервера. Т.е. нам нужно отправить в архив локальную версию сайта и поставить вместо неё работать версию сайта, которую только что скачали с сервера. Обычно я проделываю эту операцию следующим образом:
    • переименовываю папку 'S:\home\локальное_имя_сайта\www\' в 'S:\home\локальное_имя_сайта\www_текущая_дата\'
    • переименовываю папку 'S:\home\локальное_имя_сайта\www_serv\' в 'S:\home\локальное_имя_сайта\www\'
  6. Контролируем файл '.htaccess'. В некоторых случаях конфигурация сервера на хостинге может потребовать каких-то особенных настроек в файле '.htaccess' (под nginx нужно уточнять) и это надо учитывать. Обычно будет достаточно иметь две версии этого файла - для сервера и локальной машины. Поэтому, если вы столкнулись с такой необходимостью, переименуйте текущий файл (помним, что он только что скачан с сервера) из 'S:\home\локальное_имя_сайта\www\.htaccess' в 'S:\home\локальное_имя_сайта\www\.htaccess-serv'. Теперь скопируем из только что созданной архивной папки файл с настройками для локальной машины 'S:\home\локальное_имя_сайта\www_текущая_дата\.htaccess' в файл 'S:\home\локальное_имя_сайта\www\.htaccess'. Если вы уже не первый раз проходите весь процесс, то файл с локальными настройками у вас уже должен быть и поэтому можно не копировать из архива, а просто:
    • переименовываем 'S:\home\локальное_имя_сайта\www\.htaccess' в 'S:\home\локальное_имя_сайта\www\.htaccess-serv'
    • переименовываем 'S:\home\локальное_имя_сайта\www\.htaccess-local' в 'S:\home\локальное_имя_сайта\www\.htaccess'
  7. Обновляем локальную базу из серверного бэкапа с помощью Dumper. При использовании Dumper 1.0.8 нужно обратиться по адресу 'http://локальное_имя_сайта/dumper/dumper.php'. При использовании Dumper 2.0.9 обращение идёт по адресу 'http://локальное_имя_сайта/sxd/'.
  8. Проверяю работу сайта обращаясь в браузере по адресу 'http://локальное_имя_сайта/'. Сайт должен нормально открыться. Если возникает ошибка, то ищу причину в соответствии с ней.
  9. Сбрасываем кэш системы. Заходим в админку сайта 'http://локальное_имя_сайта/admin/' и нажимаем кнопку «Сбросить кэш системы». Делаем эту операцию для того, чтобы нам не мешал в разработке накопленный сервером кэш сайта.
  10. Приступаем к работе на локальной машине.

С локальной машины на сервер

Разработка закончена и пора выкладывать новую версию сайта на сервер. Теперь важно определиться с тем, что именно вы будете заливать на сервер. Если изменения коснулись только каких-то отдельных файлов плагинов, стилей, шаблона, то вся операция сводится к закачиванию по FTP изменившихся файлов на сервер с заменой (при необходимости) старых версий файлов. Это самый простой случай. Далее я опишу алгоритм действий в самом сложном случае - когда при работе на локальной машине был произведён апгрейд движка до более свежей версии и со времени последнего создания локальной копии серверной версии сайта менеджеры сайта успели опубликовать несколько постов, закачать несколько фотографий в папку '/uploads/' и изменить значения некоторых настроек шаблона сайта. А вы: добавили несколько важных опций в настройки шаблона, создали виджеты и пару ушек, в которых используются php-код. Итак, алгоритм действий такой:

  1. Переводим работающий на сервере сайт в режим «На обслуживании». Проще всего это сделать с помощью плагина «Режим обслуживания (Maintenance)». В нём ещё нет (сейчас версия плагина 1.1) возможности ограничения работы с админкой пользователям группы users пока сайт на обслуживании и поэтому нужно предупредить редакторов сайта, что в данный момент с сайтом работать нельзя. Иначе могут возникнуть лишние сложности с обновлением или потеряются данные клиента (если обновляете клиентский сайт).
  2. Переносим сделанные контент-менеджерами и/или комментаторами изменения с сервера на локальную машину. Если изменений не было и вы в этом уверены, то этот этап можно пропустить. Иначе делаем повторный бэкап базы данных сервера с помощью Dumper ('http://имя_вашего_сайта/dumper/dumper.php'). Скачиваем с сервера получившийся файл ('ftp://имя_вашего_сайта/dumper/backup/имя_сайта_db_текущая-дата_текущее-время.sql.gz') и размещаем его в локальной папке 'S:\home\локальное_имя_сайта\www\dumper\backup\'. Делаем бэкап базы данных локальной версии сайта ('http://локальное_имя_сайта/dumper/dumper.php').
  3. ВАЖНО! Если при работе на локальной машине вы задавали какие-то важные и сложные (например, php/html/css-код в настройках ушек/виджетов/плагинов или многострочные опции главного меню сайта) настройки, то перед следующим действием рекомендую открыть текстовый редактор и скопировать в него эти самые куски кода из настроек. Это нужно для того, чтобы быстрее и легче было восстановить значения.

    Теперь с помощью Dumper восстанавливаем в базе данных на локальной машине данные, которые перед этим скачали с сервера. Делаем это там же в 'http://локальное_имя_сайта/dumper/dumper.php' с файлом 'http://локальное_имя_сайта/dumper/backup/имя_сайта_db_текущая-дата_текущее-время.sql.gz' (точнее Dumper должен вам предложить на выбор несколько файлов 'имя_сайта_db_текущая-дата_текущее-время.sql.gz', среди которых вам нужно будет выбрать самый свежий по дате-времени).

    Когда с базой данных разобрались, пора переходить к файлам серверной папки '/uploads/'. Переименовываем локальную папку 'S:\home\локальное_имя_сайта\www\uploads\' в 'S:\home\локальное_имя_сайта\www\uploads-old\'. По FTP скачиваем полностью содержимое папки сервера 'ftp://имя_вашего_сайта/uploads/' в локальную папку 'S:\home\локальное_имя_сайта\www\uploads\'. Теперь папку 'S:\home\локальное_имя_сайта\www\uploads-old\' можно удалить или переместить в папку с архивами сайта (например, в 'S:\home\локальное_имя_сайта\backups\текущая-дата\uploads-old\').

    В заключении этой фазы нужно зайти в админ-панель локальной версии сайта ('http://локальное_имя_сайта/admin/') и пройтись по страницам настроек шаблона, виджетов, ушек и т.п. с целью внесения в базу данных настроек, которые не содержались в предыдущей версии сайта. При необходимости, нужно пользоваться скопированными в текстовый редактор кусками кода (о них говорилось в сноске "ВАЖНО"). После завершения этого этапа можно считать, что на вашей локальной машине находится самая последняя, самая полная, самая рабочая версия сайта. Откройте в браузере 'http://локальное_имя_сайта/' и убедитесь («гуляя» по сайту), что все доработки и нововведения отображаются и работают нормально.

  4. Делаем резервную копию локальной базы данных с помощью Dumper. Для этого открываем 'http://локальное_имя_сайта/dumper/dumper.php'.
  5. Настраиваем параметры подключения к базе данных на сервере. Для этого производим «обратное переименование»:
    • переименовываем 'S:\home\локальное_имя_сайта\www\application\config\database.php' в 'S:\home\локальное_имя_сайта\www\application\config\database.php-local'
    • переименовываем 'S:\home\локальное_имя_сайта\www\application\config\database.php-serv' в 'S:\home\локальное_имя_сайта\www\application\config\database.php'
  6. Копируем файлы сайта на сервер. Пользуясь FTP-клиентом копируем содержимое папки 'S:\home\локальное_имя_сайта\www\' на сервер в папку 'ftp://имя_вашего_сайта/'. При необходимости подтверждаем замену файлов. Если вы опасаетесь что-либо нарушить и хотели бы иметь возможность «откатить» обновление сайта к предыдущей версии, то можно сперва содержимое папки 'ftp://имя_вашего_сайта/' переместить в любую удобную для вас папку, например, можно перенести в папку 'ftp://имя_вашего_сайта/old/', предварительно создав её (и не перемещая её «саму в себя»). Однако нужно помнить, что сразу после перемещения всех файлов в другую папку перестанет работать сообщение «Сайт на обслуживании» (которое выдаёт плагин Maintenance). На малопосещаемых сайтах это не критично, а на выскопосещаемых ресурсах лучше подобрать утреннее время, когда на сайт приходит минимум посетителей или же совсем отказаться от этого варианта обновления.
  7. Проверяем/устанавливаем права на файлы и папки. После копирования файлов на сервер нужно проверить и при необходимости установить права доступа на некоторые файлы и папки:
    • папке 'ftp://имя_вашего_сайта/application/cache/' и всем её подпапкам права CHMOD 777 (разрешение на запись);
    • файлу 'ftp://имя_вашего_сайта/sitemap.xml' права CHMOD 666 (разрешение на запись);
    • папке 'ftp://имя_вашего_сайта/uploads/' и подпапкам '_mso_float', '_mso_i' и 'mini' права CHMOD 777 (разрешение на запись);
    • папке 'ftp://имя_вашего_сайта/dumper/backup/' права CHMOD 777 (разрешение на запись) или же папке 'ftp://имя_вашего_сайта/sxd/backup/' права CHMOD 777 и файлам 'ftp://имя_вашего_сайта/sxd/cfg.php' и 'ftp://имя_вашего_сайта/sxd/ses.php' CHMOD 666 (в случае, если Dumper
    • 2.0.9)

  8. Контролируем файл '.htaccess'. Если вы делали как указано выше, то контроль сводится к «рокировке»:
    • переименовываем 'ftp://имя_вашего_сайта/.htaccess' в 'ftp://имя_вашего_сайта/.htaccess-local'
    • переименовываем 'ftp://имя_вашего_сайта/.htaccess-serv' в 'ftp://имя_вашего_сайта/.htaccess'
  9. Обновляем серверную базу данных из локального бэкапа с помощью Dumper. При использовании Dumper 1.0.8 нужно обратиться по адресу 'http://имя_вашего_сайта/dumper/dumper.php'. При использовании Dumper 2.0.9 обращение идёт по адресу 'http://имя_вашего_сайта/sxd/'.
  10. Сбрасываем кэш системы. Заходим в админку сайта 'http://имя_вашего_сайта/admin/' и нажимаем кнопку «Сбросить кэш системы».
  11. Проверяем состояние плагина Maintenance. Если плагин включен, то переводим его в нерабочее состояние.
  12. Проверяем работу сайта обращаясь в браузере по адресу 'http://имя_вашего_сайта/'. Сайт должен нормально открыться. Если возникает ошибка, то ищем причину в соответствии с выданным описанием или с помощью изучения логов веб-сервера.
  13. Приступаем к работе с сайтом. И не забудьте уведомить контент-менеджеров о том, что сайт доступен для их работы.

Я понимаю, что инструкция довольно утомительна для простого чтения. Поэтому если кому-то кроме меня она пригодится, то буду искренне рад. Также я заранее благодарю комментаторов за все дельные советы по улучшению памятки.

В материале не отображен более технологичный способ обновления на оcнове технологий типа SVN. Сделано это по той причине, что SVN в большинстве конфигураций тратит больше ресурсов, чем приносит пользы. Мои слова не повод для начала холивара, ибо SVN мне нравится и по возможности я его использую, но не вижу смысла навязывать технологию людям, которые очень редко ей пользуются (я имею в виду случаи, когда разрабатывается и обслуживается куча относительно мелких сайтов-блогов). Возможно в будущем появится материал об использовании SVN при обслуживании сайтов на maxSite CMS.