Настройка веб-сервера на Debian и установка Drupal

Нашим сотрудником опубликована статья по настройке веб-сервера с операционной системой Debian Squeeze и установке CMS Drupal. В статье рассмотрена установка и базовая настройка Apache, MySql и Php. Статья будет интересна специалистам, которые хотят перейти с shared хостинга на выделенный сервер.

Сегодня рассмотрим настройку веб-сервера "с нуля" и установку на него CMS Drupal. На сервере c Linux Debian Stretch/ Ubuntu будем настраивать стандартный набор Apache, MySql, Php и базовую настройку Drupal. Конфигурацию Apache, MySql, Php рассмотрим по умолчанию и изменять не будем.

В дальнейшем рассмотрим более тонкую настройку этого набора. У нас уже имеется сервер, с установленным Debian, и root пароль ssh для доступа к серверу, поэтому приступим. Наш сайт будет иметь адрес: drupaladmin-example.com 

Примечание: Предварительно на DNS сервере для вашего домена должна быть создана A запись с ip адресом веб-сервера. Если домен еще не зарегистрирован, то можно настроить через файл hosts:

В Windows: c:\windows\system32\drivers\etc\hosts
В Linux: /etc/hosts

Подготовка сервера

Нам понадобится консольный редактор, я частенько использую nano, поэтому устанавливаем текстовый редактор:

root@server:~# apt-get install nano

Создаем пользователя, который будет работать с сайтом, назовем его webmaster

root@server:~# adduser webmaster

Задаем пароль, отвечаем на все вопросы и пользователь готов к работе.

Подключаемся к серверу под пользователем webmaster и создаем структуру каталогов в домашней папке пользователя webmaster:

webmaster@server:~$ mkdir domains domains/tmp domains/drupaladmin-example.com domains/drupaladmin-example.com/logs domains/drupaladmin-example.com/html

В каталоге ~/domains/drupaladmin-example.com/html — будет лежать наш сайт. В каталоге ~/domains/drupaladmin-example.com/logs — будут лежать логи веб-сервера, относящиеся к нашему сайту. В каталоге ~/domains/tmp — временный каталог для Drupal. Даем полный доступ ~/domains/tmp:

webmaster@server:~$ chmod 777 /home/webmaster/domains/tmp

Установка Apache, MySql, PHP

Подключаемся к серверу под пользователем root.
Обновляем индексные файлы пакетов Debian под пользователем root:

root@server:~# apt-get update

Устанавливаем весь софт:

root@server:~# apt-get install apache2 mysql-server php7.0 php7.0-mysql php7.0-gd

Не забываем указывать пароль доступа root к mysql.

Настройка виртуального хоста Apache

Документацию по виртуальным хостам можно посмотреть на сайте Apache.org Всю настройку на этом этапе делаем под пользователем root Создаем файл /etc/apache2/sites-available/drupaladmin-example.com.conf: 

root@server:~# nano /etc/apache2/sites-available/drupaladmin-example.com.conf


Cодержание файла:

Для Apache 2.2:

<VirtualHost *:80>
       ServerAdmin info@drupaladmin-example.com
       ServerName www.drupaladmin-example.com
       ServerAlias drupaladmin-example.com
       DocumentRoot /home/webmaster/domains/drupaladmin-example.com/html
       <Directory /home/webmaster/domains/drupaladmin-example.com/html>
               Options -Indexes +FollowSymLinks
               AllowOverride all
               order allow,deny
               allow from all
       </Directory>
       ErrorLog /home/webmaster/domains/drupaladmin-example.com/logs/apache_errors.log
       # Possible values include: debug, info, notice, warn, error, crit,
       # alert, emerg.
       # LogLevel warn
       CustomLog /home/webmaster/domains/drupaladmin-example.com/logs/apache_access.log combined

       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>

Для Apache 2.4:

<VirtualHost *:80>
       ServerAdmin info@drupaladmin-example.com
       ServerName www.drupaladmin-example.com
       ServerAlias drupaladmin-example.com
       DocumentRoot /home/webmaster/domains/drupaladmin-example.com/html
       <Directory /home/webmaster/domains/drupaladmin-example.com/html>
         AllowOverride All
          Options -Indexes +FollowSymLinks
          Require all granted        
        </Directory>
       ErrorLog /home/webmaster/domains/drupaladmin-example.com/logs/apache_errors.log
       # Possible values include: debug, info, notice, warn, error, crit,
       # alert, emerg.
       # LogLevel warn
       CustomLog /home/webmaster/domains/drupaladmin-example.com/logs/apache_access.log combined

       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>

Разрешаем серверу использовать этот виртуальный хост:

root@server:~# a2ensite drupaladmin-example.com

Активируем модуль Rewrite для чистых ссылок в Drupal

a2enmod rewrite

Перезагружаем конфигурацию Apache:

root@server:~# /etc/init.d/apache2 reload

Создание базы MySql

Подключаемся к mysql под пользователем root c вводом ранее заданного пароля:

mysql -uroot -p

Создаем базу данных drupal_admin и пользователя webmaster c паролем, например: dbpassword . Этот пароль приведен в целях обучения, поэтому на рабочих системах не забывайте использовать уникальные и сложные пароли.

CREATE DATABASE drupal_admin;
GRANT ALL PRIVILEGES ON drupal_admin.* TO 'webmaster'@'localhost'
IDENTIFIED BY 'dbpassword' WITH GRANT OPTION;

Выходим из клиента mysql используем команду quit. Наш сервер теперь готов к установке drupal.

Установка Drupal

Дальнейшие действия выполняем под пользователем webmaster.
Подробная инструкция по установке Drupal 7 - https://www.drupal.org/docs/7/install
Подробная инструкция по установке Drupal 8 - https://www.drupal.org/docs/8/install

Скачиваем с drupal.org последний релиз Drupal.

Для Drupal 7

webmaster@server:/home/webmaster/domains/drupaladmin-example.com/html$ wget http://ftp.drupal.org/files/projects/drupal-7.59.tar.gz -O drupal.tar.gz 

Для Drupal 8

webmaster@server:/home/webmaster/domains/drupaladmin-example.com/html$ wget https://ftp.drupal.org/files/projects/drupal-8.5.5.tar.gz -O drupal.tar.gz 

Разархивируем архив и переносим все файлы в каталог /home/webmaster/domains/drupaladmin-example.com/html:

webmaster@server:/home/webmaster/domains/drupaladmin-example.com/html$ tar xvfz drupal.tar.gz

После разархивации в текущей папке будет папка вида drupal-x.x , где x.x скачанная версия drupal.
Далее перемещаем файлы:

webmaster@server:/home/webmaster/domains/drupaladmin-example.com/html$ mv drupal-x.x/* ./
webmaster@server:/home/webmaster/domains/drupaladmin-example.com/html$ mv drupal-x.x/.* ./ 
webmaster@server:/home/webmaster/domains/drupaladmin-example.com/html$ rm drupal.tar.gz
webmaster@server:/home/webmaster/domains/drupaladmin-example.com/html$ rmdir drupal-x.x
webmaster@server:/home/webmaster/domains/drupaladmin-example.com/html$ chmod -R 777 sites/default/files
webmaster@server:/home/webmaster/domains/drupaladmin-example.com/html$ cp sites/default/default.settings.php sites/default/settings.php
webmaster@server:/home/webmaster/domains/drupaladmin-example.com/html$ chmod 777 sites/default/settings.php

После этого из браузера заходим по адресу: http://drupaladmin-example.com/install.php и начинаем установку drupal. 
В качестве базы данных указываем drupal_admin, имя пользователя webmaster, пароль dbpassword 
Каталог для временных файлов устанавливаем в /home/webmaster/domains/tmp 
В результате мы получили готовый к работе сервер с установленным drupal.

Возможен вариант совместного использования Apache и Nginx для снижения нагрузки на сервер. В базовой конфигурации Nginx может использоваться как фронтенд для раздачи статического контента, а Apache — для обработки PHP-запросов. Такая схема показывает наилучшие результаты при корректно настроенном кэшировании и высокой доле статики.

При развёртывании сайта на VDS важно учитывать контекст выполнения команд. Ошибка при создании каталогов, как правило, возникает из-за выполнения команд не из домашнего каталога пользователя. Все операции по созданию структуры сайта следует выполнять из /home/webmaster, предварительно перейдя в этот каталог.

Для каждого сайта в Apache требуется отдельный VirtualHost. Если используется поддомен, который указывает на тот же сайт, достаточно добавить его в ServerAlias. В случае мультисайтинга Drupal дополнительных VirtualHost не требуется — достаточно перечислить домены, а сам Drupal корректно обработает структуру сайтов.

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

При установке Drupal вручную возможны предупреждения о недостающих каталогах files и settings.php. В отличие от локальных сборок (например, XAMPP), на сервере их необходимо создать вручную и корректно выставить права. Аналогично, для корректной работы требуется установка расширения GD (php-gd) и настройка временного каталога, доступного для записи.

Если основной домен сервера продолжает указывать на /var/www, а сайты пользователей — в домашних каталогах, это означает, что хост-нейм сервера привязан к дефолтному VirtualHost. Такая ситуация решается корректной настройкой VirtualHost для основного домена или его отключением.

При ошибках 403 Forbidden и некорректной обработке URL без index.php необходимо проверить включение mod_rewrite, корректность .htaccess и права доступа. Перед настройкой Nginx важно убедиться, что Apache полностью работоспособен сам по себе, например при обращении напрямую к порту 8080.

При использовании Nginx как фронтенда важно правильно настроить проксирование PHP-запросов. Некорректная конфигурация может привести к тому, что PHP-файлы будут отдаваться как обычный текст. Это критическая ошибка и требует обязательной передачи PHP-запросов в Apache или PHP-FPM.

Ошибки с загрузкой изображений и временными файлами (open_basedir restriction) указывают на неправильно заданный каталог временных файлов. Необходимо указать корректный путь и убедиться, что он доступен для записи Apache.

Для повышения безопасности и удобства администрирования рекомендуется использовать отдельного пользователя для каждого сайта. Такой пользователь не должен иметь root-прав и используется исключительно для работы с файлами проекта. Apache при этом можно запускать от имени этого пользователя либо использовать специализированные MPM-модули для шаред-окружений.

При выборе операционной системы Debian является стабильным вариантом и может содержать более свежие версии ПО, чем Ubuntu LTS. Это нормально и не указывает на нестабильность. Выбор 64-битной версии системы зависит от объёма оперативной памяти и перспектив её расширения.

Вопросы масштабирования, резервного копирования, безопасности и производительности требуют отдельного рассмотрения, однако базовая рекомендация — начинать с VDS, а при росте нагрузки переходить на выделенный сервер. Большое значение имеет не только железо, но и архитектура самого Drupal-сайта.

В целом статья и подход к настройке сервера показали себя на практике как рабочие. Большинство возникающих проблем решаются внимательной проверкой конфигураций, прав доступа и последовательности настройки компонентов.

Добавить комментарий

Filtered HTML

  • Допустимые HTML-теги: <a href hreflang> <em> <strong> <cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <pre> <br> <h1> <h2 id> <h3 id>
  • Строки и абзацы переносятся автоматически.
  • Web page addresses and email addresses turn into links automatically.