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

Аватар пользователя ttenz
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: Кому что непонятно пишите в коментах, это позволит мне лучше расписать тему.

________________________________________________________________________________________________________________

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

Ключевые слова:
Тип материала:
Версия Drupal:

Комментарии

Аватар пользователя ttenz
ttenz 3 года назад

как-то так

Аватар пользователя grob.82
grob.82 3 года назад

спасибо, на досуге полистаю

Аватар пользователя grob.82
grob.82 3 года назад
ttenz написал:
Мэмкеш настроить пока не получилось (php 5.4).

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

Аватар пользователя ttenz
ttenz 3 года назад
grob.82 написал:
Вроде Drupal 7 плохо дружит с php 5.4

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

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

Аватар пользователя natbampo
natbampo 3 года назад

куча варнингов и тому подобное у друпал 7 на php 5.4.

Аватар пользователя ttenz
ttenz 3 года назад
natbampo написал:

не знаю, у меня всё чисто 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
Аватар пользователя grob.82
grob.82 3 года назад

Спасибо, сейчас попробую все заново!

Аватар пользователя grob.82
grob.82 3 года назад

Конфигом mysql можешь поделится?

Аватар пользователя ttenz
ttenz 3 года назад
grob.82 написал:

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

Аватар пользователя Lizergin
Lizergin 3 года назад
ttenz написал:
а он (пока) у меня дефолтный, я его никак не правил /etc/mysql/my.cnf

MySQLTuner

Аватар пользователя Lizergin
Lizergin 3 года назад
ttenz написал:
sudo apt-get install php5-fpm

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

Аватар пользователя ttenz
ttenz 3 года назад
imenami написал:

да.

«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 3 года назад
ttenz написал:
«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-а грамотно настрой, а то еще через статику кто проникнет )))

Аватар пользователя okolobaxa
okolobaxa 3 года назад

Брал конфиг nginx отсюда, всё шикарно работает.

Аватар пользователя ttenz
ttenz 3 года назад
okolobaxa написал:

а сервер из сорцев собирал (+Upload Progress Module)?

Аватар пользователя ttenz
ttenz 3 года назад
okolobaxa написал:

ага теперь понятно.
Благодарю.

Аватар пользователя FORTIS
FORTIS 3 года назад

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

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


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

Аватар пользователя okolobaxa
okolobaxa 3 года назад
FORTIS написал:
у вас с этим конфигом 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 3 года назад

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

Аватар пользователя okolobaxa
okolobaxa 3 года назад

Посмотрел логи за последний месяц - дольше 10 секунд нигде нет

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

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

Аватар пользователя grob.82
grob.82 3 года назад
ttenz написал:
на отдельном ресурсе.

полезно будет, так что ждем!

Аватар пользователя Lotar
Lotar 3 года назад

Читаю

Аватар пользователя ttenz
ttenz 3 года назад

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

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

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

Аватар пользователя grob.82
grob.82 3 года назад
ttenz написал:
то якобы лучше 32

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

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

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

Аватар пользователя ttenz
ttenz 3 года назад
petrovnn написал:

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

Аватар пользователя petrovnn
petrovnn 3 года назад

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

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

Аватар пользователя ttenz
ttenz 3 года назад
petrovnn написал:
попробую вашу инструкцию

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

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

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

Аватар пользователя ttenz
ttenz 3 года назад
petrovnn написал:

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

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

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

Аватар пользователя chilic
chilic 3 года назад

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

ttenz написал:
location / { try_files $uri $uri/ /index.php?q=$uri&$args; }

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

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

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

Почему?

ttenz написал:
error_page 404 /404.html;

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

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

error_page 404 = @backend;

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

ttenz написал:
location = /50x.html { root /usr/share/nginx/html/drupal; }
Аватар пользователя ttenz
ttenz 3 года назад

подумаю, но у меня всё работает и глобалредирект и картинки и сжатие (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 написал:
Почему?

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

Аватар пользователя Fly dream
Fly dream 3 года назад

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

Аватар пользователя ttenz
ttenz 3 года назад
Fly dream написал:
Сделал все по как описано в статье, при попытке открыть страницу выдает 403 ошибку

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

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

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

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

Аватар пользователя Fly dream
Fly dream 3 года назад

Делаю перенос сайта, конфиги переправил на те что по ссылке, логи какие именно?
В 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 года назад
Fly dream написал:
"/usr/share/nginx/html/"

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

+ покажи ps faxu

Аватар пользователя Moel
Moel 3 года назад
ttenz написал:
ttenz

Пасибки, интерестно. Настроил на DO.

Аватар пользователя ttenz
ttenz 3 года назад
Moel написал:

не за что, а было на чем?

Аватар пользователя Moel
Moel 3 года назад
ttenz написал:
не за что, а было на чем?

Было на it-patrol.

Аватар пользователя Moel
Moel 3 года назад

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

Аватар пользователя ttenz
ttenz 3 года назад

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

Аватар пользователя Moel
Moel 3 года назад

Еще поставил 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';

Аватар пользователя Moel
Moel 3 года назад

Отпишь о результатах если попробуешь.

Аватар пользователя ttenz
ttenz 3 года назад
Moel написал:

ок

Аватар пользователя Moel
Moel 3 года назад

Бесплатный тест на Loadimpact:

Аватар пользователя ttenz
ttenz 3 года назад

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

Аватар пользователя Moel
Moel 3 года назад

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

Аватар пользователя ttenz
ttenz 3 года назад

поменял в control panel кернел на самый свежий и сайты стали намного лучше работать (http://www.webpagetest.org):

Аватар пользователя Moel
Moel 3 года назад

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

Аватар пользователя ttenz
ttenz 3 года назад
Moel написал:

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

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

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

Аватар пользователя bsyomov
bsyomov 2 года назад
ttenz написал:
пока только fail2ban поставил, якобы из коробки работает, посмотрим

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

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

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

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

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

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

ttenz написал:
Директория сервера в 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 2 года назад
bsyomov написал:

спасибо.

bsyomov написал:
Фаерволл поставить надо

да.

так настроил - http://www.drupal.ru/node/114079

Аватар пользователя ttenz
ttenz 2 года назад
bsyomov написал:
установить listen_backlog явно в 4096 или больше
listen.backlog
Аватар пользователя PVasili
PVasili 2 года назад

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

Аватар пользователя ttenz
ttenz 2 года назад
PVasili написал:
Сколько память дроплет и своим my.cnf под неё поделитесь?

1GB Ram 30GB SSD Disk London 1 Debian redis

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

Аватар пользователя bsyomov
bsyomov 2 года назад

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

Аватар пользователя ttenz
ttenz 2 года назад
bsyomov написал:
А вот это напрасно, особенно, при использовании innodb.

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

Аватар пользователя toshic
toshic 2 года назад

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

Аватар пользователя bsyomov
bsyomov 2 года назад
ttenz написал:
благодарю, есть место для совершенства.

Минимум:
innodb_flush_method = O_DIRECT

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

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

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

Аватар пользователя ttenz
ttenz 2 года назад

так дополнил

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 2 года назад

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

Аватар пользователя toshic
toshic 2 года назад

ну да.

Аватар пользователя bsyomov
bsyomov 2 года назад

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

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

Аватар пользователя ttenz
ttenz 2 года назад
bsyomov написал:
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 2 года назад
PVasili написал:
Сколько память дроплет и своим my.cnf под неё поделитесь?

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

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

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

Аватар пользователя bsyomov
bsyomov 2 года назад
ttenz написал:
du -sk /var/lib/mysql
11518512 /var/lib/mysql

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

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

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

Аватар пользователя ttenz
ttenz 2 года назад
bsyomov написал:
А 11ГБ оперативки на виртуалке вашей конечно нет.

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

Аватар пользователя bsyomov
bsyomov 2 года назад
ttenz написал:
но та же история - mysql не запустилась.

А в логе что?

Аватар пользователя ttenz
ttenz 2 года назад
bsyomov написал:
А в логе что?

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

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

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

Аватар пользователя ttenz
ttenz 2 года назад
ttenz написал:
сейчас по скорости оттестирую.

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

Аватар пользователя Moel
Moel 2 года назад
bsyomov написал:
Это не совсем хороший совет

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

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

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

Аватар пользователя toshic
toshic 2 года назад
Moel написал:
Вот мой результат по loaddy http://joxi.ru/Vm67bBDfE91N2Z


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

Аватар пользователя PVasili
PVasili 2 года назад

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

Аватар пользователя PVasili
PVasili 2 года назад

Та врядли:

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 2 года назад
PVasili написал:
Такое ощущение: как диски битые.

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

Аватар пользователя PVasili
PVasili 2 года назад
ttenz написал:
по ходу, база повредилась

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

Аватар пользователя bsyomov
bsyomov 2 года назад

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

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

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

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

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

bsyomov написал:
Всё же есть. =)

Вы шутите ? :)

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

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

Аватар пользователя PVasili
PVasili 2 года назад
kosHta написал:
с $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

Аватар пользователя PVasili
PVasili 2 года назад

Тут нашлось решение. Будем наблюдать...

Аватар пользователя toshic
toshic 2 года назад

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

Аватар пользователя PVasili
PVasili 2 года назад
toshic написал:
дедик ожил.

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

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

Аватар пользователя toshic
toshic 2 года назад

панели нет, только та, что на 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 2 года назад

промокод DROPLET10, чтобы получить $10.

Аватар пользователя ttenz
ttenz 2 года назад

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