Развёртывание сервера на Debian 8 “jessie”
Это список достаточных и опциональных вещей, которые помогут поставить сервер для работы с 1С-Битрикс. Сразу скажу, что если возникнут вопросы — вы можете писать их в комментарии.
- Требования к серверу:
-
- он должен быть полностью совместимым с 1С-Битрикс. Читайте как «высокие требования по качеству»;
- на нём должны поддерживаться квотирование и контейнеризация;
- двухуровневая архитектура веб-сервера (кэширующий прокси и PHP-обработчик), желательно, связи двух типов (NginX + Apache и NginX + PHP-FPM);
- PHP нескольких версий (5.3 и 5.6 — обязательно), кэширование PHP — обязательно;
- поддержка безопасного соединения (https), несколько IP;
- рабочая система бэкапирования;
- поддержка FTP, SSH (пользовательский доступ до серверов), PHPMyAdmin;
- возможность делегирования на сервер доменов;
- программное сжатие передаваемых данных.
- Разделы в разработке:
-
- Установка RAID и настройка ФС не для Hetzner;
- NginX + PHP-FPM;
- Шаблонизация NginX для SSL-сертификатов;
- Скрипт для оперативной установки бэкапирования.
Здравствуйте, меня зовут...
Доброго времени суток, меня зовут Дмитрий, я являюсь техническим специалистом студии Клондайк. Не так давно мы подняли новый сервер и, пока поднимали, поняли, что есть вещи, описанные Виктором в цикле статей, которые являются либо устаревшими, либо просто не подходят для решения поставленной задачи (вы же смотрели «требования к серверу»?). Поэтому было принято решение законспектировать всё, что мы делаем и устанавливаем, для того, чтобы в конечном итоге создать не только базу для будущих серверов, но также помочь разобраться с этим вопросом техническим специалистам других студий и, разумеется, выслушать конструктивную критику.
Немного о принципах Клондайк
На данный момент хостинг является вспомогательной услугой студии, но всё большее количество жалоб клиентов на их хостинг, который не соответствует требованиям 1C-Битрикс, а также некоторая недобросовестность в поведении хостеров заставляет нас всё больше работать в эту сторону. И за многолетний опыт работы мы выработали несколько правил, которых придерживаемся.
- 1. Нет ограничений добросовестным клиентам.
- Это первый и основной принцип. Если клиент работает с нами и хочет продвигать свой бизнес, то мы не имеем права ограничивать его и себя. Мы выполняем качественную работу в рамках КИМ, а потому всячески помогаем дополнительными ресурсами. Этот безлимит предоставляется на доверии, так как видим клиента в лицо. Есть лишь одно ограничение — если обнаружена подозрительная активность, а клиент не отреагировал, мы отключаем его для проведения быстрой проверки на вредоносный код. Безопасность важнее.
- 2. Бэкапы делаются вне зависимости от пожеланий клиента.
- Нет ничего хуже, чем потерять сайт из-за глупой ошибки. Бэкапирование ведётся с повышенным интервалом, а также задаётся персонально для некоторых сайтов. Бэкапы хранятся на нескольких серверах, что даёт возможность быстро развернуть сайт на машине, на которой он уже стоял, либо быстро перенести на один из рабочих серверов из хранилища (бывает всякое).
Пожалуй, это два основных принципа. «Мы зарабатываем деньги за то, что даём клиенту зарабатывать деньги».
Выбираем щенка
Основным параметром для выбора веб-сервера является скорость ввода-вывода. В режиме повышенной нагрузки мы выяснили, что нас файловая система ограничивает гораздо больше, чем процессор или оперативная память.
В нашем случае требовалась схема для постоянных клиентов, потому наш выбор остановился в пользу твёрдотельных накопителей (примерно 10-кратная скорость работы с диском) и достаточно большое количество ОЗУ (так как туда требовалось большое количество серверных клиентов и выгрузка многих файлов в оперативную память).
Первые шаги
Hetzner
Итак, у нас на руках имеется логин, пароль и адрес нашего сервера. Используем консоль, заходим, первое, что видим — Rescue. Это облегчённая версия установщика системы, потому ей воспользоваться будет рациональнее всего.
Появляется окно установщика.
Выбираем то, что вам больше нравится, с чем вы привыкли работать. Мой выбор за debian 8 Jessie; debian имеет огромные репозитории с пакетами и показывает себя как крайне стабильная система. Debian 8 — это последний релиз системы, был протестирован и провалов замечено не было.
После этого выпадает окно настройки дисков.
SWRAID — это программный рэйд, который можно настроить, пожертвовав небольшим количеством IO. Либо вы можете заказать аппаратный контроллер, который повысит надёжность и скорость работы с рейдом. Для того, чтобы выбрать тип рейда, вам нужно понять, чем вы готовы пожертвовать. Выбирать приходится между тремя сторонами: скорость, отказоустойчивость, цена.
- Два диска:
-
- Raid 0 — два и более дисков соединены последовательно. N*100% скорость чтения, N*100% скорость записи, 100% — «полезная цена», при выходе из строя любого диска становится недееспособным.
- Raid 1 — два и более чётное количество дисков соединены параллельно. 100%*N скорость чтения, N/2 * 100% скорость записи, 1/N — «полезная цена», при выходе из строя (N-1) дисков будет работать.
- Три диска:
-
- Raid 0
- Raid 1
- Raid 5 — три и более дисков используются последовательно, один из них содержит контрольную информацию. (N-1)*100% скорость чтения, >(N-1)*100% скорость записи, (N-1)*100% — полезная цена, способен работать
- Четыре диска:
-
- Raid 10 — четыре диска ставятся как параллельный массив из двух последовательных. 400% скорость чтения, 200% скорость записи, 50% — полезная цена, отказоустойчивость: 1 (33%)- 2 (67%) диска
- Raid 6 — два диска содержат контрольную информацию, несколько невыгодно на варианте 4 диска, так как при той же полезной цене увеличивает надёжность только на 1\3, теряя половину скорости чтения и чуть менее половины — скорости записи.
Сейчас я ставлю сервер с двумя дисками и практически уверен, что Raid 0 рассматриваться даже не должен. Сервер — это не место для лотереи. Все получают деньги тогда, когда всё работает.
Некоторые нюансы: я отключил журналирование и добавил несколько опций, характерных для SSD, чтобы чуть дольше продлить его жизнь и убрать лишнее ожидание ответа файловой системы. Учитывая системы защиты от перебоев и обесточивания Hetzner, считаю это разумным решением.
- Отключаем журналирование
-
tune2fs -O ^has_journal /dev/md1
Выставляем поддержку TRIM для SSD (если у вас не SSD — пропускаем).
Заходим в /etc/fstab
и прописываем /dev/md1
последней опцией discard
.
Если очень хочется, можно собрать другое ядро, но этот процесс необязателен.
Чистое сознание вычислительной машины
Итак, для начала необходимо установить инструменты, которые нам понадобятся для установки и мониторинга, а также забэкапить необходимые конфиги.
apt-get update apt-get upgrade apt-get install htop mc vim atop iotop
Сделаем подсветку синтаксиса в vim — отныне это делается в файле /etc/vim/vimrc
Раскомменчиваем строку syntax on
, удаляя кавычки. Начинаем творить ужас.
- Так как файл будет генерироваться полностью, ровно, как и все конфигурационные файлы, затрагиваемые ispconfig3, мы сделаем бэкап.
-
cp /etc/network/interfaces /etc/network/interfaces_old_ok
В файле /etc/hosts
вы можете настроить отображение сервера. Рядом с IP адресом, который вам выдал провайдер, вы можете найти ваш технический адрес.
- Что-то вроде:
-
188.138.84.XXX proXXX.dedicatedpanel.com proXXX
Я приобрёл отдельно домен для данного сервера и у меня не было технического адреса в файле, потому смело оставлю его первым.
- Если вы совершали изменения этого файла, то необходимо перезагрузить службу networking:
-
/etc/init.d/networking restart
- Если требуется, изменяем имя сервера на имя домена:
-
echo domenservera.ru > /etc/hostname
- Проверяем:
-
hostname
- Должно получиться следующее:
-
hostname domenservera.ru
- Теперь поставим слежение за состоянием дисков:
-
apt-get install smartmontools
Ставим в список enable_smart те винты, за которыми необходимо следить. В моём случае это два винта с RAID 0, SSD, потому будут /dev/sda
и /dev/sdb
. Если вы не уверены, какие адреса используются у вас - fdisk -l
вам в помощь.
- После этого смело:
-
vi /etc/default/smartmontools
- Для синхронизации часового пояса установим Network Time Protocol и свежую версию tzdata, сконфигурированную под наши нужды:
-
apt-get install ntp ntpdate sudo dpkg-reconfigure tzdata
Выбираем необходимый часовой пояс. Для меня это — Europe/Moscow
- Устанавливаем необходимый софт для ISPConfig3:
-
apt-get install postfix postfix-mysql postfix-doc mysql-client mysql-server courier-authdaemon courier-authlib-mysql courier-pop courier-pop-ssl courier-imap courier-imap-ssl libsasl2-2 libsasl2-modules libsasl2-modules-sql sasl2-bin libpam-mysql openssl courier-maildrop getmail4 rkhunter binutils sudo php5-curl
- Общий тип настройки почты: — Интернет-сайт
- Система почты имя: — domenservera.ru
- Новый пароль для MySQL «корень» Пользователь: — Ваш_root_пароль_SQL
- Повторите пароль для MySQL «корень» Пользователь: — Ваш_root_пароль_SQL
- Создание папок для веб-администрирования? — нет
- SSL сертификат требуется — OK
Далее мы комментируем строку, которая привязывает mysql к определённому адресу.
- Предварительно сохраняем файл
-
cp /etc/mysql/my.cnf /etc/mysql/my.cnf_old_ok sed -i "s/bind-address/#bind-address/" /etc/mysql/my.cnf
Для чего это делается? Для того, чтобы потом можно было добавить разрешённый адрес, чтобы работать с БД напрямую.
- Проверяем, поменялось ли
-
cat /etc/mysql/my.cnf | grep bind-address
- Должны получить вот такой ответ
-
#bind-address = 127.0.0.1
- Далее перезапускаем MySQL
-
service mysql restart
- Проверяем, висит ли служба на одном из портов
-
netstat -tap | grep mysql
- Получаем что-то подобное:
-
tcp 0 0 *:mysql *:* LISTEN 22222/mysqld
Создание почтовых сертификатов
Нам необходимо создать почтовые сертификаты, которые создаются от имени домена, а не localhost.
Для этого меняем файлы vi /etc/courier/imapd.cnf
, vi /etc/courier/pop3d.cnf
.
В них достаточно поменять запись CN=localhost
на CN=вашдомен
, но вы можете поменять и всю информацию.
- Такие настройки стоят у меня:
- А далее удаляем старые сертификаты, создаём новые и перезапускаем службу:
-
rm -f /etc/courier/imapd.pem rm -f /etc/courier/pop3d.pem mkimapdcert mkpop3dcert /etc/init.d/courier-imap-ssl restart /etc/init.d/courier-pop-ssl restart
Установка антивируса, Apache, PHP, FTP и BIND
- Установка антивируса и антиспама
-
apt-get install amavisd-new spamassassin clamav clamav-daemon zoo unzip bzip2 arj nomarch lzop cabextract apt-listchanges libnet-ldap-perl libauthen-sasl-perl clamav-docs daemon libio-string-perl libio-socket-ssl-perl libnet-ident-perl zip libnet-dns-perl
- Далее останавливаем службу spamassasin, если место в ОЗУ критично:
-
/etc/init.d/spamassassin stop update-rc.d -f spamassassin remove
- Установка Apache и PHP
-
apt-get install apache2 apache2.2-common apache2-doc apache2-mpm-prefork apache2-utils libexpat1 ssl-cert libapache2-mod-php5 php5 php5-common php5-gd php5-mysql php5-imap phpmyadmin php5-cli php5-cgi php5-fpm libapache2-mod-fcgid apache2-suexec php-pear php-auth php5-mcrypt mcrypt php5-imagick imagemagick libruby
Некоторые библиотеки могут к этому времени устареть, потому либо найдите необходимые с помощью apt-cache search
, либо допишите в самом конце этой длинной строчки --fix-missing
через пробел.
- Будут заданы два вопроса:
-
- Какой сервер установить? — Apache2
- Нужно ли создавать базу для PHPMyAdmin? — нет
- Добавляем модули Suexec в Apache:
-
a2enmod suexec rewrite ssl actions include a2enmod dav_fs dav auth_digest
- Перезапускаем Apache:
-
service apache2 restart
- Устанавливаем FTP-сервер:
-
apt-get install pure-ftpd-common pure-ftpd-mysql cat /etc/default/pure-ftpd-common |grep STANDALONE_OR_INETD
- Должны увидеть:
-
STANDALONE_OR_INETD=standalone
- Если нет, то правим файл и меняем на
standalone
-
vi /etc/default/pure-ftpd-common
- Проверяем, всё ли закомментировано.
-
vim /etc/inetd.conf
Если нет — комментируем. - Если делали изменения в данных файлах, то рестартуем демона, если нет пропускаем.
-
service inetd restart
Теперь мы делаем наше FTP-соединение защищённым.
- Для этого включаем его в настройки:
-
echo 1 > /etc/pure-ftpd/conf/TLS
- Создаём папку для сертификатов, а далее — сертификат, ответив на несколько вопросов
-
mkdir -p /etc/ssl/private/ openssl req -x509 -nodes -days 7300 -newkey rsa:2048 -keyout /etc/ssl/private/pure-ftpd.pem -out /etc/ssl/private/pure-ftpd.pem
Мой вариант ответов
- Далее ставим Bind9 — днс-сервер. Его огромный плюс в том, что он крайне стабилен, и настройка используется «коробочная».
-
apt-get install bind9 dnsutils
Установка Jailkit
Если мы планируем давать своим пользователям ssh доступ, то нам понадобится jailkit.
apt-get install build-essential autoconf automake libtool flex bison debhelper devscripts cd /tmp wget http://olivier.sessink.nl/jailkit/jailkit-2.19.tar.gz tar -xvzf jailkit-2.19.tar.gz cd jailkit-2.19 ./configure make make install cd /tmp rm -rf jailkit-2.*
Установка fail2ban
Есть два варианта:
- 1. Лишь бы было
-
apt-get install fail2ban
- 2. Специальная настройка от хабравчанина
-
cd /tmp wget https://github.com/sebres/fail2ban/archive/ban-time-incr-debian.zip unzip fail2ban-ban-time-incr-debian.zip cd fail2ban-ban-time-incr-debian/ python setup.py install cp files/debian-initd /etc/init.d/fail2ban systemctl --system daemon-reload service fail2ban start
Отсюда копируем конфиги, либо пользуемся скриптом.
Наконец-то ISP
Устанавливаем панель
Достаточно сложно её установить не сохраняя локальную копию где-то, чтобы потом залить на сервер. Но мы скопировали одну из сборок ISP на наш сервер, можете им воспользоваться
cd /tmp wget ks04.ru/ISPConfig-3.0.5.4p8.tar.gz tar -xzvf ISPConfig-3.0.5.4p8.tar.gz cd ispconfig3_install php install/install.php
Далее отвечаем на вопросы
В моём случае это было 5 раз Enter, пароль от ДБ, дважды Enter.
Дальше при создании SSL будут, в общем-то, вопросы, которые уже задавались. Пример тут.
После установки можно зайти по адресу http://ваш_ip:порт_ISP
, где порт_ISP
- это порт, который вы указали последней настройки испконфига.
У вас откроется окно ISP, логин и пароль совпадают: admin admin (при первом заходе вы сможете сменить его во вкладке Tools — Password and Language, там же поменять язык).
- Создадим правило для фаервола:
-
System - Firewall Add Firewall record.
Убираем из списка по умолчанию порт 3306
- Финишная прямая:
-
sed -i 's/80/82/g' /etc/apache2/ports.conf sed -i 's/:80/:82/g' /etc/apache2/sites-available/default sed -i 's/:80/:82/g' /etc/apache2/sites-available/ispconfig.conf service apache2 restart
- Проверяем, на каком порту висит:
-
netstat -tunap | grep apache2 tcp6 0 0 :::8080 :::* LISTEN 3044/apache2 tcp6 0 0 :::8081 :::* LISTEN 3044/apache2 tcp6 0 0 :::82 :::* LISTEN 3044/apache2 tcp6 0 0 :::443 :::* LISTEN 3044/apache2
Таким образом, мы устанавливаем apache2 на 82й порт, а 80й будет слушать NginX.
- Далее ставим NginX:
-
apt-get install nginx apt-get install libapache2-mod-rpaf IP=$(ifconfig | grep inet | grep -v inet6 | grep -v 127.0.0.1 | cut -d: -f2 | awk '{printf $1"\n"}') && echo "RPAFsethostname On" >> /etc/apache2/apache2.conf && echo "RPAFproxy_ips 127.0.0.1 $IP" >> /etc/apache2/apache2.conf
Последняя строка добавляет правильный IP в модуль для Apache
- Далее нам необходимо поменять несколько конфигурационных файлов:
-
/etc/nginx/nginx.conf /etc/nginx/sites-available/default /usr/local/ispconfig/server/plugins-available/apache2_plugin.inc.php /usr/local/ispconfig/server/plugins-available/apps_vhost_plugin.inc.php /usr/local/ispconfig/server/conf/nginx_reverse_proxy_plugin.vhost.conf.master /usr/local/ispconfig/server/plugins-available/nginx_reverse_proxy_plugin.inc.php /usr/local/ispconfig/server/conf-custom/vhost.conf.master
- Если вам не хочется делать это вручную, то вы на меня чем-то похожи:
-
cd /tmp wget ks04.ru/laststepfiles.tgz cd / tar -xzvf /tmp/laststepfiles.tgz chmod 750 /usr/local/ispconfig/server/conf/nginx_reverse_proxy_plugin.vhost.conf.master /usr/local/ispconfig/server/plugins-available/apache2_plugin.inc.php /usr/local/ispconfig/server/plugins-available/apps_vhost_plugin.inc.php /usr/local/ispconfig/server/conf/nginx_reverse_proxy_plugin.vhost.conf.master /usr/local/ispconfig/server/plugins-available/nginx_reverse_proxy_plugin.inc.php /usr/local/ispconfig/server/conf-custom/vhost.conf.master chown ispconfig:ispconfig /usr/local/ispconfig/server/conf/nginx_reverse_proxy_plugin.vhost.conf.master /usr/local/ispconfig/server/plugins-available/apache2_plugin.inc.php /usr/local/ispconfig/server/plugins-available/apps_vhost_plugin.inc.php /usr/local/ispconfig/server/conf/nginx_reverse_proxy_plugin.vhost.conf.master /usr/local/ispconfig/server/plugins-available/nginx_reverse_proxy_plugin.inc.php /usr/local/ispconfig/server/conf-custom/vhost.conf.master ln -s /usr/local/ispconfig/server/plugins-available/nginx_reverse_proxy_plugin.inc.php /usr/local/ispconfig/server/plugins-enabled/nginx_reverse_proxy_plugin.inc.php
Оставить комментарий
Комментарии (27)
Оставить комментарий