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

Опубликовано roman - пт, 03/23/2012 - 08:01

Сегодня рассмотрим настройку веб-сервера "с нуля" и установку на него 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 для уменьшения нагрузки.

Пробую по вашей инструкции развернуть сайт на vds
Сделал
su webmaster
и попробовал создать папки но не получилось

mkdir: cannot create directory `domains': Permission denied

Не получилось скорее всего потому что выполнили эту команду не из домашней папки. В статье обращу отдельное внимание. Перейдите в /home/webmaster и оттуда запускайте.
Порядок действий такой:

1) выполняем cd /home/webmaster 2) mkdir domains domains/drupal-admin.ru domains/drupal-admin.ru/logs domains/drupal-admin.ru/html

Ок, спасибо, попробую. Еще вопрос,
1)а если у меня два домена /etc/apache2/sites-available/drupal-admin1.ru и /etc/apache2/sites-available/drupal-admin2.ru
Тогда нужно два таких файла для <VirtualHost
2)Если есть поддомен forum.drupal-admin1.ru , его тоже нужно добавлять в /etc/apache2/sites-available/drupal-admin1.ru ?

Ок, спасибо, попробую. Еще вопрос,
1)а если у меня два домена /etc/apache2/sites-available/drupal-admin1.ru и /etc/apache2/sites-available/drupal-admin2.ru
Тогда нужно два таких файла для VirtualHost
2)Если есть поддомен forum.drupal-admin1.ru , его тоже нужно добавлять в /etc/apache2/sites-available/drupal-admin1.ru ?

Не совсем. Правило такое: для каждого сайта отдельный VirtualHost. Но если forum.drupal-admin1.ru тот же сайт, что и drupal-admin1.ru, то достаточно в ServerAlias для drupal-admin1.ru прописать forum.drupal-admin1.ru

Для drupal-admin1.ru Virtualhost создался нормально, а для drupal-admin2.ru ошибка

apache2: Syntax error on line 230 of /etc/apache2/apache2.conf: Syntax error on line 23 of /etc/apache2/sites-enabled/drupal-admin2.ru: without matching section
Action 'configtest' failed.
The Apache error log may have more information.

Извиняюсь мышкой не все выделил, поэтому и ошибка.
При создании БД, база с дефисом в имени не создалась, пришлось убрать дефис. И такой вопрос, а если это мультисайтинг, как будет выглядеть файл с virtualhost и какие еще отличия будут в настройке?

Я так и понял, что-то не скопировалось:) В статье переименовал базу на drupal_admin (спасибо). С мультисайтингом можно просто добавлять алиасы в 1 virtualhost (в котором прописан каталог установки drupal), далее drupal сам разберется. В принципе больше ничего не надо для мультисайтинга.

Еще вот эта команда mv drupal-7.12/.* ./ выдает ошибку

mv: cannot move `drupal-7.12/..' to `./..': Device or resource busy

И вопрос , а можно было в принципе без создания пользователя webmaster , сайты разместить в /var/www ?

При запуске install.php
1)PHP extensions Disabled
Drupal requires you to enable the PHP extensions in the following list (see the system requirements page for more information):
gd
2)File system
The directory sites/default/files does not exist. An automated attempt to create this directory failed, possibly due to a permissions problem. To proceed with the installation, either create the directory and modify its permissions manually or ensure that the installer has the permissions to create it automatically. For more information, see INSTALL.txt or the online handbook.
3)Settings file The settings file does not exist.
The Drupal installer requires that you create a settings file as part of the installation process. Copy the ./sites/default/default.settings.php file to ./sites/default/settings.php. More details about installing Drupal are available in INSTALL.txt.

Хотя если на XAMPP делаю то все корректно устанавливается само и сразу.

странно, похоже он уже перенесся. Проверьте, чтобы в каталоге сайта лежал .htaccess, если лежит, то все ок. Можно продолжать.

По поводу вопроса: а можно было в принципе без создания пользователя webmaster , сайты разместить в /var/www ?
Да, конечно можно. Просто я описал в статье как мы обычно делаем, чтобы удобней было shared хостинг делать, когда на одном сервере будет размещено несколько сайтов разных пользователей.

Вот такой вопрос. Если домен drupal-admin1.ru является Hostname (основной домен) - то он смотрит только на папку var/www и ищет в ней index.html, а не смотрит в папку в webmaster.
А не основной домен drupal-admin2.ru нормально ссылается на свою папку в webmaster.
Это можно как то исправить?

Да, кстати еще возможна проблема с правами для записи apache. Для первоначальной настройки можно сделать под root: chown -R webmaster:www-data /home/webmaster/domains/drupal-admin.ru/html

Спасибо Роман за помощь и за статью. Буду ждать продолжения, у вас все очень доходчиво и понятно получается изложить.

Еще 2 момента нашел
1)Папка tmp только в ручную создается на странице файловой системы , в процессе установке сама не создается
Warning: is_dir(): open_basedir restriction in effect. File(/tmp) is not within the allowed path(s): (/home/webmaster/domains:.) in file_directory_temp() (line 2444 of /home/webmaster/domains/xxxxxxxxxx/html/includes/file.inc).

и
2)CleanUrls не работают

1) В качестве временной папки устанавливаем: /home/webmaster/domains/tmp (она уже создана)
для Apache нужно дать права на эту папку: chmod 777 /home/webmaster/domains/tmp
2) похоже не включен mod_rewrite, под root выполняем: a2enmod rewrite

Все делал по инструкции. Попробовал загрузить лого, вышли ошибки

Warning: is_file(): open_basedir restriction in effect. File(/tmp/phpdc1t2q) is not within the allowed path(s): (/home/webmaster/domains:.) in image_get_info() (line 126 of /home/webmaster/domains/mysite/html/includes/image.inc).
Warning: getimagesize(): open_basedir restriction in effect. File(/tmp/phpdc1t2q) is not within the allowed path(s): (/home/webmaster/domains:.) in image_gd_get_info() (line 349 of /home/webmaster/domains/mysite/html/modules/system/image.gd.inc).
Warning: getimagesize(/tmp/phpdc1t2q): failed to open stream: Operation not permitted in image_gd_get_info() (line 349 of /home/webmaster/domains/mysite/html/modules/system/image.gd.inc).
The specified file f02ba0e8666b_2.gif could not be uploaded. Only JPEG, PNG and GIF images are allowed.

Похоже не правильно установлен каталог для временных файлов. В конце инструкции написано какой каталог нужно установить.

Отлично;) Обращайтесь.
Я вот думаю, может форум сделать для обсуждения всех вопросов?:)

Заметил, что при данной настройке сервера, если прописывать полностью путь к файлу index.php или index.php. то на экран выводится php код скрипта вместо его исполнения.

Очень странно, у меня это не проявляется. Проверьте, пожалуйста, корректность настройки VirtualHost для Apache, и кстати .htacces - дефолтный или измененный?
Можете написать в контактную форму, я подключусь к серверу и проверю.

Вообщем разобрался, у меня был еще nginx настроенный по инструкции из соседней темы. Конфиг nginx некорректен у Вас Nginx отдает PHP файлы как статику, а не передает их в Apache.

Спасибо, коротко и ясно.
Хотелось бы увидеть список всевозможных команд для управления удалённым сервером через ssh

Здравствуйте,
Я собираюсь покупать неттоп под веб-сервер и разместить его в дата-центре.
До этого никогда не занимался администрированием и с линукс - очень минимальный опыт, поэтому есть вопросы.
Может дадите еще какие-нибудь полезные ссылки по моим вопросам.

Устанавливаю Debian, я так полагаю нужно ставить 64 битную?
В каких пропорциях делить диск на разделы или можно по дефолту принять размеры разделов?
Где хранить бекапы сайтов, я так понимаю рейд в неттопе организовать нельзя и нужен ли он вообще?
Нужны ли спец. меры по безопасности и какие?
Через чего удобнее организовывать администрирование сервака, rdp?
Как синхронизировать рабочий сайт drupal с разрабатываемым?
Какие еще есть ключевые моменты?

Спасибо.

1) 64 или 32 зависит от кол-ва оперативы. Но чтобы универсально (в случае если решите докинуть оперативной памяти) можно 64
2) Можно и по дефолту оставить
3) Бэкапы можно там же (не спасет в случае падения винта), можно на другом хостинге
4) Эта тема достойна отдельной статьи. Закройте доступ root по ssh, пароли на ssh посложней придумайте, обновите весь софт, закройте для записи settings.php и проверьте чтобы его не скачали. Посмотрите сюда http://nadeausoftware.com/articles/2009/05/drupal_and_apache_web_site_s…
5) В линуксе удаленно работаем через ssh
6) Очень удобно через drush, я на эту тему готовлю статью
7) Если сайт будет нагруженным то нужно уделить вниманию распределению памяти между Apache, Mysql и другим используемым софтом.

Начинайте, и по мере возникновения вопросов обращайтесь.

Спасибо за ответы,
хочу еще все-таки спросить по поводу железа: сайт будет тяжеловесным, много модулей (blog, forum, простенькая доска объявлений, колорбокс, флаг, профайл2, цитата, смайлы, вьевс, приватные сообщения, друзья, еще какие-то, и также еще могут добавляться) и планируемая посещаемость до 10000 в день, в пики возможно 30000.
Правильный ли выбор неттоп или допустим vds - это может потянуть?

Еще вопрос по операционке - обязательно ли на сервак нужно ставить операционку без графической оболочки?

Если будет бОльшая часть анонимов и настроено нормально кэширование, то в принципе возможно и хорошего VDS хватит. Я думаю что начать стоит с VDS на XEN/KVM, если будет маловато, то перейти на выделенный сервер.
Вообще конечно на сайт нужно взглянуть, есть примеры когда региональные порталы с 10000 в день сидят на 2-х процессорных серверах и авторизованных обрабатывают по 5 секунд. Тут еще зависит как сайт сделан.

Графическую оболочку обычно не ставят, чтобы не засорять сервер лишними задачами.

Статья просто супер! Большое Вам спасибо.
И кстати,
Чтобы Apache не ругался во время перезагрузки нужно в конфигурационный файл добавить:
ServerName localhost
А чтобы Drupal при инсталяции сам создавал files & settings.php нужно установить:
apt-get install apache2-mpm-itk
и прописать в конфигурацию apache:
AssignUserID webmaster webmaster
Теперь права на директории и группы на директории друпала менять не придется.

Рад, что статья оказалась полезной. По поводу Apache-mpm-itk - это на мой взгляд больше для шаредов подходит. Если же сервер под 1 сайт, то можно обычный Apache запустить под пользователем webmaster.

Не может создать файл конфигурации.
На этапе инсталляции Друпал выдает две критические ошибки. Mod_rewrite работает, проверял по phpinfo.

File system
The directory sites/default/files does not exist. An automated attempt to create this directory failed, possibly due to a permissions problem. To proceed with the installation, either create the directory and modify its permissions manually or ensure that the installer has the permissions to create it automatically. For more information, see INSTALL.txt or the online handbook.

и

Settings file The settings file does not exist.
The Drupal installer requires that you create a settings file as part of the installation process. Copy the ./sites/default/default.settings.php file to ./sites/default/settings.php. More details about installing Drupal are available in INSTALL.txt.

Проверьте права на запись для каталога Drupal у пользователя www-data. Если пользователь только 1, то запустите Apache от имени пользователя webmaster.

Да я так и сделал, чтобы Apache запускался от имени пользователя webmaster.
Надеюсь я правильно сделал чтобы апач запускался от webmaster в файле envvars изменил два параметра:
export APACHE_RUN_USER=webmaster
export APACHE_RUN_GROUP=webmaster

А имя конфига апач для сайтов в домене .рф будут называться в кириллице или там другая процедура нежели для латиницы? Как например создать конфиг для домена сайт.рф?

Конфиг все равно как назвать, лучше латинскими, а вот в виртуальном хосте нужно правильно в ServerName прописать имя домена в Punycode

Спасибо за статьи на сайте!!! :)

Один вопрос смущает. В Linux я новичок. Позавчера + вчера опробовал в работе Ubuntu, поставил LAMP, всё настроил, всё ок. Обратил внимание, что вроде советуют лучше ставить Debian, да и у Вас в статье он. Ок, сегодня поставил, всё настроил, команды ведь те же. Но одно смутило - версии ПО. Например:

PHP 5.4.4-14+deb7u4
Версия СУБД 5.5.31-0+wheezy1

Что-то меня это смущает, очень похоже, как в Drupal dev-версии :) В Ubuntu таких приколов не было. И PHP там поставился 5.3. Вопрос: стоит ли мне переживать по данному поводу или это наоборот всё хорошо? Спасибо!

Создал по вашей инструкции двух пользователй на разные домены. Все работает. Спасибо)
Есть вопрос.
Как разграничить между двумя юзерами права, чтобы они не видели дальше своего домашнего каталога?
Сейчас к примеру захожу по sftp под любым из них и видно домашний каталог обоих.
Крутится на digitalocean.
C уважением.

Выполнил все, как написано (единственное только что домен назвал test.ru). А в итоге при попытке зайти на сайт http://test.ru выдает:
Forbidden
You don't have permission to access / on this server.
Apache/2.4.10 (Debian) Server at test.ru Port 80

"Создаем пользователя, который будет работать с сайтом, назовем его webmaster
root@server:~# adduser webmaster
Задаем пароль, отвечаем на все вопросы и пользователь готов к работе."

Подскажите пожалуйста на какие вопросы мы должны отвечать и какими полномочиями должен обладать вебмастер - как root? или нет

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

Filtered HTML

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