№ 8544 В разделе
Sysadmin
от October 12th, 2017,
В подшивках: PHP, Unit
У меня целый гребаный зоопарк из разных версий php на домашнем сервере и мне это порядком надоело. Что можно сделать? Можно скинуть раритетное барахло в unit контейнеры, поднять Nginx Unit и работать уже с приложениями, а не кормить все старые проекты одному php-fpm’у. В настоящее время есть поддержка только одной точки входа, но в будущем создатели побожились, что сделают нормальный роутинг (update: сделали). С установкой Nginx Unit любой дурак справится благодаря отличному мануалу здесь, рассасывать тут я его не буду.
Вот готовых config файла для unit:
А теперь давайте поговорим о настройке Unit. Допустим, у вас есть невероятно важная программа, выводящая информацию об установленном php в браузер и лежит она в /var/www/info/info.php
.
Теперь сделаем конфиг для вашей невероятно важной программы вывода информации о php
{ "listeners":{ "*:8300":{ "application":"phpinfoprogram" } }, "applications":{ "phpinfoprogram":{ "type":"php", "workers":2, "root":"/var/www/info", "index":"info.php" } } }
Напоминаю, что это ваш самый первый конфиг, а в будущем вам придется сначала выгрузить из unitd текущий, дополнить его и загрузить вновь.
Выгрузка в файл curl --unix-socket /var/run/control.unit.sock http://localhost/ > unitd.json
Загрузка из файла в unitd curl -X PUT -d @unitd.json --unix-socket /var/run/control.unit.sock http://localhost/
Здесь можно подробнее прочитать об управлении конфигурацией. Надеюсь, кто-нибудь не ленивый скоро создаст красивую веб морду для него.
Теперь можно посмотреть открытые порты и видеть ваше невероятно важное приложение внутри LXC контейнера на порту 8300
root@nginx-unit:/# netstat -tlpn|grep unit tcp 0 0 0.0.0.0:8300 0.0.0.0:* LISTEN 175/unit: router
Теперь в nginx достаточно добавить location, указывающий на ваше приложение
location /info { proxy_pass http://10.0.2.23:8300; proxy_set_header Host $host; }
Один Nginx Unit может держать много приложений и открытых портов. Допустим, у вас есть два LXC контейнера для приложений на PHP 5.6 и 7.0. Устанавливаете обычный php без всяких fpm в ваши контейнеры, все нужные модули и ваши приложения с разными версиями php уже никогда не пересекутся и не будут конфликтовать или еще как-нибудь парить мозг при обновлениях. Конечно же, не стоит валить все ваши проекты в одно место. Лучше разделить их по разным контейнерам в зависимости от контекста.
Fortune cookie: Today's spam: knock your girls boots off in 60 seconds
Leave a Reply