Установка Drupal Multisite на Debian с ISPConfig
Основные понятия
- Multisite — запуск нескольких сайтов на одном кодовой базе Drupal с отдельными настройками и файлами.
- Ядро Drupal (core) — общие каталоги modules, themes, includes и т. п., которые используются всеми сайтами.
- settings.php — файл конфигурации конкретного сайта; он содержит настройки подключения к БД и некоторые системные параметры.
Хронология операции (кратко)
- Создаёте сайт и базу в ISPConfig.
- Даёте права MySQL владельцу базы через root.
- На уровне файлов создаёте символьные ссылки и копируете стартовые файлы из core в корень нового сайта.
- Создаёте каталог sites/<домен> и настраиваете settings.php.
- Проходите установку через веб-интерфейс, настраиваете cron и права папки files.
Важно: все команды выполняйте от привилегированного системного пользователя, который имеет доступ к /www и правам на создание ссылок и папок. Не используйте учётную запись web-приложения для выдачи привилегий в MySQL.
Чему соответствует это руководство — цели и варианты использования
Primary intent: развернуть новый мультисайт Drupal 5.6 на Debian Etch с ISPConfig. Подходит для среды, где одно ядро Drupal уже установлено в /www/web1/web/ и второй сайт будет расположен в /www/web2/web/. Варианты: аналогично применимо к другим дистрибутивам Linux при корректировке путей и инструментов управления хостингом.
1. Требования и подготовка
- Debian Etch (инструкция писана для Debian, но шаги применимы к любому Linux при корректировке путей).
- Установленный Drupal core в /www/web1/web/ (в примере — версия 5.6).
- ISPConfig для управления сайтами, пользователями и созданием БД.
- Доступ к MySQL как root для выдачи привилегий.
- Права на файловую систему для создания символьных ссылок и изменения chmod.
Коротко: проверьте, что у вас есть доступ к терминалу, ISPConfig и MySQL root.
2. Имена и пароли в примере
В примере используются следующие обозначения — замените их на свои значения:
- Домен мультисайта: www.multiexample.tld
- Администратор сайта: admin
- MySQL суперпользователь: root (пароль rootpassword)
- База мультисайта: web2_db1
- MySQL пользователь мультисайта: web2_u1
- Пароль для web2_u1: web2password
- Drupal версия в примере: 5.6
3. Создание нового сайта в ISPConfig
- Войдите в ISPConfig.
- Перейдите: ISP Manager => New site.
- Заполните форму: Hostname = www, Domain = multiexample.tld.
- Включите PHP и MySQL. Не выбирайте PHP Safe Mode.
- Не сохраняйте пока: создайте пользователя администратора через User and Email => New. Создайте user = admin и предоставьте права администратора, добавьте email.
- Сохраните пользователя, затем вернитесь к окну сайта и создайте базу: Options => Database New.
- ISPConfig покажет: Database name: web2_db1, Database user: web2_u1 — задайте пароль web2password и нажмите Save.
- Вернитесь на вкладку Basic и нажмите Save, чтобы сохранить сайт.
Примечание: интерфейс ISPConfig может отличаться по версии; поля те же, логика одинаковая.
4. Предоставление привилегий в MySQL
Важно: используйте MySQL root для выдачи прав. Новому пользователю web2_u1 нужно дать привилегии над web2_db1.
Выполните в терминале:
mysql -u root -pВведите пароль rootpassword. В появившейся подсказке mysql> выполните:
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER, CREATE TEMPORARY TABLES, LOCK TABLES ON web2_db1.* TO 'web2_u1'@'localhost' IDENTIFIED BY 'web2password';Если успешно, вы увидите:
Query OK, 0 rows affectedАктивируйте права:
FLUSH PRIVILEGES;Выйдите из mysql. Если вы использовали интерактивную оболочку, завершите доступ стандартным способом (например, CTRL+D или EXIT). Не используйте CTRL+Z, так как это переводит процесс в фоновый режим.
Важно: не используйте пользователя web2_u1 для выдачи привилегий другим пользователям — только root или другой суперпользователь MySQL.
5. Установка файлов Drupal для мультисайта
Переключитесь в корень нового сайта:
cd /www/web2/web/Создайте символьные ссылки на общие каталоги ядра Drupal, чтобы использовать одну кодовую базу:
ln -s /www/web1/web/includes
ln -s /www/web1/web/misc
ln -s /www/web1/web/modules
ln -s /www/web1/web/profiles
ln -s /www/web1/web/scripts
ln -s /www/web1/web/sites
ln -s /www/web1/web/themesЗатем скопируйте необходимые файлы из ядра в корень сайта (они нужны для корректного запуска и установки):
cp /www/web1/web/CHANGELOG.txt /www/web2/web/
cp /www/web1/web/cron.php /www/web2/web/
cp /www/web1/web/index.php /www/web2/web/
cp /www/web1/web/INSTALL.mysql.txt /www/web2/web/
cp /www/web1/web/INSTALL.pgsql.txt /www/web2/web/
cp /www/web1/web/install.php /www/web2/web/
cp /www/web1/web/INSTALL.txt /www/web2/web/
cp /www/web1/web/LICENSE.txt /www/web2/web/
cp /www/web1/web/MAINTAINERS.txt /www/web2/web/
cp /www/web1/web/robots.txt /www/web2/web/
cp /www/web1/web/update.php /www/web2/web/
cp /www/web1/web/UPGRADE.txt /www/web2/web/
cp /www/web1/web/xmlrpc.php /www/web2/web/Теперь создайте каталог для домена внутри общего каталога sites ядра. Обратите внимание: каталог создаётся в /www/web1/web/sites/ (ядро), а не в /www/web2/web/sites/. Это нормальная практика: каждый мультисайт получает подкаталог в общем sites.
mkdir /www/web1/web/sites/multiexample.tldСкопируйте заготовленный файл настроек (в примере settings.php.multi с первой части руководства) и задайте временно открытые права для установки:
cp /www/web1/web/sites/default/settings.php.multi /www/web1/web/sites/multiexample.tld/settings.php
chmod 777 /www/web1/web/sites/multiexample.tld/settings.phpВ корне /www/web2/web/ может присутствовать index.html, установленный ISPConfig. Переименуйте его, чтобы не мешал index.php Drupal:
mv index.html index.html.oldПримечание: альтернативно можно удалить index.html, но лучше переименовать как резервную копию.
6. Настройка базы через веб-интерфейс Drupal
Откройте браузер и перейдите на http://www.multiexample.tld. Если всё в порядке, вы увидите страницу установки БД. Введите параметры:
- Database name: web2_db1
- Username: web2_u1
- Password: web2password
Нажмите “Save configuration”. После успешной инициализации вы получите предупреждение о правах на settings.php — система попросит вернуть права к 644.
Вернитесь в терминал, находясь в /www/web2/web/ (или перейдите туда):
cd /www/web2/web/
chmod 644 sites/multiexample.tld/settings.phpСоздайте директорию для загружаемых файлов сайта и сделайте её записываемой веб-сервером:
mkdir files
chmod 777 filesПримечание по безопасности: chmod 777 удобно для установки, но небезопасно в долгосрочной перспективе. После настройки рекомендуем ограничить права до более безопасных значений и настроить владельца/группу под пользователя веб-сервера (например, www-data).
7. Завершение установки и первичная конфигурация
Зайдите в админку сайта (http://www.multiexample.tld) и создайте root-пользователя сайта. Drupal пришлёт на указанный email сгенерированный пароль. Если вы измените пароль вручную, система не пришлёт его по почте, поэтому сохраните его в надёжном месте.
Перейдите в раздел Отчёт о состоянии (Status report). Возможно, вы увидите сообщение о неработающем cron. Запустите cron вручную, чтобы убрать предупреждение. Затем настройте автоматический запуск cron (см. ниже).
8. Настройка Cron
Cron нужен для задач обслуживания: отправка почты, обновление индексов, агрегация кеша и т. п. Простой вариант — добавить в кронтаб системного пользователя команду для выполнения cron.php:
Для систем с wget:
*/30 * * * * /usr/bin/wget -O - -q -t 1 http://www.multiexample.tld/cron.phpИли через curl:
*/30 * * * * /usr/bin/curl --silent http://www.multiexample.tld/cron.php >/dev/null 2>&1Для более безопасного вызова используйте запуск PHP CLI (если доступен) и absolute path на update.php или cron.php с параметрами пользователя.
Важно: интервал и метод зависят от нагрузки сайта. Частые вызовы увеличивают нагрузку.
9. Чек-листы и роли
Ниже — практические контрольные списки для ключевых ролей.
Для системного администратора
- Создал сайт в ISPConfig и указал hostname и домен.
- Создал MySQL базу web2_db1 и пользователя web2_u1.
- Выдал нужные привилегии через root.
- Создал симлинки и скопировал необходимые файлы из ядра.
- Настроил правильные права для settings.php (777 для установки, 644 после).
- Создал директорию files и назначил права/владельца.
- Настроил cron и проверил выполнение задач.
- Настроил резервное копирование файлов и базы данных.
Для администратора сайта (контент)
- Создал учетную запись администратора сайта и сохранил пароль.
- Проверил статус сайта в админке Drupal, запустил cron вручную.
- Настроил e-mail отправку тестового письма.
- Установил базовые модули и тему оформления при необходимости.
Для разработчика
- Проверил, что все модули и темы совместимы с Drupal 5.6.
- Убедился, что кастомные модули используют правильный путь к files.
- Настроил dev/stage/production workflow и миграцию содержимого.
10. Безопасность и права
- settings.php: 777 только временно при установке. После установки вернуть 644.
- files: вместо 777 лучше установить владельца web-сервера (chown www-data:www-data files) и выставить 755/750 по необходимости.
- Бэкапы: настройте автоматические бэкапы базы данных и директорий sites/* и files.
- Обновления: Drupal 5.x давно устарел — планируйте миграцию на актуальную версию ради безопасности.
- SELinux/AppArmor: если они включены, добавьте правила для доступа Apache/Nginx к /www.
11. Отладка распространённых проблем
- Ошибка подключения к БД: проверьте данные в settings.php, права у пользователя MySQL, и что база существует.
- “Access denied” при выдаче привилегий: используйте root MySQL и FLUSH PRIVILEGES.
- Белая страница / 500: проверьте логи веб-сервера (/var/log/apache2/error.log) и права файлов.
- Cron не запускается: проверьте, может ли веб-сервер обращаться к cron.php (проверьте блокировки в .htaccess и правила firewall).
Краткий чек для логов:
- Apache/Nginx error.log
- MySQL error.log
- Drupal watchdog (Reports → Recent log messages)
12. Краткая методика отката (rollback)
- Если ошибка сразу после копирования файлов: верните index.html (mv index.html.old index.html).
- Если непреодолимые проблемы с БД: восстановите дамп базы из резервной копии.
- Если права сломали доступ: восстановите владельца и права через chown/chmod по бэкапу.
Критерии приёмки
- Сайт открывается по адресу www.multiexample.tld и показывает страницу Drupal.
- Установка базы прошла успешно без ошибок.
- settings.php имеет права 644, папка files доступна для записи веб-сервером.
- Cron выполнен хотя бы один раз вручную и не сообщает ошибок.
13. Миграция и совместимость
- Путь /www/web1/web/ и /www/web2/web/ — это примеры. На вашей системе пути могут отличаться (например, /var/www/). Подстраивайте команды под свои пути.
- Если вы планируете миграцию на новую версию Drupal, заранее тестируйте модули и данные в тестовой среде.
14. Когда этот подход не подходит
- Если ваши сайты требуют разные версии модулей или ядра — Multisite на одной кодовой базе не подойдёт.
- Если вы хотите разнести сайты по разным версиям PHP или разным контейнерам — лучше использовать отдельные установки.
15. Полезные подсказки и лучшие практики
- Используйте символьные ссылки для экономии места и упрощения обновлений ядра.
- После обновления ядра проверьте, что все сайты работают: запустите update.php для каждой базы.
- Документируйте все пароли и конфигурации в защищённом менеджере паролей.
- Планируйте миграцию с Drupal 5.x — поддержка прекращена, риски безопасности высоки.
16. Fact box — ключевые моменты
- Drupal версия в примере: 5.6
- Файлы ядра: /www/web1/web/
- Корень нового сайта: /www/web2/web/
- Привилегии MySQL, требуемые пользователю: SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER, CREATE TEMPORARY TABLES, LOCK TABLES
- Права settings.php: 777 на время установки, 644 после
- Рекомендуемая практика: назначить владельца файлов под веб-сервер и избегать 777 в проде
17. Мини-решение: переход от установки к эксплуатации (SOP)
- Проверьте наличие core в /www/web1/web.
- Создайте сайт и БД в ISPConfig.
- Выдайте права MySQL через root.
- Создайте симлинки и скопируйте файлы в /www/web2/web/.
- Скопируйте settings.php.multi в sites/<домен>/ и дайте 777.
- Пройдите веб-установку, затем восстановите права и создайте files.
- Настройте cron и бэкапы.
- Проверьте отчёт о состоянии и устраните предупреждения.
18. Часто задаваемые вопросы
Q: Нужно ли каждому сайту своя база?
A: Обычно да. Отдельные базы изолируют данные и упрощают бэкап/миграцию.
Q: Можно ли использовать один каталог files для нескольких сайтов?
A: Нет, у каждого сайта должен быть свой каталог files, иначе загруженные файлы будут смешаны.
Q: Как безопасно настроить права после установки?
A: Сделайте chown www-data:www-data files; chmod 755 files; chmod 644 sites/*/settings.php.
19. Ресурсы
- Официальная документация Drupal: https://www.drupal.org
- Документация ISPConfig на вашем сервере (версия зависит от инсталляции)
20. Заключение
Вы успешно развернули мультисайт Drupal на общей кодовой базе. Дальше можно добавлять содержимое, темы и модули, но не забывайте о безопасности и регулярных бэкапах. Планируйте обновление на более современные релизы Drupal в ближайшей перспективе.
Краткое резюме:
- Создайте сайт и базу в ISPConfig.
- Выдайте MySQL-привилегии через root.
- Создайте симлинки и скопируйте стартовые файлы в корень сайта.
- Скопируйте settings.php в каталог sites/<домен>, дайте права, пройдите установку и затем верните права.
- Настройте cron и бэкапы.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента