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

Аватар пользователя ttenz ttenz 6 января 2014 в 10:38
1

Настраиваю сервер 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-d...

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

https://www.digitalocean.com/community/articles/how-to-use-sshfs-to-moun...

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

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

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

https://www.digitalocean.com/community/articles/how-to-install-drupal-wi...

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

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

sudo apt-get update

sudo apt-get install mysql-server php5-mysql

sudo apt-get install nginx

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

sudo service nginx start

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

sudo apt-get install php5-fpm

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

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

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

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

cgi.fix_pathinfo=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 - меняем на актуальную версию.

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

# Заходим:

mysql -u root -p

# Создаем БД:

CREATE DATABASE drupal;

вместо 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:

FLUSH PRIVILEGES;

# Выходим из 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-s...

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

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

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

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

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

в файле конфига твоего сайта на 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-...

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

# Сжатие gzip:

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

я просто вот так раскомментировал в конфиге 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-drup...

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

________________________________________________________________________________________________________________

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

Комментарии

Аватар пользователя grob.82 grob.82 14 января 2014 в 10:03
"ttenz" wrote:

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

Вроде Drupal 7 плохо дружит с php 5.4

Аватар пользователя ttenz ttenz 14 января 2014 в 11:50
"grob.82" wrote:

Вроде Drupal 7 плохо дружит с php 5.4

вроде как memcahe плохо дружит, якобы стабильной версии пока нет.

а друпал норм летает.

Аватар пользователя ttenz ttenz 16 января 2014 в 10:50
"natbampo" wrote:

не знаю, у меня всё чисто D7:

php -v
PHP 5.4.4-14+deb7u7 (cli) (built: Dec 12 2013 08:42:07)
Copyright (c) 1997-2012 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2012 Zend Technologies
Аватар пользователя ttenz ttenz 16 января 2014 в 12:55
"grob.82" wrote:

а он (пока) у меня дефолтный, я его никак не правил /etc/mysql/my.cnf

Аватар пользователя Lizergin Lizergin 16 января 2014 в 17:36
"ttenz" wrote:

а он (пока) у меня дефолтный, я его никак не правил /etc/mysql/my.cnf

MySQLTuner

Аватар пользователя Lizergin Lizergin 16 января 2014 в 17:47
"ttenz" wrote:

sudo apt-get install php5-fpm

получается ты вообще от индейца (apache) отказался?

Аватар пользователя ttenz ttenz 16 января 2014 в 18:53
"imenami" wrote:

да.

«Apache is like Microsoft Word, it has a million options but you only need six. Nginx does those six things, and it does five of them 50 times faster than Apache.»

-- Chris Lea

Аватар пользователя Lizergin Lizergin 16 января 2014 в 19:29
"ttenz" wrote:

«Apache is like Microsoft Word, it has a million options but you only need six. Nginx does those six things, and it does five of them 50 times faster than Apache.»
-- Chris Lea

ох ох, главное что б сео-слайдер улетно работал и конфиг ngnix-а грамотно настрой, а то еще через статику кто проникнет )))

Аватар пользователя FORTIS FORTIS 21 января 2014 в 18:04

ядрышко норм работает а вот при большом числе контрибов варнинги будут сыпаться, тот же кикстартер изобилует ими на 5.4

Аватар пользователя FORTIS FORTIS 21 января 2014 в 18:11
"ttenz" wrote:

А вот здесь уже готовый конфиг, но немного сложноватый:
https://github.com/perusio/drupal-with-nginx/blob/D7/README.md
с этим (от perusio) конфигом используем сборку сервера из http://debian.perusio.net/unstable/[/quote]
у вас с этим конфигом php-fpm в логи жалуется на ооочень долгое время выполнения index/cron ?

Аватар пользователя okolobaxa okolobaxa 21 января 2014 в 18:22
FORTIS wrote:

у вас с этим конфигом php-fpm в логи жалуется на ооочень долгое время выполнения index/cron ?

Вот такая строчка в логе есть, оно?
[pool www1] child 15530, script '/home/oldsaratov/www/index.php' (request: "GET /index.php") executing too slow (6.188998 sec), logging

Аватар пользователя FORTIS FORTIS 21 января 2014 в 18:25

да только чаще там бывает тысячи секунд, сейчас правда пропало может изза keepalive 1 (вместо 5), но было проблемой

Аватар пользователя ttenz ttenz 21 января 2014 в 19:52
"FORTIS" wrote:

у вас с этим конфигом php-fpm в логи жалуется на ооочень долгое время выполнения index/cron ?

я не стал его слепо использовать, я начал с простого, голого конфига, с осмысления каждого изменения, его тестированием, материал брал из разных источников, в т.ч. и из этого конфига тоже. К сожалению, в этой теме дополнения/изменения уже не добавляются, видимо исчерпал лимит, полную версию поста сделаю на отдельном ресурсе.

Аватар пользователя ttenz ttenz 25 января 2014 в 12:10

Подводный камень №1:

интересную вещь обнаружил - кернел на лету в можно менять Settings - Kernel, поменял на 32 разрядность Debian 7.1., т.к. памяти меньше 3 Гб, то якобы лучше 32, меньше памяти ест, проверим.

!!!изменил, перегрузил, не перегрузилась, пришлось из образа восстанавливать и вернуть версию кернела, надо было сразу при создании дроплетки.

Аватар пользователя grob.82 grob.82 25 января 2014 в 13:23
"ttenz" wrote:

то якобы лучше 32

Чем оно лучше? если даже и лучше мы этого не заметим.

Аватар пользователя petrovnn petrovnn 29 января 2014 в 18:09
"ttenz" wrote:

интересную вещь обнаружил - кернел на лету в можно менять Settings - Kernel, поменял на 32 разрядность Debian 7.1., т.к. памяти меньше 3 Гб, то якобы лучше 32, меньше памяти ест

да, я читал об этом в гугле. Но ведь если это действительно однозначно так, то оушен по идее не должен предлагать х64 дроплеты в случае если мы выбираем дроплет с маленькими ресурсами 500мб

Аватар пользователя ttenz ttenz 29 января 2014 в 18:20
"petrovnn" wrote:

да, почему же, типа свобода, не знаю, я на 64 512 мб, норм, летает, быстрее чем на it-patrol было.

Аватар пользователя petrovnn petrovnn 29 января 2014 в 18:36

еще вопрос к автору - сколько памяти у вас (оперативной), и ядер?
UPD
не обновил страницу.
Выходит 512 и одно ядро, уже понял. Я тоже начал с этого тарифа, но если удастся настроить чтобы не падало, перейду на тариф с гигом памяти.

Я пока сижу на ЛАМПе, но если не получится, попробую вашу инструкцию

Аватар пользователя ttenz ttenz 29 января 2014 в 19:09
"petrovnn" wrote:

попробую вашу инструкцию

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

Аватар пользователя petrovnn petrovnn 29 января 2014 в 20:13
"ttenz" wrote:

скоро выйдет обновленный пост, но на другом ресурсе, дам ссылку позже.

ок, буду ждать.
А почему выбрал Debian 7 64? Там большая будет разница между ним и убунтой 12.04 или 13.04?

Аватар пользователя ttenz ttenz 29 января 2014 в 21:13
"petrovnn" wrote:

но что 64 пожалел, для 512 Мб надо бы 32, а Debian он вылизанный, стабильный, обкатанный.

"petrovnn" wrote:

Там большая будет разница между ним и убунтой 12.04 или 13.04?

не, там пути к сайту разные и всё.

Аватар пользователя petrovnn petrovnn 29 января 2014 в 21:20

ок, при написании статьи прошу учесть существование таких материалов (может что-то найдется полезное)
https://github.com/perusio/drupal-with-nginx
http://pastebin.com/ZkY99qFe
https://www.digitalocean.com/community/articles/how-to-install-drupal-wi...
https://www.digitalocean.com/community/articles/how-to-install-linux-ngi...

Аватар пользователя chilic chilic 16 февраля 2014 в 4:26

Немного критики:

"ttenz" wrote:

location / { try_files $uri $uri/ /index.php?q=$uri&$args; }

Не очень удачное решение. т.к. при такой конфигурации может не работать модуль globalredirect.

На мой взгляд лучше будет так:

location / {
    try_files      $uri @drupal;
}
         
location @drupal { ...

Почему?

"ttenz" wrote:

error_page 404 /404.html;

У Вас imagecache и агрегация js/css работают?

Обычно выглядит:

error_page 404 = @backend;

Бессиыссленно:

"ttenz" wrote:

location = /50x.html { root /usr/share/nginx/html/drupal; }

Аватар пользователя ttenz ttenz 16 февраля 2014 в 8:06

подумаю, но у меня всё работает и глобалредирект и картинки и сжатие (css точно).

но по картинкам я дописывал (сюда инфа уже не добавляется):

     location ~ ^/sites/.*/files/styles/ {
                try_files $uri @rewrite;
        }
 
        location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
                expires max;
                log_not_found off;
        }

текущая конфигурация здесь описана - http://saitodelatel.ru/nastroika-servera-na-digital-ocean-pod-drupal

"chilic" wrote:

Почему?

я пока не дошел до этапа осмысления, пока просто поиск решений и их тестирование, всё работает как бы.

Аватар пользователя Fly dream Fly dream 28 апреля 2014 в 23:41

Сделал все по как описано в статье, при попытке открыть страницу выдает 403 ошибку, почему - не могу разобраться. Сменил владельца папки с сайтом на www-data и вообще доступ выставил на 777, где еще может быть собака зарыта?

Аватар пользователя ttenz ttenz 29 апреля 2014 в 5:24
"Fly dream" wrote:

Сделал все по как описано в статье, при попытке открыть страницу выдает 403 ошибку

перечитай здесь, сравни конфиги, выложи логи - http://saitodelatel.ru/nastroika-servera-na-digital-ocean-pod-drupal

перенос сайта, новый сайт?

логин пароль базы сеттингс?

использовалась панель?

Аватар пользователя Fly dream Fly dream 3 мая 2014 в 11:35

Делаю перенос сайта, конфиги переправил на те что по ссылке, логи какие именно?
В error.log 2014/04/28 15:28:35 [error] 5760#0: *1 directory index of "/usr/share/nginx/html//" is forbidden, client: 5.18.184.29, server: **, request: "GET / HTTP/1.1", host: "188.226.***.***"
Логин\пароль от базы прописал в сеттингах друпала
Все делаю по ssh

Аватар пользователя ttenz ttenz 3 мая 2014 в 13:57
"Fly dream" wrote:

"/usr/share/nginx/html/"

если структура не /usr/share/nginx/www/, то соответственно и в руководстве нужно использовать эту структуру, соответственно и в конфигах не root /usr/share/nginx/www/_наш_сайт_;, а /usr/share/nginx/html/ /_наш_сайт_;.

+ покажи ps faxu

Аватар пользователя Moel Moel 23 июля 2014 в 12:41

Кстати по панелям. Есть у меня веста на другом проекте. Красивая, удобная и т.д. Но везде пишут что память она отжирает неплохо.

Аватар пользователя ttenz ttenz 23 июля 2014 в 12:52

я панель не ставил, мне проще через командную, но планирую поэкспериментировать с вестой и isp менеджером.

Аватар пользователя Moel Moel 23 июля 2014 в 15:53

Еще поставил APC. Настроил как кэширующий бэкэнд c помощью модуля https://www.drupal.org/project/apc.
Вроде норм работает. Конфиг APC
extension=apc.so
;включено
apc.enabled=1
;сегменты
apc.shm_segments=1
;память
apc.shm_size=64
;через сколько милисекунд очищать кэш
apc.ttl=0
;процесс загрузки
apc.rfc1867=1
;кэшируем все файлы или не все
apc.cache_by_default = 0
;то что кэшируем
apc.filters = "+_папка вашего сайта_"

В settings.php дописываем
$conf['cache_backends'] = array('sites/all/modules/apc/drupal_apc_cache.inc');
$conf['cache_default_class'] = 'DrupalAPCCache';

Аватар пользователя ttenz ttenz 14 сентября 2014 в 17:45

удивительны дела: сейчас перенес один из своих сайтов на DO с патруля, так он стал в 5 раз быстрее летать и бесплатно (т.к. на DO там остальные сайты крутятся уже, а этот не решался, получалось на две кассы платить.) на патруле его обслуживание стоило в 2 раза дороже, чем на DO.

Аватар пользователя Moel Moel 14 сентября 2014 в 19:45

Блин когда я на патруль пришел, все было хорошо. Потом все хуже и хуже. Вплоть последний раз бэпак базы не смог сделать (нужен был когда переезжал). Написали что модуль какой то мешает. Хер сним мне там нужна была одна таблица вручную забэпапил ее. Не считая того что половина их ней админки работает еле еле. Да и скорость земля и небо по сравнению с тем же do. Во общем съехал и рад.

Аватар пользователя Moel Moel 27 сентября 2014 в 0:14

Странные какието результаты. У тебя все А. У меня не все но Score больше

Аватар пользователя ttenz ttenz 27 сентября 2014 в 6:11
"Moel" wrote:

score оценивает степень оптимизации,на ссылку score нажмешь, увидишь.

у меня картинки в спрайты не скомбинированы.

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

Аватар пользователя bsyomov bsyomov 14 марта 2015 в 11:15
"ttenz" wrote:

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

Из коробки работает только защита от брутфорса ssh паролей. А может он куда больше.

"ttenz" wrote:

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

И это правильно - панель нужна только тогда, когда предоставляется хостинг внешним клиентам. И она сразу связывает руки в плане конфигов веб сервера и.т.п.

Фаерволл поставить надо. Также, неплохо чем-нибудь мониторить нагрузку, хотя бы munin.

"ttenz" wrote:

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

Если пользоваться сокетами, стоит установить listen_backlog явно в 4096 или больше. Иначе бывают глюки неприятные.

"ttenz" wrote:

Директория сервера в Ubuntu 13.04 находится в /usr/share/nginx/html/.
(У меня в Debian 7 в /usr/share/nginx/www/)

Там находится шаблончик для виртуального хоста по умолчанию. А сайты надо класть в директорию пользователя-хозяина сайта или в /var/www/

Вообще, для серьёзного продакшена ещё очень немало надо сделать, начать стоит с владельца файлов и прав... Владельцем файлов должен быть отнюдь не www-data, а другой пользователь.
Также, например, разумно настроить лимиты в php и open_basedir, и сделать отдельную tmp папку для сайта выше его wwwroot.

Очень важная тема пропущена - настройка mysql innodb хранилища.

Также не раскрыт вопрос настройки почты, хотя в условиях мелкого VPS, лучше воспользоваться внешним сервисом, в Drupal использовать отправку через SMTP, и поставить/настроить какой-нибудь ssmtp для релея через него сообщений сервера.

И перечисленное выше, это только очевидные вещи - некая вершина айсберга.

В общем, как обычно, для пошаговых руководств по настройке VPS, даны только минимально необходимые шаги, для хоть какой-нибудь работы, и надо понимать, что это только 1/10 того, что реально надо настраивать на сервере в итоге... Ну и чайникам реально не место в настройке серверов, как бы на это кто не обижался - это сложная тема, требующая много специфичных знаний - куда больше, чем создание сайта на друпал, с программированием на PHP вместе. А следование таким пошаговым руководствам ведёт к пополнению ботнетов, в основном, и дальнейшему разочарованию: "Ааа у меня всё перестало почему-то работать"/"Как у меня взломали сайт?" и.т.п. =)

Аватар пользователя ttenz ttenz 8 апреля 2015 в 4:58
"PVasili" wrote:

Сколько память дроплет и своим my.cnf под неё поделитесь?

1GB Ram 30GB SSD Disk London 1 Debian redis

my.cnf стандартный, не затачивал, т.к. и так всё прекрасно работает.

Аватар пользователя ttenz ttenz 8 апреля 2015 в 14:58
"bsyomov" wrote:

А вот это напрасно, особенно, при использовании innodb.

благодарю, есть место для совершенства.

Аватар пользователя toshic toshic 8 апреля 2015 в 15:10

Я пока на апаче сижу в DO, дроплет с Debian7, так как нагрузки на бложик практически никакой. Чтобы почта отправлялась с сайта использую postfix.
Серверное администрирование глубокая тема и надо действительно реально в этом шарить, чтобы настраивать сервер для хостинга

Аватар пользователя bsyomov bsyomov 8 апреля 2015 в 18:01
"ttenz" wrote:

благодарю, есть место для совершенства.

Минимум:
innodb_flush_method = O_DIRECT

innodb_buffer_pool_size
В идеале иметь чуть больше объёма базы, но это не всегда возможно. В любом случае лучше выделить по возможности больше.

innodb_file_per_table
Очень полезная опция, позволяющая не тратить лишнее место в разрастающемся ibdata, и уменьшить последствия при повреждении его структуры.

innodb_flush_log_at_trx_commit
Часто, полезно изменить на 2, или даже 0.

Аватар пользователя ttenz ttenz 8 апреля 2015 в 18:59

так дополнил

innodb_flush_method = O_DIRECT
innodb_buffer_pool_size = 11G
innodb_file_per_table = 1
innodb_flush_log_at_trx_commit = 2

но с параметром innodb_buffer_pool_size, mysql не рестартнула. С остальными параметрами сайт начал заметно тормозить.

Аватар пользователя toshic toshic 8 апреля 2015 в 19:14

Всё равно в итоге прийдешь к связке nginx+apache.
php-fpm работает практически так же как mod-php апача, обрабатывая запросы php в цикле и поэтому имеет смысл оставить php апачу, а статику и медленных клиентов отдать nginx, тогда будет баунти. А так... шило на мыло. Может я в чем то и ошибаюсь...

Аватар пользователя ttenz ttenz 8 апреля 2015 в 19:27
"toshic" wrote:

Может я в чем то и ошибаюсь...

посмотрим, пока всё летает, были проблемы только с китайскими ботами, разобрался - http://www.drupal.ru/node/114079

"Apache/Nginx/Lighttpd/other web server. Does it matter which one I choose? In short, No."

http://drupal.stackexchange.com/questions/71610/nginx-vs-apache-are-ther...

Аватар пользователя bsyomov bsyomov 8 апреля 2015 в 20:55

11 гигов это явно больше, чем есть на виртуалке. =) Надо было читать внимательнее, и подходить разумно.
Остальное надо измерять после прогрева кеша запросов.
Медленнее уж точно быть не должно.

Toshik:По скорости также, тут все почти время занимает работа самого php. А вот памяти, специализированный менеджер процессов, тратит в пустую куда меньше апача, с массой модулей до кучи.

Аватар пользователя ttenz ttenz 9 апреля 2015 в 4:30
"bsyomov" wrote:

11 гигов это явно больше, чем есть на виртуалке. =)

du -sk /var/lib/mysql
11518512        /var/lib/mysql

11518512/1024=11248.546875 MB

du -ch /var/lib/mysql | grep total
11G     total
Аватар пользователя Moel Moel 9 апреля 2015 в 7:26
"PVasili" wrote:

Сколько память дроплет и своим my.cnf под неё поделитесь?

mysqltuner ставьте, погоняйте пару дней и настраивайте, У меня сильный прирост был.

Аватар пользователя ttenz ttenz 9 апреля 2015 в 7:30
"Moel" wrote:

mysqltuner ставьте, погоняйте пару дней и настраивайте, У меня сильный прирост был.

ок, так и сделаю

Аватар пользователя bsyomov bsyomov 9 апреля 2015 в 11:56
"ttenz" wrote:

du -sk /var/lib/mysql
11518512 /var/lib/mysql

Вот только проблема в том, что этот параметр управляет выделением памяти под страничный кеш innodb. А 11ГБ оперативки на виртуалке вашей конечно нет.
Кстати, с помощью du считать объём данных в базах не правильно - их меньше, возможно, очень значительно.

"Moel" wrote:

mysqltuner ставьте, погоняйте пару дней и настраивайте,

Это не совсем хороший совет, если рассматривать его как "запустил - настроил как написано". Рекомендации, которые даёт этот скрипт весьма общие, и не учитывают, например, количество памяти, которую _стоит_ выделить mysql, если это не единственное приложение на сервере, да и многое другое, кстати.
Но им удобно смотреть статистику, например, тот же общий объём innodb баз, общий объём индексов myisam, эффективность кешей и.т.п.

Аватар пользователя ttenz ttenz 9 апреля 2015 в 11:57
"bsyomov" wrote:

А 11ГБ оперативки на виртуалке вашей конечно нет.

пробовал, рекомендуемый percona, объем в 512MB, но та же история - mysql не запустилась.

Аватар пользователя ttenz ttenz 9 апреля 2015 в 12:06
"bsyomov" wrote:

А в логе что?

а уже ничего, с такими запустилась:

innodb_flush_method = O_DIRECT
innodb_buffer_pool_size = 512M
innodb_file_per_table = 1
innodb_flush_log_at_trx_commit = 2

сейчас по скорости оттестирую.

Аватар пользователя ttenz ttenz 9 апреля 2015 в 12:21
"ttenz" wrote:

сейчас по скорости оттестирую.

вроде такая же (в целом), но ощущение, что пошустрее стал работать.

Аватар пользователя Moel Moel 9 апреля 2015 в 13:53
"bsyomov" wrote:

Это не совсем хороший совет

Там же естественно смотреть сколько по максимуму будет используемый обьем оперативки и складывать с уже используемыми например php java. И подгонять значения. А то падать будет. У меня например solr постоянно валялся из за превышения.

Аватар пользователя toshic toshic 9 апреля 2015 в 14:51
"bsyomov" wrote:

Toshik:По скорости также, тут все почти время занимает работа самого php. А вот памяти, специализированный менеджер процессов, тратит в пустую куда меньше апача, с массой модулей до кучи.

Да, уже ознакомился с нюансами. Спасибо.
p.s.ради любопытства и не только прикрутил пока nginx к апачу, отключил кеш и запустил простую проверку без фанатизма на loaddy. сервер лег ),вернее не с ервер, а mysql пошла в отказ, там всего несколько нод и вьюсов пока. Апач вчера в одиночку выдержал запросы без кеша, mysql не отключился. Но в принципе, я еще ничего особо не настраивал. У меня правда дроплет всего с 512 метров оперативы

Аватар пользователя PVasili PVasili 13 апреля 2015 в 12:32

Что-то с завидной регулярность раз в 4-5 дней валится MySQL, По ходу там иди диски битые или косяк где-то в дроплете.

Аватар пользователя PVasili PVasili 13 апреля 2015 в 12:59

Та врядли:

InnoDB: Reading tablespace information from the .ibd files...
InnoDB: Error: trying to add tablespace 14 of name './my_base/any_table.ibd'
InnoDB: to the tablespace memory cache, but tablespace
InnoDB: 14 of name './roundcube/system.ibd' already exists in the tablespace
InnoDB: memory cache!
150407 15:55:54 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended

Каждый раз (пока 3 инцидента было) на разные файлы пишет. Хотя InnoDB таблиц нет вообще в базах.
Я CentOS поставил с Vesta. Такое ощущение: как диски битые.
С ключом startsos запустилось.
Думаю, если повторяться будет убить MySQL и PostgreSQL попробовать.

Аватар пользователя ttenz ttenz 13 апреля 2015 в 13:18
"PVasili" wrote:

Такое ощущение: как диски битые.

так почитал по инету, ребята начали уходить с ДО, хвалят VULTR, с виду похоже, но мне пока цены понравились.

Аватар пользователя PVasili PVasili 13 апреля 2015 в 13:23
"ttenz" wrote:

по ходу, база повредилась

Это понятно :) но тут нет InnoDB таблиц и это происходит с ужасающей частотой раз в ~4-5 дней.

Аватар пользователя bsyomov bsyomov 14 апреля 2015 в 14:48

А места на диске свободного достаточно? Такое часто происходит, при нехватке места. При этом на совершенно целых дисках.

"PVasili" wrote:

Хотя InnoDB таблиц нет вообще в базах.

Всё же есть. =)

Аватар пользователя PVasili PVasili 14 апреля 2015 в 15:14
"bsyomov" wrote:

А места на диске свободного достаточно? Такое часто происходит, при нехватке места. При этом на совершенно целых дисках.

Как минимум ~16-17Gb.

"bsyomov" wrote:

Всё же есть. =)

Вы шутите ? :)

...
Engine: MyISAM
Version: 10
Row_format: Dynamic
...

Судя по скупым логам MySQL что точно глючит понять сложно.
Ищет то, чего нет априори и валится. Стартует после startsos :(
Пока ждем следующего раза.

Аватар пользователя PVasili PVasili 16 апреля 2015 в 23:57
"kosHta" wrote:

с $20 на DO можно импровизировать

х.м. с такой суммы можно и в другом месте импровизировать

Очередной завал... Кто расшифровать сможет mysqld.log:

....
150407 16:27:22 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
150407 16:27:22 [Note] Plugin 'FEDERATED' is disabled.
150407 16:27:22 InnoDB: The InnoDB memory heap is disabled
150407 16:27:22 InnoDB: Mutexes and rw_locks use GCC atomic builtins
150407 16:27:22 InnoDB: Compressed tables use zlib 1.2.3
150407 16:27:22 InnoDB: Using Linux native AIO
150407 16:27:22 InnoDB: Initializing buffer pool, size = 8.0M
150407 16:27:22 InnoDB: Completed initialization of buffer pool
150407 16:27:22 InnoDB: highest supported file format is Barracuda.
InnoDB: Log scan progressed past the checkpoint lsn 157342092
150407 16:27:22  InnoDB: Database was not shut down normally!
InnoDB: Starting crash recovery.
InnoDB: Reading tablespace information from the .ibd files...
InnoDB: Error: trying to add tablespace 14 of name './my_base/file.ibd'
InnoDB: to the tablespace memory cache, but tablespace
InnoDB: 14 of name './roundcube/system.ibd' already exists in the tablespace
InnoDB: memory cache!
150407 16:27:22 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended

InnoDB вообще таблиц нет в базе :) Какая то пародия, а не SQL сервер этот MySQL

Аватар пользователя toshic toshic 17 апреля 2015 в 2:14

поставил nginx с postgresql, мускуль не стал ставить и дедик ожил.админка пошустрее работает.падения прекратились, как было с мускулем. беда только что восьмерка в бете на постгрес становитьсо не желает. придется патчить ради игрушки).

Аватар пользователя PVasili PVasili 17 апреля 2015 в 15:06
"toshic" wrote:

дедик ожил.

Какая OS и панель? Сколько памяти?

Ещё раз завалится - поставлю постгри...

Аватар пользователя toshic toshic 17 апреля 2015 в 20:07

панели нет, только та, что на do. ram 512 debian 7, самый дешевый.
Просто мускуль валился даже на пустом сайте в админке, но тогда правда стояли nginx с apache, сейчас только nginx с php-fpm и apc, но apc и php-fpm я особо не настраивал, делал по нескольким мануалам, была трабла с пулами для каждого домена свой, не сразу вкурил, поэтому успокаивал себя апачем некоторое время. постгрес настраивается шикарно, но в него погружаться надо, поизучать чутка. если модули с запросами на мускуль написаны по стандарту sql, то постргрес их проглотит и не чихнет. в идеале конечно было бы замерить с TOP работу сервера с мускулем для сравнения, но я как то не предусмотрел этот вариант,а переустанавливать неохота.

UPD:
Я немного дурью помаялся. Девелом сгенерировал 10000 нод на свежую инсталяшку. Время генерации 62 минуты. После, с loaddy ( под зареганным с бесплатным тарифом они 100 юзеров эмитируют), не могу сказать , что прям летает , под кешем
img
потом отключил кеш и тоже самое, без кеша страницы отдавались до 15 секунд, но постгрес не отказал, что хорошо.

Аватар пользователя ttenz ttenz 8 августа 2015 в 4:21

кстати DO без проблем возвратил деньги оставшиеся на балансе (полностью на vultr перешел, защита лучше и немного дешевле).