Дублирование установки

Введение

Зачем дублировать установку Elgg?

Существует множество причин, по которым вы можете захотеть дублировать установку Elgg: перенос сайта на другой сервер, создание тестового или сервера разработки, создание функциональных резервных копий — это наиболее распространённые. Для успешного дублирования сайта Elgg необходимо скопировать 3 вещи:

  • База данных

  • Данные из каталога данных

  • Код

Также необходимо изменить как минимум 5 элементов информации из скопированной установки:

  • файл elgg-config/settings.php, который также может находиться в расположении до версии 2.0 engine/settings.php

  • файл .htaccess (Apache) или конфигурация Nginx в зависимости от используемого сервера

  • запись в базе данных для сущности вашего сайта

  • запись в базе данных для пути установки

  • запись в базе данных для пути к данным

Что не рассматривается в этом руководстве

Это руководство предполагает базовые знания команд Apache, MySQL и Linux. В связи с этим некоторые вещи не будут рассматриваться в этом руководстве. К ним относятся:

  • Как создавать резервные копии и восстанавливать базы данных MySQL

  • Как настроить Apache для работы с Elgg

  • Как передавать файлы на производственный сервер и с него

Прежде чем начать

Прежде чем начать, убедитесь, что установка Elgg, которую вы хотите дублировать, полностью функциональна. Вам также потребуются следующие элементы:

  • Резервная копия рабочей базы данных Elgg

  • Место для копирования рабочей базы данных

  • Сервер, подходящий для установки дубликата сайта Elgg

    (Это может быть тот же сервер, что и ваша производственная установка Elgg.)

Резервные копии базы данных можно получить различными способами, включая phpMyAdmin, официальный графический интерфейс MySQL и командную строку. Обратитесь к вашему хостинг-провайдеру за информацией о том, как создавать резервные копии и восстанавливать базы данных, или используйте Google для поиска информации по этому вопросу.

В ходе этого руководства мы будем исходить из следующих предположений о производственном сайте Elgg:

  • URL — http://www.myelgg.org/

  • Путь установки — /var/www/elgg/

  • Каталог данных — /var/data/elgg/

  • Хост базы данных — localhost

  • Имя базы данных — production_elgg

  • Пользователь базы данных — db_user

  • Пароль базы данных — db_password

  • Префикс базы данных — elgg

В конце руководства детали нашей тестовой установки Elgg будут следующими:

  • URL — http://test.myelgg.org/

  • Путь установки — /var/www/elgg_test/

  • Каталог данных — /var/data/elgg_test/

  • Хост базы данных — localhost

  • Имя базы данных — test_elgg

  • Пользователь базы данных — db_user

  • Пароль базы данных — db_password

  • Префикс базы данных — elgg

Копирование кода Elgg на тестовый сервер

Самый первый шаг — дублировать производственный код Elgg. В нашем примере это так же просто, как скопировать /var/www/elgg/ в /var/www/elgg_test/.

cp -a /var/www/elgg/ /var/www/elgg_test/

Копирование данных на тестовый сервер

В этом примере это так же просто, как скопировать /var/data/elgg/ в /var/data/elgg_test/.

cp -a /var/data/elgg/ /var/data/elgg_test/

Если у вас нет доступа к оболочке сервера и приходится передавать данные по FTP, возможно, потребуется изменить владельца и права доступа к файлам.

Примечание

Также необходимо удалить кэш-каталоги с вашего диска. Они соответствуют каталогам cacheroot и assetroot в вашей конфигурации.

Редактирование settings.php

Файл elgg-config/settings.php содержит сведения о конфигурации базы данных. Их необходимо скорректировать для вашей новой тестовой установки Elgg. В нашем примере мы посмотрим в /var/www/elgg_test/elgg-config/settings.php и найдём строки, которые выглядят так:

// Database username
$CONFIG->dbuser = 'db_user';

// Database password
$CONFIG->dbpass = 'db_password';

// Database name
$CONFIG->dbname = 'elgg_production';

// Database server
// (For most configurations, you can leave this as 'localhost')
$CONFIG->dbhost = 'localhost';
// (For most configurations, you can leave this as 3306)
$CONFIG->dbport = 3306;

// Database table prefix
// If you're sharing a database with other applications, you will want to use this
// to differentiate Elgg's tables.
$CONFIG->dbprefix = 'elgg';

Нам нужно изменить эти строки, чтобы они соответствовали нашей новой установке:

// Database username
$CONFIG->dbuser = 'db_user';

// Database password
$CONFIG->dbpass = 'db_password';

// Database name
$CONFIG->dbname = 'elgg_test';

// Database server
// (For most configurations, you can leave this as 'localhost')
$CONFIG->dbhost = 'localhost';
// (For most configurations, you can leave this as 3306)
$CONFIG->dbport = 3306;

// Database table prefix
// If you're sharing a database with other applications, you will want to use this
// to differentiate Elgg's tables.
$CONFIG->dbprefix = 'elgg';

$CONFIG->wwwroot = 'http://your.website.com/'

Примечание

Обратите внимание, что $CONFIG->dbname изменено, чтобы отразить нашу новую базу данных.

Копирование базы данных Elgg

Теперь базу данных необходимо скопировать из elgg_production в elgg_test. Обратитесь к документации вашего любимого менеджера MySQL, чтобы узнать, как создать дубликат базы данных. Обычно вы экспортируете текущие таблицы базы данных в файл, создаёте новую базу данных, а затем импортируете ранее экспортированные таблицы.

У вас есть два варианта обновления значений в базе данных. Вы можете изменить значения в файле экспорта или импортировать файл и изменить значения с помощью запросов к базе данных. Одно из преимуществ изменения файла дампа заключается в том, что вы также можете изменить ссылки, которые люди создали на контент вашего сайта. Например, если люди добавили страницы в закладки с помощью плагина закладок, закладки будут указывать на старый сайт, если вы не обновите их URL.

Записи в базе данных

Теперь нам нужно изменить 4 записи в базе данных. Это легко сделать с помощью 4 простых команд SQL:

Изменение пути установки

UPDATE `elgg_config` SET `value` = REPLACE(`value`, "/var/www/elgg_production/", "/var/www/elgg_test/") WHERE `name` = "path";

Изменение каталога данных

UPDATE `elgg_config` SET `value` = REPLACE(`value`, "/var/data/elgg_production/", "/var/data/elgg_test/") WHERE `name` = "dataroot";

Проверка .htaccess

Если вы внесли изменения в .htaccess, которые изменяют какие-либо пути, убедитесь, что вы обновили их в тестовой установке.

Обновление конфигурации веб-сервера

В этом примере вы должны отредактировать конфигурацию Apache, чтобы включить поддомен с корнем документа /var/www/elgg_test/. Если вы планируете установку в подкаталог корня документа, этот шаг не требуется.

Если вы используете Nginx, вам необходимо обновить конфигурацию сервера, чтобы она соответствовала новым путям на основе install/config/nginx.dist.

Запуск upgrade.php

Для регенерации кэшированных данных обязательно запустите http://test.myelgg.org/upgrade.php

Советы

Хорошая идея — держать под рукой тестовый сервер для экспериментов с установкой новых модов и выполнением работ по разработке. Если вы автоматизируете восстановление в базу данных elgg_test, изменение значений $CONFIG и добавление следующих строк в конец файла elgg_test/elgg-config/settings.php позволит беспрепятственно перезаписывать записи базы данных MySQL.

$con = mysql_connect($CONFIG->dbhost, $CONFIG->dbuser, $CONFIG->dbpass);
mysql_select_db($CONFIG->dbname, $con);

$sql = "UPDATE {$CONFIG->dbprefix}config
   SET value = REPLACE(`value`, "/var/www/elgg_production/", "/var/www/elgg_test/")
   WHERE name = 'path'";
mysql_query($sql);
print mysql_error();

$sql = "UPDATE {$CONFIG->dbprefix}config
   SET value = REPLACE(`value`, "/var/data/elgg_production/", "/var/data/elgg_test/")
   WHERE name = 'dataroot'";
mysql_query($sql);
print mysql_error();