vagrant + ubuntu(16.04 LTS)内のuwsgiをsystemdで自動起動する

「vagrant + ubuntu(xenial) + nginxでpythonのwebアプリの実行環境をつくる」の続き。

vagrant upでuwsgiも自動起動してほしい。

※ubuntuバージョンは16.04 LTS Xenial

ドキュメントどおりに設定すればいい。

参考)http://uwsgi-docs.readthedocs.io/en/latest/Systemd.html
※ここを参考に作業したが、結論から言うとうまく行かなかった。
何故うまくいかなかったのかは、下部に記載する。

ひとまず、上記リンク先を参考に、どのように設定を行ったかが以下。

下記内容で/etc/systemd/system/emperor.uwsgi.serviceを作成・配置する。
※ExecStartのパスは、各自環境のuwsgiバイナリと、iniファイルを指定する。

[Unit]
Description=uWSGI Emperor
After=syslog.target

[Service]
ExecStart=/root/uwsgi/uwsgi –ini /etc/uwsgi/emperor.ini
# Requires systemd version 211 or newer
RuntimeDirectory=uwsgi
Restart=always
KillSignal=SIGQUIT
Type=notify
StandardError=syslog
NotifyAccess=all

[Install]
WantedBy=multi-user.target

で、
sudo systemctl start emperor.uwsgi.service
を実行し、pstreeコマンドなどでuwsgiが実行出来ている事を確認したら、
sudo systemctl enable emperor.uwsgi.service
を実行すれば、ubuntu起動時にuwsgiが指定のiniファイルの設定に従って起動する。

しかし、うまく行かなかった。

【原因】
emperor.uwsgi.serviceのExecStartで指定したuwsgiバイナリへのパスは、
vagrantのsynces_folderで指定したディレクトリ内のパスだった。
systemdでuwsgiを起動しに行くタイミングでは、まだubuntu内にそのディレクトリが存在しない状態っぽい。

uwsgiバイナリとiniファイルをubuntu内のsynces_folder指定ディレクトリの外に出して、
ExecStartを指定しなおしてやると、うまく起動されていた。

コレ使えば一発だったっぽい。

あとで気づいたが、
https://github.com/jcalazan/ansible-django-stack
これを使わせてもらえば一発でいい感じに環境構築してくれた。

インフラ周りの設定とか気になって調べてるといつまでもアプリ開発に入れないので、
こういうのでサクッと開発環境を整えて、
出来たらどこかのpaasサービスで本番デプロイするのがいいな、と思いました。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です