Пользователь
0,0
рейтинг
18 декабря 2014 в 15:57

Администрирование → Установка и настройка VPS с CentOS 6.x парой команд с VestaCP

Приветствую, Хабр!

Для своего продукта я сделал инсталлятор на чистый 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 на гитхабе.

Спасибо за внимание!

UPD 20/12/2014



Установку SuPHP я убрал из стандартного шага, т.е. остается mod_ruid2, который устанавливает VestaCP. Вместо этого я сделал несколько вариантов шага 2:

curl -O https://raw.githubusercontent.com/jetapps-eu/publigator-vps-installer/master/publigator-install-step2-suphp.sh && bash publigator-install-step2-suphp.sh


Это соответственно названию вариант с SuPHP.

Компилируется и устанавливается SuPHP 0.7.2. Добавляется хостинг-пакет suphp и добавляются шаблоны suphp для Apache и Nginx. Добавляется конфиг для SuPHP: /etc/suphp.conf и добавляется конфиг для Apache: /etc/httpd/conf.d/php.suphp.conf

Для пользователя admin изменяется хостинг-пакет на suphp, добавляется поддержка Nginx для созданного домена, и выставляются шаблоны suphp для Apache и Nginx для созданного домена.

curl -O https://raw.githubusercontent.com/jetapps-eu/publigator-vps-installer/master/publigator-install-step2-fcgid.sh && bash publigator-install-step2-fcgid.sh


Этот вариант с установкой Fcgid (сама установка производится только на микросерверы с < 1GB RAM, так как Vesta производит установку в других случаях самостоятельно). Создается хостинг-пакет phpfcgid и добавляются шаблоны pbl_phpfcgid для Apache и Nginx.

Для пользователя admin изменяется хостинг-пакет на phpfcgid, добавляется поддержка Nginx для созданного домена, и выставляются шаблоны pbl_phpfcgid для Apache и Nginx для созданного домена.

В шаблонах Apache установлены следующие параметры mod_fcgid:

FcgidBusyTimeout 900
FcgidIdleTimeout 900
FcgidIOTimeout   900
FcgidMaxRequestLen 104857600
FcgidMaxRequestInMem 128000000
FcgidMaxRequestsPerProcess 1000


И также копируется fcgi-starter со следующими параметрами:

#!/bin/sh
PHPRC=/usr/local/lib
export PHPRC
export PHP_FCGI_MAX_REQUESTS=1000
export PHP_FCGI_CHILDREN
exec  /usr/bin/php-cgi


Переменная PHP_FCGI_CHILDREN экспортируется без значения, чтобы сэкономить память.
Stepan Seliuk @TurtleSun
карма
3,0
рейтинг 0,0
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое Администрирование

Комментарии (25)

  • +5
    Опять curl + bash и запускаем неизвестные скрипты с удаленного сервера…

    И почему сразу php? Заголовок «Установка и настройка» звучит очень громко. Вы же ставите какие-то определенные пакеты.
    • –1
      Запускаем с GitHub, где можно посмотреть исходник. Или форкнуть и запускать со своего репозитория.
      • +1
        В чем проблема с комментарием? Или лучше копипастить на хабр инструкции с соседних блогов, выдавая за свои?
        • +1
          Вероятно потому, что вы прививаете пользователю опасное поведение (запуск скрипта без какой-либо его верификации из непроверенного источника).

          Это сродни написанию ./configure && make && make install в инструкции вместо сборки пакета (тем же checkinstall, если говорить про debian-based). C одной стороны «работает» (пока везет), с другой — bad practice.
          • +1
            А то пользователь (в среднем) понимает, какие команды он запускает по инструкциям с блогов? С одной стороны «мне нужен vps», с другой стороны «я только что узнал, что такое ssh». К тому же в посте предлагается установка в чистую виртуальную среду, а не себе на сервер под рутом.

            И также это подготовка к установке моего продукта. Я потеряю пользователей, если буду требовать слишком много. А запуск пары команд, это не сложно.

            Все равно что требовать не запускать установщик VestaCP, а копировать команду за командой. И все нельзя скопировать, так так применяются какие-то условия, немного bash-программирования.
            • 0
              Прекрасно вас понимаю, тоже недавно перешёл на curl + bash, когда устал наблюдать то что люди копируют не всю инструкцию по установке/меняют что-то в ней, а потом пишут в суппорт что у них продукт не совсем правильно работает.
  • 0
    Правильно выше заметили насчет заголовка, уж очень специфичный setup у вас.
    Не всем нужна панель как таковая, и уж тем более специфичный драйвер для связки php-mysql.

    Так что корректируйте заголовок, добавив туда все эти VestaCP, Yii2 и тд.
    • 0
      Ссылаюсь на статью habrahabr.ru/company/mailru/blog/234125/, где есть объяснение почему php-mysqlnd лучше чем просто php-mysql. VestaCP добавил в заголовок. Какая-то панель управления нужна большинству пользователей VPS, которые переходят с хостинга, и VestaCP является достойным и бесплатным, расширяемым вариантом.
      • 0
        она слишком легкая, если честно. мне больше понравилтся по функциональности ISPConfig, но, к сожалению, после понимания, вычитывания его кода и общения с разработчиками как он работает, мне стало понятно что проще написать свою панель :(
  • 0
    A чем это лучше вот этого — www.virtualmin.com/?

    тоже только запустить один инсталлятор — sudo wget software.virtualmin.com/gpl/scripts/install.sh и получается довольно мощный веб интрефейс к VPS
    • +1
      Вопрос не в том, лучше или хуже. В данном посте я не ставил цели сравнивать панели управления, это есть здесь habrahabr.ru/company/selectel/blog/239069/. В данном посте панель управления уже выбрана как VestaCP, и предоставлен инсталлятор этой панели и дополнительных компонентов в виде репозитория, который можно форкнуть и изменить под свои потребности.
  • 0
    GPL версия бесплатна (на неё и линк инсталлятора выше)
  • +1
    А зачем тут нужен Апач, да и тем более — на сервер с 512 оперативки? Одного Nginx хватит за глаза.
    • –2
      VestaCP еще не поддерживает связку nginx + php-fpm, но обещают в следующем релизе.
      • +1
        Я что-то не так сказал? В посте явно используется VestaCP и ее возможности. Если возможностей еще нет, то они не используются.
        • +1
          Вы каждый свой комментарий с минусом хотите уточнять? )

          Вообще в массовых панелях обычно делают все на базе классического LAMP т.к. создатели панелей стараются угодить как можно большему количеству пользователей.
          Предполагается что человек который выбрал Nginx + PHP-FPM и руками переписыал в конфиг энджинкса рерайт-правила из .htaccess с которыми обычно поставляются CMS то он знает как все это дело настраивать и ставить. Тем более что на сервере с 512Mb RAM будет жить минимум проектов и панель тут будет явно лишней.
          • +1
            Я предположил, а точнее ожидаю, что VestaCP внедрят nginx+php-fpm по человечески, т.е. чтобы все (или почти все) работало из коробки. PHP-процесс самой VestaCP панели кстати и так в режиме FPM. А если сделают конвертер rewrite engine правил для nginx конфига, будет вообще сказка)
            • 0
              Во многом благодаря своей гибкости одни и те же правила в nginx можно реализовать совершенно по-разному. Конечно есть несколько онлайн-утилит по конвертрованию правил, но не всегда после этого все заводится. Автоматом делать небезопасно =)
      • 0
        "Следующего релиза" уже два года как ждем…
  • НЛО прилетело и опубликовало эту надпись здесь
    • 0
      Обратите внимание, что дальше устанавливаются еще модули PHP, новая версия ICU компилируется и устанавливается, SuPHP и т.д. Если можно было бы обойтись одной командой, я не написал бы этот пост.
    • 0
      А какая панель тру/трёт?
      • 0
        я так понимаю, имелась в виду любая панель )
      • НЛО прилетело и опубликовало эту надпись здесь
        • –1
          Человечество, чтобы развиваться, сначала создает сложную (сложенную) вещь, а потом использует ее как простой кубик еще в более сложной системе (кубиков). Если каждый будет изобретать только кубики первого уровня, то некому будет из них строить систему второго уровня. Я согласен конечно, что вещи (реализации) время от времени нужно пересматривать, но только в связи с обратной связю от строительства производных систем (от работы конкретной вещи в рамках производной системы). Тогда становится видно, что реализовано хорошо, а что нужно исправлять.

          В VestaCP почти 300 консольных программ и плюс API, с помощью которых можно хорошо автоматизировать установку панели и работы с ней.

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.