kuroの覚え書き

96の個人的覚え書き

flask runをデーモンサービスに

flaskで作ったwebアプリの起動を
python3 manage.py runserver
で行っていたが、このままではシステム立ち上げ時にそのまま起動できるようにならないので、uWSGIを介した起動をしないといけないのかなと思っていたが、flaskをpythonから読み込むのじゃなくてコマンドで起動できるようになっていることがわかった。

flask run

たったこれだけなんだけど、そのまえに環境変数を読み込んでおく必要がある。

コマンドラインから起動するだけなら

export FLASK_APP="./app/views/home.py"
export LC_CTYPE="en_US.UTF-8"

と打ってからflask runでいいわけだけど、daemonで起動するときには環境変数を読み込むための設定が必要となる。
/etc/sysconfig/以下に適当な名前で設定ファイルをおいておく必要がある。今回は'kuro'というファイルにしておく。内容は

FLASK_APP="./app/views/home.py"
LC_CTYPE="en_US.UTF-8"
_EOF_

その上でサービスとして起動するための設定を書く。
/etc/systemd/system/に
ngsseqdb.service
などの名前でファイルを作り

[Unit]
Description=python instance to serve ngsseqdb
After=network.target

[Service]
User=kuro
Group=kuro
EnvironmentFile=/etc/sysconfig/kuro
WorkingDirectory=/home/kuro/ngsseq/database
ExecStart=/home/linuxbrew/.linuxbrew/bin/flask run --host=192.168.1.10

[Install]
WantedBy=multi-user.target

こんな感じの内容を書く。

サービス起動は

sudo systemctl start ngsseqdb

止めるときはstop

システム立ち上げ時に自動起動するなら

sudo systemctl enable ngsseqdb

自動起動をやめるならdisable

なお、firewall-cmdでポートの穴を開けておかないと、外からアクセスできない。

$ sudo firewall-cmd --add-port=5000/tcp --zone=public --permanent
$ sudo firewall-cmd --reload