Мы в drupal-coder.ru решили сделать выделенный сервер разработки, чтобы разработчики могли быстрее создавать drupal сайты, не тратя времени на прописывание virtual хостов, добавление записей в DNS, создание базы MySQL, установку Drupal. Также на этом сервере будет сдаваться работа заказчику.
Под эту тему мы даже зарегистрировали домены для сайтов на Drupal 6, Drupal 7, Drupal 8 (хотя таких и нет пока что, но все впереди) соответсвенно.
Занялись этой задачей я и наш сотрудник Сергей. В этой статье Сергей описал настройку такого сервера для домена example-d7.ru. Думаю, что статья будет интересна командам, специализирующихся на разработке под Drupal.
Постановка задачи
Сервер для разработки должен позволять:
- Быстро создавать VirtualHost для поддоменов, не требуя настройки VirtualHost в конфигурации Apache.
- Быстро заводить записи для поддоменов на DNS.
- Быстро создавать базы данных для Drupal сайтов.
- Быстрая установка Drupal.
- Использовать единый robots.txt для все сайтов, чтобы поисковые системы не индексировали сайты для разработки.
- Работать по протоколу FTP.
Также должен стоять всякий нужный софт: drush, git, rsync, patch, diffutils.
Решение
Сервер будем поднимать на Linux Debian, просто потому, что мы с ним имеем большой опыт работы и практически везде используем именно этот дистибутив.
- Для быстрого создания VirtualHost для поддоменов используем настройку Apache VirtualDocumentRoot, которая позволяет автоматически делать виртуальные хосты для поддоменов простым созданием папки с именем сайта.
- Для быстрого заведения записей для поддоменов на DNS используем запись Wildcard DNS. В ISP Manager для домена вписываем A запись *.example-d7.ru и в качестве IP указываем наш сервер. После этого все запросы на поддомены example-d7.ru будут направлены на наш сервер.
- Для быстрого создания баз данных и установки друпал используем drush, ниже напишу команды с помощью которых мы заводим сайты.
- Для использования единого robots.txt для всех сайтов используем Alias в настройках виртуального хоста Apache.
- Для настройки FTP сервера используем vsftpd.
Установка программного обеспечения
Устанавливаем программное обеспечение
apt-get install apache2 apache2-suexec mysql-server php5 php5-mysql php5-gd patch git-core diffutils rsync drush
Добавляем пользователя webmaster
adduser webmaster
Создаем каталоги
mkdir /home/webmaster/domains/drupal1.ru /home/webmaster/domains/drupal1.ru/logs
Включаем модули Apache
a2enmod suexec a2enmod vhost_alias
Настраиваем виртуальный хост в Apache
Создаем конфигурацию виртуального хоста apache /etc/apache2/sites-available/example-d7.ru
<VirtualHost *:80> UseCanonicalName off ServerAdmin info@example-d7.ru ServerName example-d7.ru ServerAlias *.example-d7.ru VirtualDocumentRoot /home/webmaster/domains/example-d7.ru/%0 SuexecUserGroup webmaster webmaster Alias /robots.txt /home/webmaster/domains/robots.txt <Directory /> AllowOverride none </Directory> <Directory "/home/webmaster/domains/example-d7.ru/*/"> Options -Indexes FollowSymLinks RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^/home/webmaster/domains/example-d7.ru/(.*)/(.*)$ index.php?url=$2 [QSA,L] <Files sitemap.xml> RewriteEngine Off </Files> </Directory> ErrorLog /home/webmaster/domains/example-d7.ru/logs/apache_errors.log CustomLog /home/webmaster/domains/example-d7.ru/logs/apache_access.log php_flag log_errors on php_flag display_errors on php_value error_reporting 2147483647 php_value error_log /home/webmaster/domains/example-d7.ru/logs/php_error.log php_admin_value open_basedir "/home/webmaster/domains:/tmp:." php_admin_value upload_tmp_dir "/home/webmaster/domains/tmp" php_admin_value session.save_path "/home/webmaster/domains/tmp" AddType application/x-httpd-php .php .php3 .php4 .php5 .phtml AddType application/x-httpd-php-source .phps </VirtualHost>
В этой конфигурации мы:
- Использовали VirtualDocumentRoot /home/webmaster/domains/example-d7.ru/%0, что позволило создавать виртуальные хосты для поддоменов простым созданием каталога.
Например: для работы виртуального хоста для поддомена drupal.example-d7.ru достаточно создать папку /home/webmaster/domains/example-d7.ru/drupal.example-d7.ru - Прямо в конфигурации Apache добавили все RewriteRule для "чистых ссылок" Drupal и запретили использовать файлы .htaccess в папках, так как обычно их редактирование при разработке не требуется
- Включили вывод всех ошибок php.
- С помощью SuexecUserGroup webmaster webmaster разрешили запуск всего php кода из под пользователя webmaster. Это нужно для того, чтобы не пришлось при разработке тратить время на изменение прав доступа к файлам на www-data.
- С помощью Alias указали использование единого файла robots.txt.
Теперь активируем виртуалхост и перезапускаем apache
a2ensite example-d7.ru /etc/init.d/apache2 restart
Установка и настройка FTP сервера
Устанавливаем пакет vsftpd
apt-get install vsftpd
Вносим изменения в файл настройки FTP сервера /etc/vsftpd.conf
#Директива описывающая метод работы сервера, сервер будет работать в фоновом режиме и #автоматически обрабатывать соединения listen=YES # Наш сервер будет анонимным и без пароля anonymous_enable=NO no_anon_password=NO # Папка для хранения данных анонимных пользователей anon_root=/var/ftp # Разрешение заливать информацию на ftp пользователу anonymous (ftp) anon_upload_enable=NO # Разрешение анонимным пользователям создавать новые дирректории anon_mkdir_write_enable=NO # Разрешение анономимному пользователю записывать, удалять и переименовывать файлы anon_other_write_enable=NO # Открываем локальным пользователям доступ к домашним директориям по FTP и разрешаем # команды на запись local_enable=YES local_umask=022 write_enable=YES # Включение логов аплоада и даунлоада и указание файла логов xferlog_enable=YES xferlog_file=/var/log/vsftpd.log # "Запираем" пользователей в домашних папках chroot_local_user=YES
Сервер настроен без анонимного доступа и все пользователи попадают в свои локальные папки /home/
Для применения всех настроек рестартуем сервер:
/etc/init.d/vsftpd restart
Быстрое добавление сайтов для разработки
Теперь для создания нового сайта для разработки, например, dev.example-d7.ru, необходимо выполнить несколько команд.
Переходим в каталог example-d7.ru
cd /home/webmaster/domains/example-d7.ru
C помощью drush cкачиваем drupal и указываем полное имя сайта в параметре drupal-project-rename
drush dl drupal --drupal-project-rename=dev.example-d7.ru
Drupal скачался и поместился в каталог dev.example-d7.ru. Переходим в этот каталог
cd dev.example-d7.ru
Устанавливаем Drupal c помощью drush, необходимо указать имя пользователя (root) и пароль к MySQL (rootpassword) с правами на создание базы, имя базы (dbname) MySQL нашего нового сайта, а также имя пользователя (drupaluser) и пароль (drupaluserpwd) к Drupal:
drush site-install standard --db-url=mysql://root:rootpassword@localhost/dbname --account-name=drupaluser --account-pass=drupaluserpwd
После выполнения этой команды мы сможем зайти на сайт dev.example-d7.ru c именем пользователя drupaluser и паролем drupaluserpwd, база данных MySQL будет называться dbname.
Надеюсь, понятно написал, если будут вопросы, добро пожаловать в комменты.
Насколько этот сервер актуален на сегодняшний день? Для работы с Друпал 8? Для установки в Linux Mint 18.3?
Надеюсь,что кто-то ответит.
Доброго вечора. Необхідний веб-сервер для сайтів на Drupal 7. Є один інтернет-магазин на DC і ще декілька сайтів. Також хотілося б перевірити в роботі Apache Solr server для фасетного пошуку. Можливо э окрема послуга Apache Solr server для фасетного пошуку? Дякую.