22nd
Ноя

Настройка сервера на Debian6 с нуля. Nginx + php-fpm + mysql + backup по FTP

Автор: admin | Рубрика: Полезное

Экспериментальная статья рассчитанная в первую очередь на опытную аудиторию, а так же на меня, так как мне очень сложно спустя время вспомнить те телодвижения которые были предприняты при подъеме сервера, эти решения используются в работе уже не 1 год и зарекомендовали себя, как надежные. Если у Вас по какой либо причине данный мануал вызовет butthurt, воспользуйтесь формой комментариев и изложите аргументированно свою позицию. Без холиворов, ссылок на хабру о халяльных утилитах и прочей поебени.

Используйте этот мануал на свой страх и риск.

Вступление 

Не так давно я совершил очередной переезд на новый сервер. Выбор пал на конфигурацию http://ru.hetzner.com/hosting/produkte_rootserver/eq4/

Производительность

Intel® Core™ i7-920 Quad-Core
с технологией Hyper-Threading

  • Оперативная память 8 ГБ DDR3
  • Жёсткие диски 2 x 750 ГБ SATA II
    (программный RAID 1)
  • Сетевой адаптер интегрированный 1 Гбит,
    подключенный к порту 100 Мбит
  • Место для резервных копий 100 ГБ

Не буду расписывать все + и – Hetzner, ибо кто ищет, тот сам их найдет. Расскажу про основные:

Плюсы: Стоимость (сложно найти аналогичное железо дешевле), в выбранный пакет входит 100Г под backup + RAID 1 (хотя рейды стоят в любой конфигурации, что придает надежности)

Минусы: Единственное, что хотелось бы отметить это Абузы. Если Вы планируете размещать там контент который нарушает закон об авторском праве, то первые абузы прилетят очень быстро, что чревато блокировкой  сервера в особых случаях.

Настройка

Вся сборка будет осуществляться на Debian 6 Squeeze x64 minimal. Итак после покупки севрера и установки ОСи переходим к пакетам.

В первую очередь поднимем:

  • Nginx
  • PHP(FPM)
  • MySQL
  • Memcache
  • eAccelerator

Добавляем DotDeb репозитории, он содержит свежие, стабильные пакеты под LEMP и LAMP. Для этого редактируем список:

vi /etc/apt/sources.list

Добавляем в конец списка:

deb http://packages.dotdeb.org stable all
deb-src http://packages.dotdeb.org stable all

Добавляем GnuPG ключ:

wget http://www.dotdeb.org/dotdeb.gpg
cat dotdeb.gpg | apt-key add –

Обновляем:

apt-get update
apt-get upgrade

Теперь все готово, чтобы начать установку LEMP.

NGINX

Репозитории Dotdeb содержит последнюю версию nginx 1.0.6,  так, что не придется компилить его с исходников.

apt-get install nginx

По дефолту, nginx конфиги лежат в /etc/nginx. Чтобы запустить/остановить/перегрузить nginx достаточно выполнить скрипт /etc/init.d/nginx start | stop | restart и т.д.

Чтобы nginx запускался при загрузке системы, выполните команду:

update-rc.d nginx defaults

PS: Если Вам нужен конфиг nginx под WordPress, попробуйте подстроить под себя этот.

PHP- FPM

PHP-FPM (PHP FastCGI Process Management) это патч для PHP для более “комфортной” работы с FastCGI.Начиная с версии PHP 5.3.3 нет необходимости ставить его отдельно.

apt-get install php5-cli php5-common php5-suhosin php5-fpm php5-gd php5-mysql php5-curl php5-mcrypt

После настройки nginx и php-fpm (Вам потребуется связать nginx с php-fpm, рекомендую юзать сокеты см. конфиг ), для связки через сокет выставляем вместо:
fastcgi_pass 127.0.0.1:9000; # Работа через TCP
fastcgi_pass unix:/path/to/socket; # Работа через сокет

Не забудьте поправить конфиг php-fpm, по дефолту искать тут /etc/php5/fpm/php-fpm.conf, а так же поправить php.ini (по дефолту отключены шорт коды <? ?>, хз зачем)

запускаем:

/etc/init.d/nginx start
/etc/init.d/php5-fpm start

PS: Если Вы ставите nginx и php-fpm в первый раз, попробуйте запуститься по дефолтным конфигам, а дальше поправить их под себя.

MySQL

С маскулем всё просто:

apt-get install mysql-server mysql-client

Memcache

apt-get install memcached php5-memcache

eAccelerator

Не находил его в пакетах, так что придется собирать руками. На момент написания этой статьи версия: 0.9.6.1, версия 0.9.5 и ниже отказалась работать. Для начала нам потребуются:

apt-get  php5-dev build-essential

Скачиваем с Соурсфорга, http://sourceforge.net/projects/eaccelerator/files/eaccelerator/eAccelerator%200.9.6.1/eaccelerator-0.9.6.1.tar.bz2/download

Далее:

tar -xvf eaccelerator-0.9.6.1.tar.bz2
cd eaccelerator-0.9.6.1
phpize
./configure
make & make install

Если при сборке не было ошибок, подключаем модуль. Для этого достаточно поместить фаил eaccelerator.ini в папку /etc/php5/conf.d/ либо добавить содержимое фаила в php.ini

Содержимое eaccelerator.ini

extension="eaccelerator.so"
eaccelerator.shm_size="16"
eaccelerator.cache_dir="/tmp/eaccelerator"
eaccelerator.enable="1"
eaccelerator.optimizer="1"
eaccelerator.check_mtime="1"
eaccelerator.debug="0"
eaccelerator.filter=""
eaccelerator.shm_max="0"
eaccelerator.shm_ttl="0"
eaccelerator.shm_prune_period="0"
eaccelerator.shm_only="0"
eaccelerator.compress="1"
eaccelerator.compress_level="9"
# Очень удобная панелька для мониторинга
# Включена в eaccelerator-0.9.6.1, ищите в папке 
eaccelerator.allowed_admin_path="/var/www/default/control.php"

Чтобы изменения вступили в силу:

/etc/init.d/php5-fpm restart

В итоге у Вас должно получиться следующее при выводе <?phpinfo();?>

image

Установка дополнительных пакетов: vsftpd, fail2ban, exim

Теперь когда работает связка LEMP (Linux, Nginx, MySQL, PHP), нам необходимо обеспечить доступ к FTP и обеспечить защиту от ботов, которые так и норовят сбрутить пасс по ssh и ftp.

Начнем с fail2ban, простое и эффективное решение для среза попыток брута.

apt-get install fail2ban

После установки правим конфиг: /etc/fail2ban/jail.conf
Конфиг интуитивно понятен, после правки, выполняем:

/etc/init.d/fail2ban restart

Далее ставим vsftpd:

apt-get install vsftpd

Конфиг vsftpd лежит тут /etc/vsftpd/vsftpd.conf
Комментариев (при минимальном знании английского) достаточно, чтобы разобраться что к чему.

Перед запуском добавьте юзера в систему, дабы заходить на FTP через его учетку, далее в консоли: /etc/init.d/vsftpd start

Далее следует настроить exim, для корректной работы mail() функции в PHP и не только.

Если exim не установлен, то:

apt-get install exim4 exim4-config

Далее в файле конфигурации php.ini поправим:

sendmail_path = /usr/sbin/exim4 –t

Теперь необходимо настроить exim:

dpkg-reconfigure exim4-config

В появившемся диалоговом окне вам будут задавать вопросы. На первый (Общий тип почтовой конфигурации) отвечаем: интернет-сайт; прием и отправка почты напрямую, используя SMTP

Настройка BackUp c выгрузкой на удаленный FTP

Теперь самая важная часть, важно понимать, что нужно ‘бэкапить’ и как это восстановить в случае сбоя.Для начала нужно поправить конфиг MySQL дабы не было ошибок связанный с mysqldump.

Конфиг: /etc/mysql/my.cnf

Добавим в секцию [mysqld] следующее:

open-files-limit = 20000

Добавим в секцию [mysqldump] следующее:

skip-add-locks = TRUE

lock-tables      = FALSE

log-error         = /val/log/mysql.dump.err

Рестартим:

/etc/init.d/mysql restart

Приступаем к настройке backup-а под mysql, создаем папку:

mkdir –p /home/backup/mysql

Будем использовать AutoMysqlBackUp, для этого заберем свежую версию. На момент написания статья AutoMySQLBackup VER 3.0

Распаковываем архив, читаем README. Запускаем install.sh

В конфиге читаем комментарий и подставляем свои значения /etc/automysqlbackup/myserver.conf 

В качестве примеру, приведу свои параметры, вырезав комментарии:

#version=3.0_beta4

CONFIG_mysql_dump_username=’root’

CONFIG_mysql_dump_password=’Парольрута’

CONFIG_mysql_dump_host=’localhost’

CONFIG_backup_dir=’/home/backup/mysql’

# Дамп всех баз

CONFIG_db_names=()

CONFIG_db_month_names=()

# Исключаем бд

CONFIG_db_exclude=( ‘information_schema’ )

# Делаем месячный бекап первого числа

CONFIG_do_monthly="01"

# Недельный бекап: Пятница

CONFIG_do_weekly="5"

CONFIG_rotation_daily=6

CONFIG_rotation_weekly=35

CONFIG_rotation_monthly=150

CONFIG_mysql_dump_port=3306

CONFIG_mysql_dump_dbstatus=’yes’

CONFIG_mysql_dump_create_database=’yes’

CONFIG_mysql_dump_use_separate_dirs=’yes’

CONFIG_mysql_dump_compression=’bzip2′

CONFIG_mailcontent=’quiet’

CONFIG_mail_maxattsize=4000

CONFIG_mail_address=’ваш@емаил’

# Шифруем фаилы

CONFIG_encrypt=’yes’

# Пароль

CONFIG_encrypt_password=’ВАШПАРОЛЬ’

Теперь проверим, как создается бэкап:

/usr/local/bin/automysqlbackup /etc/automysqlbackup/myserver.conf

Если возникают ошибки, рекомендую поправить в конфиге значение CONFIG_mailcontent на stdout и начать отлов ошибок. Если все работает и в папке /home/backup/mysql мы видим разбитые по датам папки daily/ monthly/ weekly/ и т.д., проверим, что именно в них. Для этого Вам необходимо распаковать архив к примеру в папке daily/ВАШАБД/АРХИВ.

Если Вы используете шифрование, то для распаковки:

openssl enc -aes-256-cbc -d -in ШИФРОВАННЫЙ_ДАМП_БАЗЫ -out ДЕШИФРОВАННЫЙ_ДАМП_БАЗЫ.bz2 -pass pass:ВАШПАРОЛЬ

На выходе получите архив в bzip2 или gzip, архивы распаковываются легко:

gunzip file.gz (или bunzip2 file.bz2)

Чтобы восстановить базу выполняем:

mysql –user=username –pass=password –host=localhost ИМЯБАЗЫДАННЫХ < /ПУТЬ/К/БЕКАПУ.sql

Чтобы не запускать вручную, добавим задание в cron. Для этого создадим скрипт:

vi /usr/local/bin/runautomysqlbackup

C содержимым:

#~~~~ MySQL Backup Run ~~~~

#!/bin/sh

/usr/local/bin/automysqlbackup /etc/automysqlbackup/myserver.conf

/bin/chown root.root /home/backup/mysql* -R

/usr/bin/find /home/backup/mysql* -type f -exec /bin/chmod 400 {} \;

/usr/bin/find /home/backup/mysql* -type d -exec /bin/chmod 700 {} \;

#~~~~~ End Mysql Backup ~~~~

Обязательно сделать:

chmod u+x /usr/local/bin/runautomysqlbackup

И закрыть доступ от всех кроме root конфиги бекапа:

chmod –R 700 /etc/automysqlbackup/

Далее выполняем команду:

crontab –e

Вносим задание, на 3 часа ночи каждый день:

# MySQL Auto BackUp

0 3 * * * /usr/local/bin/runautomysqlbackup > /var/log/mysqlbackup.log 2>&1

Настройка Tartarus

При выборе утилиты для бэкапа файловой системы Tartarus привлек своим функционалом (полный и инкрементальный бэкап), простой конфиг, возможность хранить бэкап на стороннем сервере.

Инсталим: скачайте и выполните этот скрипт. В процессе выполнения, скрипт пропишет репозиторий, создаст конфиги, в общем всё то, что Вы можете сделать руками, как показано в этом мануале (скрипт взят оттуда).

Конфиги tartarus:

  1. /etc/tartarus/generic.inc – основной конфиг, где указываются реквизиты доступа по ftp и т.д.
  2. /etc/tartarus/backup.sec – этот фаил содержит Ваш пароль для шифрования, настоятельно рекомендую chmod 700
  3. /etc/tartarus/root.conf – в этом конфиге содержатся директории, которые нужно сохранить или исключить

Далее, необходимо создать файл tartarus_backup.sh

vi /usr/local/bin/tartarus_backup.sh

Содержимое:

#!/bin/sh

# /usr/local/bin/tartarus_backup.sh

# Run all backup profile found in /etc/tartarus/ and pass

# command line arguments on to tartarus (e.g. -i)

for profile in /etc/tartarus/*.conf; do

/usr/sbin/tartarus $* "$profile"

done

Не забываем:

chmod u+x /usr/local/bin/tartarus_backup.sh

Прописываем cron:

crontab –e

Добавляем:

# Tartarus Auto BackUp

0 4 * * 1-6 /usr/local/bin/tartarus_backup.sh -i > /var/log/tartarus.i.log 2>&1

0 4 * * 0   /usr/local/bin/tartarus_backup.sh    > /var/log/tartarus.log   2>&1

С понедельника по субботу инкрементальный, воскресенье полный в 4 часа ночи.

Перегружаем cron:

/etc/init.d/cron restart

Восстановление

mkdir /mnt/restore

curl ftp://USER:PASS@YOURSERVER/DIR/FILE | gpg –decrypt | tar xpvj -C /mnt/restore

Эта статья была написана с основной целью, собрать в одном месте 1 мануал по сборке севера. Статья будет обновляется в дальнейшем. Пока это её черновой вариант.

Дополнительно 

Выносим cron.log из syslog

Правим /etc/rsyslog.conf, в строку с *.*  добавить cron.none – чтобы в syslog не писались логи и раскомментировать строку с cron.*

*.*;auth,authpriv.none,cron.none      -/var/log/syslog

cron.*            /var/log/cron.log

Далее рестарт rsyslog:

/etc/init.d/rsyslog restart

Источники:

  1. Nginx+PHP(FPM)+MySQL+Memcache+eAccelerator on Debian6
  2. eAccelerator settings 
  3. Debian установка fail2ban 
  4. Настройка отправки почты в php через exim
  5. AutoMysqlBackUp
  6. Tartarus
  7. Unix Crontab
  8. Установка и настройка часового пояса (системное время) для серверов Debian
  9. Создание программного RAID на Debian

Комментарии читателей

  1. CyberMax |

    > # Очень удобная панелька для мониторинга
    > # Включена в eaccelerator-0.9.6.1, ищите в папке
    > eaccelerator.allowed_admin_path=”/var/www/default/control.php”

    Не нашел такой папки и файла, команда find / -name control.php ничего не выдает, по запросу find / -name “eaccelerator.*” в системе нахадятся только файлы eaccelerator.ini и eaccelerator.so, при выводе phpinfo модуль eAccelerator есть, а панельку наверное надо отдельно устанавливать.

    [Ответить]

    admin Reply:

    Можно найти отдельно.

    [Ответить]