Настройка сервера, попытка номер 2

Новости сообщества
Уррряяяяя! Мы теперь на своей уютненькой VPSочке! Принимаю поздравления в комментах :)

Итак, меня совсем задолбали глюки сайтика. Иногда он работал отлично, но иногда — случались ацкие затупы по 15 секунд. Меня это совсем не радовало, и я, не смотря на то, что хостинг оплачен еще на год, решил прикупить VPS.

Протестировав несколько VPSок, я остановился на ihc (реф. ссылка) — они показались лучшими. Маленький пинг, хорошая связь и очень даже неплохая скорость работы VPS'ок. Кроме того, куча положительных отзывов.

Особенно понравилось предупреждение перед переустановкой ОС:

переустановка ОС на ihc.ru

Прошлые эксперименты c unixbench (тут хороший туториал по установке) показали, что Debian быстрее, чем CentOS примерно на 20% (иногда, 30%). Я думал, что это из-за включенного по умолчанию selinux на CentOS. Но, оказалось, что по умолчанию в тех образах, что дает ihc, selinux выключен. Возможно, он вкомпилирован в ядро и конфигом просто так не выключается (хотя, тут я могу ошибаться). Итак, тариф KVM/1 выдает:

  • 1074.3 попугаев unixbench на CentOS
  • 1295.2 попугаев unixbench на Debian

Ладно, на этот раз мы ставим Debian.

Запуск
первое, что нужно сделать
apt-get update && apt-get upgrade

update — обновляет кэш информации о пакетах, а upgrade фактически выполняет обновление.

и уже тут вываливает ошибка.
debconf: DbDriver "config": could not open /var/cache/debconf/config.dat


Хоть решение и простое
mkdir /var/cache/debconf


но не приятно, что чистая система так себя ведет.

еще раз:
apt-get update && apt-get upgrade


Ну, и, конечно:
apt-get install mc htop

Лично мне не нравится редактор nano, я решил поменять его на дефолтный от mc. Для этого в mc нужно сделать:
Options->Configuration->use internal edit

htop мне намного больше нравится штатного top. Вот так я развращен красивостями :)

php-fpm и dotdeb
Для работы php в режиме FastCGI нужен пакет php5-fpm. Проблема в том, что в стабильном репозитории debian его нет.

Есть сторонний репозиторий dotdeb, который специализируется на стеке софта для web-серверов. Я слышал огромное количество плохих отзывов о нем, но я подметил, что в основном люди жалуются на падения mysql, поэтому мы будем ставить из dotdeb только php и все, что с ним связано, mysql будем ставить из стабильного репозитория debian, а nginx будем ставить последний стабильный из официального репозитория nginx (я присмотрел пару фич, которые хотелось бы использовать в последних версиях).

в /etc/apt/sources.list добавляем
deb https://packages.dotdeb.org squeeze-php54 all
deb-src https://packages.dotdeb.org squeeze-php54 all

deb https://nginx.org/packages/debian/ squeeze nginx
deb-src https://nginx.org/packages/debian/ squeeze nginx


Теперь добавляем ключи
wget https://www.dotdeb.org/dotdeb.gpg -O - -q | apt-key add -
wget https://nginx.org/keys/nginx_signing.key -O - -q | apt-key add -


Ну и обновляемся
apt-get update && apt-get upgrade


Кстати, узнать откуда apt собирается тащить пакеты можно командой apt-cache policy имя_пакета

Остальной софт
Сначала ставим nginx. Тут все просто:
apt-get install nginx


Теперь устанавливаем php и все, что с ним связано
apt-get install php5 php5-fpm php-pear php5-common php5-mcrypt php5-mysql php5-cli php5-gd php5-dev


ну, и mysql
apt-get install mysql-server


Сразу заменяем php.ini на предназначенный для продакшина. Они находятся в /usr/share/php5, и проводим над ним все манипуляции из предыдущей статьи.

eAccelerator
Теперь попробуем поставить кэш байткода php. Сначала я хотел поставить apc, просто потому, что он был в репозитории dotdeb'а. Но он вылетает с segfault'ом по неизвестной мне причине, поэтому я решил поставить eAccelerator. Естественно, его тоже в репозиториях нет. Придется собирать из исходников. Да, с php 5.4 работает только dev версия eAccelerator'а. Поэтому, будем брать прям с гитхаба.

wget https://github.com/eaccelerator/eaccelerator/tarball/master
mv master ea.tar.gz
tar zxf ea.tar.gz


Для того, чтобы собрать пакет нам нужны будут пакеты для разработки:
apt-get install build-essential


Ну, и пошло-поехало:

phpize
./configure
make
make install


Теперь нужно это приконнектить к php. Для этого, в каталоге /etc/php5/conf.d/ нужно сделать файлик eaccelerator.ini со следующим содержанием:

extension="eaccelerator.so"
eaccelerator.shm_size="16"
eaccelerator.cache_dir="/var/cache/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"


eAccelrator в отличии от APC работает и не падает.

День близится к концу
И пока он не закончился, осталось сделать действия из предыдущей статьи.

В процессе, я заметил, что в логах nginx'а (да, их очень полезно читать, они находятся /var/log/nginx) иногда проскакивает warning:
828#0: *6 an upstream response is buffered to a temporary file /var/cache/nginx/fastcgi_temp/1/00/0000000001


это значит, что nginx'у не хватает буфера по умолчанию, чтобы вместить весь ответ от php. Увеличим буфер:

fastcgi_buffers 4 256k;
fastcgi_busy_buffers_size 256k;
fastcgi_temp_file_write_size 256k;


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

#!/usr/bin/env python

import os;

web_path="/var/www/"

host_name = raw_input("Enter host name: ");
default_user = raw_input("Enter default user: ");
os.system('mkdir ' + web_path + host_name);
os.system('groupadd ' + host_name)
os.system('usermod -a -G ' + host_name + ' ' + default_user)
os.system('chown -R root:' + host_name + ' ' + web_path + host_name)
os.system('chmod 2775 /var/www/' + host_name + ' ' + web_path + host_name)
os.system('find '+web_path + host_name+' -type d -exec chmod 2775 {} +')
os.system('find '+web_path + host_name+' -type f -exec chmod 0664 {} +')


После этого всего, я перетащил tqfp.org на новосозданный сервер. Оказалось, что открывается только index.php, а остальное — нет. Естественно, ведь на хостинге у меня был apache и в .httaccess было правило для перенаправления всех запросов на index.php

Добавляем похожее правило для nginx (/etc/nginx/conf.d/tqfp.org.conf):
location / {
    index index.php index.html;
    if (!-e $request_filename) {
        rewrite ^ /index.php last;
        break;
    }
}


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

CentOS vs Debian
Итак, я хорошо потыкался в обоих пакетах. Честно говоря, CentOS мне понравилась больше. Ощущается, что система продуманней и логичнее построена. Естественно, это большое ИМХО. Debian шустрее, намного шустрее. Этим и был обусловлен выбор в сторону debian. Конечно, возможно, это особенность тех образов, что дает ihc, но мучиться и устанавливать ОС c нуля мне не очень то хотелось.

В любом случае, я очень рад тому, что появился свой сервер. Теперь можно будет сделать много хорошего :)

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


stderr: "Unable to open primary script: /localhost/phpMyAdmin/scripts/setup.php (No such file or directory)"
stderr: "Unable to open primary script: /localhost/phpmyadmin/scripts/setup.php (No such file or directory)"
stderr: "Unable to open primary script: /localhost/pma/scripts/setup.php (No such file or directory)"
stderr: "Unable to open primary script: /localhost/myadmin/scripts/setup.php (No such file or directory)"
stderr: "Unable to open primary script: /localhost/MyAdmin/scripts/setup.php
...


кто-то упорно пытается найти phpMyAdmin.

4 комментария

avatar
Поздравляю с приобретением! Удачного дальнейшего развития :)
avatar
Спасибо :) Правда, с сервером приходится админом становиться. Вот сейчас — почту пытаюсь запустить. Красноглазым уже стал, осталось только бороду отрастить.
avatar
И свитер одеть еще надо )
avatar
Само-собой :) Он уже потихоньку сквозь кожу проступать начал :)
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.