GrabDuck

[РЕШЕНО] настройка Nginx на Digital Ocean под Drupal | Drupal

:

Настраиваю сервер Nginx для сайта c Domain Access на Диджитал Оушене (можно и на vultr.com, он дешевле и даже немного лучше).

Есть ли какие-нибудь особенности настройки его под Друпал для максимальной пользы?

----------------------------------------------------------------------------------------------------------------------

Настроил, может кому пригодится, использовал:

каплю - Debian 7 64 php 5.4 NGINX

1. Перенос:

# использовал SCP:

https://www.digitalocean.com/community/articles/how-to-migrate-a-mysql-database-between-two-servers

Но можно и проще (?):

https://www.digitalocean.com/community/articles/how-to-use-sshfs-to-mount-remote-file-systems-over-ssh

Вроде неплохая подборка видео по переносу:

http://www.youtube.com/playlist?list=PL91978F0CB6BC302B

2. Установка сервера:

https://www.digitalocean.com/community/articles/how-to-install-drupal-with-nginx-on-an-ubuntu-13-04-vps

Написано под Ubuntu 13.04, я ставил в Debian 7, всё норм.

# Сначала ставим всё необходимое:

sudo apt-get update

sudo apt-get install mysql-server php5-mysql

sudo apt-get install nginx

# Запускаем сервер:

# Устанавливаем PHP:

sudo apt-get install php5-fpm

# Настраиваем PHP:

открываем php.ini

sudo nano /etc /php5 /fpm /php.ini

# Меняем на 0 (для безопасности):

# Далее редактируем конфигурацию php5-fpm:

sudo nano /etc /php5 /fpm /pool.d / www.conf

# В нём находим строку listen = 127.0.0.1:9000, и меняем 27.0.0.1:9000 на /var/run/php5-fpm.sock:

listen = / var /run /php5-fpm.sock

# Рестарт php5-fpm:

sudo service php5-fpm restart

# Загружаем друпал:

wget http: //ftp.drupal.org/files/projects/drupal-7.25.tar.gz

7.25 - меняем на актуальную версию.

(я делал драшем)

# Распаковываем:

tar xzvf drupal- 7.25.tar.gz

7.25 - меняем на актуальную версию.

## Создаем БД и юзера:

# Заходим:

# Создаем БД:

вместо drupal - можно любое название

# создаем юзера:

CREATE USER drupaluser @localhost;

# Устанавливаем пароль нового юзера password

SET PASSWORD FOR drupaluser @localhost= PASSWORD ( "password" );

# Даем юзеру привилегии:

GRANT ALL PRIVILEGES ON drupal. * TO drupaluser @localhost IDENTIFIED BY 'password';

# Обновляем MySQL:

# Выходим из MySQL:

# Копируем файлы:

Директория сервера в Ubuntu 13.04 находится в /usr/share/nginx/html/.

(У меня в Debian 7 в /usr/share/nginx/www/)

# Создаем директорию drupal:

sudo mkdir /usr /share /nginx /html /drupal

# Копируем файлы друпала из своей домашней директории:

cd ~
sudo mv drupal- 7.25 /* /usr/share/nginx/html/drupal/

## Настройка Друпала:

# Копируем default.settings.php и переименовываем в settings.php

sudo cp /usr /share /nginx /html /drupal /sites / default / default.settings.php /usr /share /nginx /html /drupal /sites / default /settings.php

# Даем права на запись:

sudo chmod a+w /usr /share /nginx /html /drupal /sites / default /settings.php

# Меняем права для директории:

sudo chmod a+w /usr /share /nginx /html /drupal /sites / default

ИЛИ Есть классный скрипт (https://www.drupal.org/node/244924) который автоматически проставляет везде нужные права :

<pre > #!/bin/bash
if [ $ (id -u ) != 0 ]; then
printf "This script must be run as root.\n"
exit 1
fi
drupal_path=$ { 1 %/ }
drupal_user=$ { 2 }
httpd_group= "${3:-www-data}"
# Help menu
print_help ( ) {
cat <<-HELP
This script is used to fix permissions of a Drupal installation
you need to provide the following arguments:
1 ) Path to your Drupal installation.
2 ) Username of the user that you want to give files /directories ownership.
3 ) HTTPD group name (defaults to www-data for Apache ).
Usage: (sudo ) bash $ { 0 ##*/} --drupal_path=PATH --drupal_user=USER --httpd_group=GROUP
Example: (sudo ) bash $ { 0 ##*/} --drupal_path=/usr/local/apache2/htdocs --drupal_user=john --httpd_group=www-data
HELP
exit 0
}
# Parse Command Line Arguments
while [ $ # -gt 0 ]; do
case "$1" in
--drupal_path= * )
drupal_path= "${1#*=}"
;;
--drupal_user= * )
drupal_user= "${1#*=}"
;;
--httpd_group= * )
httpd_group= "${1#*=}"
;;
--help ) print_help;;
* )
printf "Invalid argument, run --help for valid arguments.\n";
exit 1
esac
shift
done
if [ -z "${drupal_path}" ] || [ ! -d "${drupal_path}/sites" ] || [ ! -f "${drupal_path}/core/modules/system/system.module" ] && [ ! -f "${drupal_path}/modules/system/system.module" ]; then
printf "Please provide a valid Drupal path.\n"
print_help
exit 1
fi
if [ -z "${drupal_user}" ] || [ $ (id -un $ {drupal_user } 2 > /dev / null ) != "${drupal_user}" ]; then
printf "Please provide a valid user.\n"
print_help
exit 1
fi
cd $drupal_path
printf "Changing ownership of all contents of "$ {drupal_path } ":\n user => "$ {drupal_user } " \t group => "$ {httpd_group } "\n"
chown -R $ {drupal_user }:$ {httpd_group } .
printf "Changing permissions of all directories inside "$ {drupal_path } " to "rwxr-x--- "...\n"
find . -type d - exec chmod u=rwx,g=rx,o= '{}' \;
printf "Changing permissions of all files inside "$ {drupal_path } " to "rw-r----- "...\n"
find . -type f - exec chmod u=rw,g=r,o= '{}' \;
printf "Changing permissions of "files " directories in "$ {drupal_path } /sites " to "rwxrwx--- "...\n"
cd sites
find . -type d -name files - exec chmod ug=rwx,o= '{}' \;
printf "Changing permissions of all files inside all "files " directories in "$ {drupal_path } /sites " to "rw-rw---- "...\n"
printf "Changing permissions of all directories inside all "files " directories in "$ {drupal_path } /sites " to "rwxrwx--- "...\n"
for x in . /*/files; do
find ${x} -type d -exec chmod ug=rwx,o= '{}' \;
find ${x} -type f -exec chmod ug=rw,o= '{}' \;
done
echo "Done settings proper permissions on files and directories"

Копируешь код данный выше в файл и называешь его, нарример "fix-permissions.sh" и запускаешь: <pre>sudo bash fix-permissions.sh --drupal_path=your/drupal/path --drupal_user=your_user_name</pre> т.е. с нашими данными, это примерно так: <pre>sudo bash fix-permissions.sh --drupal_path=/usr/share/nginx/www/директория_нашего_сайта --drupal_user=www-data</pre>

# Устанавливаем php модуль:

sudo apt-get install php5-gd

# Рестартим

sudo service php5-fpm restart

## Настраиваем виртуальные хосты:

# Копируем дефолтный конфиг и переименовываем в drupal (конфиг для нашего сайта):

sudo cp /etc /nginx /sites-available / default /etc /nginx /sites-available /drupal

# Редактируем наш конфиг:

sudo nano /etc /nginx /sites-available /drupal

Как то так:

server {
listen   80;
root /usr /share /nginx /html /drupal;
index index.php index.html index.htm;
server_name 162.243.9.129;
location / {
try_files $uri $uri / /index.php?q= $uri & $args;
}
error_page 404 / 404.html;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr /share /nginx /html /drupal;
}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9$
location ~ \.php$ {
#fastcgi_pass 127.0.0.1:9000;
# With php5-fpm:
fastcgi_pass unix: / var /run /php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;

                 }

Т.е.:

- поменяли root на /usr/share/nginx/html/drupal

- поменяли server_name из localhost на доменное имя твоего сайта или его IP

- поменяли "try_files $uri $uri/ /index.html;" на "try_files $uri $uri/ /index.php?q=$uri&$args;"

!!! Есть более интересный вариант, если установить

sudo apt-get install nginx-doc

то в директории /usr/share/doc/nginx-doc/examples/, уже есть готовый конфиг, заточенный под друпал:

cd /usr /share /doc /nginx-doc /examples /
gunzip drupal.gz

# Активируем конфигурацию:

sudo ln -s /etc /nginx /sites-available /drupal /etc /nginx /sites-enabled /drupal

# Удаляем дефолтную:

sudo rm /etc /nginx /sites-enabled / default

# Перегружаем сервер:

sudo service nginx restart

# Открываем IP сайта (или домен)/drupal/setup.php и устанавливаем друпал.
-------------------------------------------------------------------------------------------

А вот здесь уже готовый конфиг, но немного сложноватый:

https://github.com/perusio/drupal-with-nginx/blob/D7/README.md

с этим (от perusio) конфигом используем сборку сервера из http://debian.perusio.net/unstable/

3. Настройка мультисайтинга:

https://www.digitalocean.com/community/articles/how-to-enable-multiple-sites-on-a-drupal-installation-on-ubuntu-12-04

4. настройка DNS:

я просто добавил домены в ДНС на оушене и прописал у регистратора - ns1.digitalocean.com ns2.digitalocean.com ns3.digitalocean.com.

5. Кэширование:

http://www.echoditto.com/blog/more-drop-bucket-drupal-8-nginx-and-microcaching

# Микрокэширование

в файле конфига твоего сайта на nginx добавляешь

location ~ \.php$ {
set $no_cache "";
if ( $request_method !~ ^ (GET |HEAD )$ ) {
set $no_cache "1";
}
if ( $no_cache = "1" ) {
add_header Set-Cookie "_mcnc=1; Max-Age=2; Path=/";
add_header X-Microcachable "0";
}
if ( $http_cookie ~ SESS ) { #checks an auth'd user
set $no_cache "1";
}
#... lots of fastcgi stuff to do the caching
}

http://valic.me/article/how-configure-nginx-php-fpm-mysql-memcached-apc-and-drush-drupal-7-debian-70-wheezy-20#.UtQKovQW2Pt

http://www.accella.net/drupal-7-memcached-apc-nginx-php5-fpm-squeeze-optimization/

# Сжатие gzip:

http://stackoverflow.com/questions/15999606/enable-gzip-compression-with-nginx

я просто вот так раскомментировал в конфиге nginx /etc/nginx/nginx.conf:

##
# Gzip Settings
##
gzip on;
gzip_disable "msie6";
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_buffers 16 8k;
gzip_http_version 1.1;
gzip_types text /plain text /css application /json application /x-javascript text /xml application /xml application /xml+rss text /javascript;

6. Защита:

- связка nginx, logwatch, fail2ban и ufw http://habrahabr.ru/post/153589/

пока только fail2ban поставил, якобы из коробки работает, посмотрим:

- http://putty.org.ru/articles/fail2ban-ssh.html

Мэмкеш настроить пока не получилось (php 5.4).

Панель не ставил - но хорошие отзывы по веста.

7. Для внеклассного чтения подробные/детальные руководства/гайды:

Очень неплохое руководства в друпал-nginx группе: https://groups.drupal.org/node/388488

С картинками + защита от атак +SSL: http://dashohoxha.blogspot.ru/2012/10/using-nginx-as-web-server-for-drupal.html

PS: Кому что непонятно пишите в коментах, это позволит мне лучше расписать тему.

________________________________________________________________________________________________________________

<<<ПРОДОЛЖЕНИЕ ЗДЕСЬ>>>, т.к. сюда уже не вмещается.