Установка и настройка VPS с CentOS 6.x парой команд
Приветствую, Хабр! Для своего продукта я сделал инсталлятор на чистый VPS с CentOS 6.x и оперативной памятью 512MB+. Это такой VPS, который можно приобрести у DigitalOcean.com за $5 в месяц. Но инсталлятор получился довольно универсальный, и его можно форкнуть с гитхаба, чтобы исключить ненужные вам компоненты.
В качестве панели управления была выбрана VestaCP, о которой я раньше и не слышал, так как несколько лет слепо пользуюсь cPanel/WHM, в последнее время вместе с CloudLinux. Но это платная панель, и CloudLinux тоже платный, и последнее дело просить у пользователей еще за что-то платить, кроме как за продукт.
Познакомившись с VestaCP, мне она очень понравилась, хоть и ее нужно еще дорабатывать. Например, нет никакой документации по консольным командам v-* и приходится методом тыка определять, какие же все таки данные нужно подавать на вход. Иногда это не очевидно по синопсису использования команды, если ее вызвать без параметров.
Итак, представим что у нас чистый VPS, от DigitalOcean, FirstVDS или Linode. Про FirstVDS хочу сразу оговориться, что лучше выбирать их пакет с виртуализацией KVM, так как технология OpenVZ (которая самая дешевая у FirstVDS) не позволяет включать swap-файлы, и насколько я читал, swap выставляется на уровне менеджера виртуальных машин OpenVZ, но FirstVDS в документации явно указывают, что у них нет никакого swap, и что если приложению кратковременно потребуется больше памяти, чем выделено физически, оно будет прибито и сервер может зависнуть.
Для инсталлятора я создал репозиторий на GitHub: https://github.com/jetapps-eu/publigator-vps-installer
Чтобы начать установку, заходим по SSH на сервер, и выполняем команду:
curl -O https://raw.githubusercontent.com/jetapps-eu/publigator-vps-installer/master/publigator-install-step1.sh && bash publigator-install-step1.sh Эта команда скачает конфигуратор, спросит вас имя хоста, e-mail на который будет отправлены данные доступа к VestaCP, имя домена, который будет создан автоматически для пользователя admin, а также IP для этого домена. Кроме этого будет спрошено имя БД, пользователя и пароль, которые также будут созданы в процессе инсталляции для пользователя admin.
После этого будут установлены репозитории EPEL и RPMForge, и произведено обновление системы, а также установлены wget, htop, mc, а также группа «Development Tools».
Кроме этого будет создан swap-файл /swapfile на 512MB и включен временно, без прописывания в /etc/fstab. Дальнейшие шаги для swap-файла вы можете найти в статье на DigitalOcean.
Далее будет удален httpd, если он есть. В некоторых образах, которые используют VPS-провайдеры, он установлен по умолчанию.
В конце шага 1 будет установлена контрольная панель VestaCP, и вы увидите данные доступа к ней в консоли. А также получите их на e-mail.
По умолчанию VestaCP устанавливает PHP 5.4.x, Apache 2.2.x, MySQL 5.5.x, Nginx как прокси. Если у вас сервер с 1GB+ RAM, то также будут установлены SpamAssassin и ClamAV, а также будет установлен FGCID для Apache, и добавлен соответствующий шаблон для Apache.
В моем репозитории есть специальный шаг publigator-fcgid-install.sh, который не используется по умолчанию, но который вы можете использовать, если форкните репозиторий. Он позволяет установить fgcid и шаблон с настройками тайм-аутов и ресурсов, а также устанавливает оптимизированный fcgid-starter для серверов с малым количеством памяти, в частности параметр PHP_FCGI_CHILDREN экспортируется без значения, как советуется на странице mod_fcgid.
Далее приступаем к шагу 2:
curl -O https://raw.githubusercontent.com/jetapps-eu/publigator-vps-installer/master/publigator-install-step2.sh && bash publigator-install-step2.sh По умолчанию на этом шаге будут сделаны следующие действия:
Устанавливает пакет mysqlnd для PHP вместо обычного php-mysql. Может вам это и не нужно, но в моем случае Yii2 на данный момент работает некорректно с обычным libmysql драйвером, в части получения значений из полей типа BIT. Yii2 ожидает уже преобразованное значение 0 или 1, которые соответствуют ord (48) и ord (49), а libmysql возвращает RAW битовое значение, которое соответствует ord (0) и ord (1) соответственно. Возникает непонимание. Устанавливает последний IonCube Loader. Обновляет библиотеку ICU до версии 54.1 Устанавливает обновленный php-intl версии 3.0 из PECL, чтобы поддерживать новый ICU (чего можно достигнуть перекомпиляцией PHP, но в данном случае PHP установлен пакетом и проще обновить intl из PECL). Устанавливает расширения PHP из PECL: oauth, igbinary, pecl_http, imagick, geoip. Скачивает и устанавливает зависимости. Компилирует и устанавливает PHP-расширение opendkim, которое может использоваться в swiftmailer. Изменяет настройки /etc/php.ini: realpath_cache_size = 1M realpath_cache_ttl = 120 max_execution_time = 300 post_max_size = 32M default_charset = UTF-8 display_errors = On max_input_vars = 10000 upload_max_filesize = 32M Изменяет настройки /etc/my.cnf: wait_timeout=1800 interactive_timeout=1800 Создает дополнительные конфигурационные файлы NGINX для домена, в которых прописываются увеличенные таймауты. Скачивает, компилирует и устанавливает SuPHP 0.7.2 и зависимости для компилирования. Добавляет шаблоны для Apache и Nginx под это дело и добавляет хостинг-пакет с названием suphp. Увеличивает таймаут в /etc/httpd/conf/httpd.conf После этого идет шаг подготовки к установке моего продукта Publigator, но опять же вы можете форкнуть репозиторий и убрать ненужный вам шаг. Также в этом шаге:
Включается пакет suphp для пользователя admin, и также включается использование nginx для домена, с шаблоном suphp. Удаляется default.domain для пользователя admin Удаляются хостинг-пакеты palegreen, gainsboro, slategrey, которые VestaCP ставит по умолчанию. Итог После выполнения команд вы имеете VPS с CentOS 6.x, VestaCP в качестве панели управления, Apache 2.2.x, PHP 5.4.x, Nginx в качестве прокси, SuPHP в качестве режима работы PHP, обновленный ICU и php-intl, а также установленные PECL-пакеты oauth, igbinary, pecl_http, imagick, geoip и PHP-расширение opendkim, и немного настроенный php.ini.
Если вы будете форкать репозиторий, то обратите внимание на переменную WEBSOURCE в файлах publigator-config-tpl.sh и publigator-install-step1.sh — она должна ссылаться на ваш репозиторий.
Также шаг установки publigator-suphp-0.7.2-install.sh можно заменить шагом publigator-fcgid-install.sh.
Я планирую развивать репозиторий и добавить поддержку Debian и Ubuntu. Вопросы вы можете задавать в комментариях или в Issues на гитхабе.
Спасибо за внимание!