TheREDHaired.Ru
Sape, SEO, Траф , Настройка сервера на Debian6 с нуля. Nginx + php-fpm + mysql + backup по FTP
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();?>
Установка дополнительных пакетов: 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 = FALSElog-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:
- /etc/tartarus/generic.inc – основной конфиг, где указываются реквизиты доступа по ftp и т.д.
- /etc/tartarus/backup.sec – этот фаил содержит Ваш пароль для шифрования, настоятельно рекомендую chmod 700
- /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>&10 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
Источники:
