Gentoo + Nginx + Drupal7
Установка web-сервера LEMP (Linux, Nginx, MySQL, Php-fpm) + Drupal7 на основе Gentoo Linux.
Предположим, что вы уже установили по хендбуку систему (без иксов, разумеется) и можете работать с сервером по протоколу SSH.
Подготовительные операции
Глобальные настройки:
# /etc/portage/make.conf
...
USE="-X -gtk -xmp -gpm -ipv6 -bluetooth -apache -apache2 -wifi -systemd -alsa -sqlite \
logrotate php mysql mysqli gd gd2 curl simplexml tokenizer dom tidy xml fpm cgi gzip fcgi fcgiwrap ftp"
LINGUAS="en"
LANG="en_US.UTF-8"
EMERGE_DEFAULT_OPTS="--ask --verbose --usepkg"
PHP_TARGETS="php5-5"
PHP_INI_VERSION="production"
NGINX_MODULES_HTTP="access auth_basic autoindex browser charset empty_gif fastcgi geo geoip gzip \
limit_conn limit_req map memcached proxy push referer rewrite scgi split_clients ssi upstream_ip_hash userid uwsgi gunzip gzip_static"
Модули для NGINX сугубо индивидуально, в приведенном примере модулей достаточно для большинства случаев.
Флаги:
# /etc/portage/package.use
...
dev-lang/php sockets truetype pdo xmlreader xmlrpc xmlwriter xpm zip production
dev-db/mysql -* community ssl latin1
dev-db/phpmyadmin setup vhosts
net-ftp/proftpd openssl clamav
Обновляем дерево портэжей:
emerge eix
eix-update
eix-sync
Что бы не разрастались логи пригодится ротация:
emerge logrotate
Можно установить для удобства файловый менеджер Midnight Commander:
emerge app-misc/mc
Установка и конфигурация Nginx + MySQL + PHP
Установим Nginx + MySQL + PHP:
emerge php nginx mysql
Это долгая процедура, дольше всего компилится php.
Запускаем сервисы:
# /etc/init.d/nginx start
# /etc/init.d/mysql start
# /etc/init.d/php-fpm start
Добавляем в автозапуск:
# rc-update add nginx default
# rc-update add mysql default
# rc-update add php-fpm default
После старта nginx при наборе в браузере IP-адреса вашего сервера (или домена, привязанного к этому IP) должно быть приветствие Welcome to Nginx!
Если же вы видите 403 Forbidden - значит сервер не сконфигурирован, необходимо отредактировать конфиг /etc/nginx/nginx.conf (см. ниже "Конфигурация Nginx").
Настраиваем MySQL:
emerge --config dev-db/mysql
устанавливаем пароль для рута mysql.
Директория для сайтов
Сайты у нас будут находится в директории /var/www/домен
Примечание: директорию /var/www можно вынести на отдельный раздел жесткого диска при первичной установке системы.
Конфиги сайтов - в /etc/nginx/sites-available
Работающие сайты - в /etc/nginx/sites-enabled
В sites-enabled будут симлинки на конфиги из sites-available (удобно, если у вас несколько сайтов). Для отключения сайта надо будет всего лишь удалить симлинк.
Создаем директорию:
mkdir /var/www
Даем nginx права на директорию:
chmod 755 /var/www && chown nginx:nginx /var/www
Конфигурация Nginx
# /etc/nginx/nginx.conf
user nginx nginx;
worker_processes 2; # это значение равно колличеству ядер процессора в системе.
pid /var/run/nginx.pid;
error_log /var/log/nginx/error_log info;
events {
worker_connections 1024; # значение 1024 по умолчанию, если на сервере достаточно оперативки, то можно выставить 4096 или auto.
use epoll;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main
'$remote_addr - $remote_user [$time_local] '
'"$request" $status $bytes_sent '
'"$http_referer" "$http_user_agent" '
'"$gzip_ratio"';
client_header_timeout 10m;
client_body_timeout 10m;
send_timeout 10m;
connection_pool_size 256;
client_header_buffer_size 1k;
large_client_header_buffers 4 2k;
request_pool_size 4k;
server_names_hash_bucket_size 64;
gzip on;
gzip_min_length 1100;
gzip_buffers 4 8k;
gzip_types text/plain;
output_buffers 1 32k;
postpone_output 1460;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 75 20;
ignore_invalid_headers on;
index index.html;
include /etc/nginx/sites-enabled/*.conf;
}
Для удобства создаем пару темплейтов:
mkdir /etc/nginx/templates
Темплейт подключения PHP (будет использоваться на не друпал-сайтах, например для форума phpBB):
# /etc/nginx/templates/php
index index.html index.php;
location ~ [^/]\.php(/|$) {
fastcgi_split_path_info ^(.+?\.php)(/.*)$;
if (!-f $document_root$fastcgi_script_name) {
return 404;
}
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
include fastcgi.conf;
}
# запрещаем доступ к файлам .htaccess и .htpassword
location ~ /\.ht {
deny all;
}
location = /favicon.ico {
log_not_found off;
access_log off;
}
location = /robots.txt {
allow all;
log_not_found off;
access_log off;
}
# кеширование статик-файлов браузером, устанавливаем значение в часах или max (максимальное):
# location ~* ^.+\.(css|rss|gif|jpeg|jpg|js|txt|png|tif|tiff|ico|jng|bmp|doc|pdf|rtf|xls|ppt|jardiff|rar|rpm|swf|sit|zip|bin|exe|dll|deb|cur)$ {
# expires 168h;
# log_not_found off;
# }
location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
expires max;
log_not_found off;
}
Темплейт подключения Drupal7:
# /etc/nginx/templates/drupal
gzip_static on;
location ~* \.(txt|log)$ {
allow 192.168.0.0/16;
deny all;
}
location ~ \..*/.*\.php$ {
return 403;
}
location ~ ^/sites/.*/private/ {
return 403;
}
location ~ (^|/)\. {
return 403;
}
location / {
try_files $uri @rewrite;
}
location @rewrite {
# Для Drupal 6:
# rewrite ^/(.*)$ /index.php?q=$1;
# Для Drupal 7:
rewrite ^ /index.php;
}
# Для Drupal 6:
# location ~ ^/sites/.*/files/imagecache/ {
# Для Drupal 7:
location ~ ^/sites/.*/files/styles/ {
try_files $uri @rewrite;
}
Конфигурация PHP-FPM
Редактируем php-fpm.conf
# /etc/php/fpm-php5.5/php-fpm.conf
...
; Note: This value is mandatory.
; listen = 127.0.0.1:9000
listen = /var/run/php5-fpm.sock
...
; Set permissions for unix socket, if one is used. In Linux, read/write
; permissions must be set in order to allow connections from a web server. Many
; BSD-derived systems allow connections regardless of permissions.
; Default Values: user and group are set as the running user
; mode is set to 0666
listen.owner = nginx
listen.group = nginx
listen.mode = 0666
...
; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
; will be used.
user = nginx
group = nginx
...
; The number of child processes created on startup.
; Note: Used only when pm is set to 'dynamic'
; Default Value: min_spare_servers + (max_spare_servers - min_spare_servers) / 2
pm.start_servers = 20
...
Отключаем уязвимость php:
# /etc/php/fpm-php5.5/php.ini
cgi.fix_pathinfo=0
Конфигурация vhosts
По умолчанию, vhosts настроено для работы с веб-сервером apache. Исправляем:
# /etc/vhosts/webapp-config
...
# сайты у нас располагаются в /var/www/домен
vhost_root="/var/www/${vhost_hostname}"
...
vhost_server="nginx"
...
Перезапустим сервисы:
/etc/init.d/nginx restart && /etc/init.d/php-fpm restart
Конфигурирование сервера завершено, можно приступать к размещению сайта.
Конфигурирование сайта
Рассмотрим на примере домена linuxpro.ru
Создаем необходимые директории для файлов:
mkdir -p /var/www/linuxpro.ru/{htdocs,private,log,cgi-bin,backup}
- /var/www/linuxpro.ru/htdocs - тут будет установлен Drupal, это основная рабочая директория сайта.
- /var/www/linuxpro.ru/private - для личных (приватных) файлов. Используется, если в настройках друпала (/admin/config/media/file-system) выбрана опция Метод загрузки по умолчанию: Закрытый — передачей файлов управляет Drupal.
- /var/www/linuxpro.ru/log - директория для логов сайта.
- /var/www/linuxpro.ru/cgi-bin - для cgi-скриптов (на всякий случай).
- /var/www/linuxpro.ru/backup - для бекапов.
Связку nginx и php-fpm настраиваем на работу через unix сокет.
Создаем конфиг для сайта:
# /etc/nginx/sites-available/linuxpro.ru.conf
server {
server_name linuxpro.ru;
root /var/www/linuxpro.ru/htdocs;
access_log /var/www/linuxpro.ru/log/access.log;
error_log /var/www/linuxpro.ru/log/error.log;
include /etc/nginx/templates/php;
include /etc/nginx/templates/drupal;
}
Включаем сайт (создаем симлинк):
ln -s /etc/nginx/sites-available/linuxpro.ru.conf /etc/nginx/sites-enabled/linuxpro.ru.conf
После редактирования конфигов не забываем применение конфигов:
/etc/init.d/nginx reload
Проверим работу сайта. Создадим файл test.php
# nano /var/www/linuxpro.ru/htdocs/test.php
<?php
phpinfo();
?>
Устанавливаем права на файл:
chmod 644 /var/www/linuxpro.ru/htdocs/test.php && chown nginx:nginx /var/www/linuxpro.ru/htdocs/test.php
Пробуем открыть в браузере: linuxpro.ru/test.php
Если PHP работает, то удаляем с сервера файл test.php. Если не работает - смотрим логи nginx и сайта - ищем где ошибка.
Создание базы данных
Базу данных и пользователя создадим в командной строке (при желании можно поставить пакет phpmyadmin).
Создадим, к примеру, пользователя drupaluser с паролем 123456 и базу данных drupal, на которую у пользователя drupaluser будут полные привелегии.
mysql -u root -p
mysql> create database drupal;
mysql> grant usage on *.* to drupaluser@localhost identified by '123456';
mysql> grant all privileges on drupal.* to drupaluser@localhost;
mysql> exit;
Проверяем:
$ mysql -u drupaluser -p'123456' drupal
Если надо удалить базу данных:
mysql> drop database drupal;
Drupal больше всего нагружает базу данных, поэтому не забываем оптимизировать конфигурацию mysql (это можно сделать и после установки drupal'а).
После редактирования конфигов необходим рестарт mysql:
# service mysql restart
Установка Drupal
Переходим в директорию сайта:
cd /var/www/linuxpro.ru/htdocs
Скачиваем друпал с официального сайта:
wget http://ftp.drupal.org/files/projects/drupal-7.28.tar.gz
Распаковываем архив:
tar -xzvf drupal-*.tar.gz
Удаляем архив:
rm drupal-*.tar.gz
Распакованный архив у нас оказался в директории htdocs/drupal - перемещаем на уровень выше:
mv drupal-*/* ./
mv drupal-*/.gitignore ./
mv drupal-*/.htaccess ./
Удаляем пустую директорию:
rmdir drupal-*
Устанавливаем права:
chmod -R a-rwx,u+rwX,g+rX /var/www/linuxpro.ru/htdocs && chown nginx:nginx -R /var/www/linuxpro.ru/htdocs
Если вы устанавливаете друпал не из оф.архива, а переносите готовую установку с другого компьютера, то (возможно) потребуется правка разрешений для всех файлов (права для директорий 755, для файлов 644):
find /var/www/linuxpro.ru/htdocs -type d -exec chmod 775 {} +
find /var/www/linuxpro.ru/htdocs -type f -exec chmod 664 {} +
Даем разрешение на запись для sites/default:
chmod a+w sites/default
Создаем директорию для публичных файлов:
mkdir sites/default/files
chmod a+w sites/default/files
Копируем файл настроек и временно даем права на запись:
cp sites/default/default.settings.php sites/default/settings.php
chmod a+w sites/default/settings.php
Выполняем установку Drupal /install.php
После завершения инсталяции drupal убираем права на запись для settings.php
chmod go-w sites/default/settings.php
chmod go-w sites/default
Что дальше ?
Дальше, при необходимости, можно установить пакеты:
net-ftp/proftpd - для доступа к сайтам по FTP,
app-admin/webmin - административный веб-интерфейс (бывает полезен, если по каким то причинам отвалился доступ по SSH),
net-firewall/iptables - файрволл,
app-antivirus/clamav - антивирус,
app-admin/sshguard - защита от аттак через ssh,
и так далее, в зависимости от назначения вашего сервера.
Гость
25 июля, 2014 - 13:21
Постоянная ссылка (Permalink)
Какие еще пакеты желательно установить для оптимизации работы Друпала ?
kane
25 июля, 2014 - 19:20
Постоянная ссылка (Permalink)
Для друпала разве что еще Postfix можно установить.
Самому друпалу больше ничего не требуется. А всё остальное - у каждого индивидуально.