やる気がストロングZERO

やる気のストロングスタイル

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サービスで本番デプロイするのがいいな、と思いました。