среда, 31 июля 2013 г.

Костыли при деплое на ArchLinux

И так у нас есть живой настроенный сервак, который может нам говорить привет. Даже с песочницей. Не плохо, но при использовании его для разработки придется делать много телодвижений, что бы поднять то, что упало, из-за нашей неопытности/невнимательности/какой-нибудь фигни.
Как говорится, "фрезеруй, пока молодой"!
Так как у нас есть Арч с его systemctl, который может как император в висги погонять вассалами, но еще он умеет их просто релоадить. Особенно круто, что он умеет их релоадить после изменения контента в указанных директориях.
Костыль c названием uwsgi@.service кладем в /etc/systemd/system
[Unit]
Description=uWSGI worker
After=syslog.target

[Service]
ExecStartPre=/bin/mkdir -p /run/uwsgi
ExecStartPre=/bin/chown http:http /run/uwsgi
ExecStart=/usr/bin/uwsgi --ini /etc/uwsgi/apps/%i.ini
ExecReload=/bin/kill -HUP $MAINPID
KillSignal=SIGINT
Restart=always
Type=simple
StandardError=syslog

[Install]
WantedBy=multi-user.target
Он умеен останавливать и перезапускать инстанс ручками.
systemctl start uwsgi@proj_name
systemctl enable uwsgi@proj_name
systemctl stop uwsgi@proj_name
systemctl reload uwsgi@proj_name
А вот что бы он сам перезапускался по обновлению содержимого папки/файлов, нужно рядом нагородить еще uwsgi-autoreload@.service
[Unit]
Description=uWSGI worker autoreloader
After=syslog.target

[Service]
ExecStart=/usr/bin/systemctl reload uwsgi@%i
Type=oneshot
StandardError=syslog
RemainAfterExit=no

[Install]
WantedBy=multi-user.target
и uwsgi-autoreload@.path
[Unit]
Description=uWSGI worker path watcher
After=syslog.target

[Path]
PathChanged=/srv/http/%i/src

[Install]
WantedBy=multi-user.target

systemctl enable uwsgi@proj_name
start uwsgi-autoreload@proj_name
systemctl enable uwsgi-autoreload@proj_name
Это выглядит неплохо, но любители убунты могут не улыбнуться на этом моменте, так как вместо systemctl у них init.d и таких возможностей у них нет. Посему надо бы рассмотреть более кросплатформенный вариант, а это решение я подсмотрел у друга, и большую часть извращений которые использованы выше понять я даже не пытался - это просто работает :)