Python
nginx
Flask
vps
uwsgi

VPSで複数のFlaskを用いたサービスを立ち上げる

はじめに

1つのvpsで複数のFlaskアプリケーションを立ち上げるためのメモ

Flask,uWSGI,Nginxを使う。
https://qiita.com/morinokami/items/e0efb2ae2aa04a1b148b
ほとんどこの記事に書いてあることなので,
複数アプリケーションを立ち上げるときの違いだけ記述。

app1のドメインはapp1.com
app2のドメインはapp2.com
とする。
ドメインは2つとも同じvpsのIPアドレスを設定しておけば良い。
ディレクトリ構成は下記のようになっているとする。

home
 |-strat.sh
 |-app1
    |-app.py
 |-app2
    |-app.py

Nginxの設定

/etc/nginx/conf.d/に.confファイルを作って設定する。
server_nameにドメインを書いておくと,ブラウザで入力されたドメインに応じて動作を切り替えることができる。
この際flaskにつなげるにはUNIXソケットを用いるが,
単に.sockの名前を変えてしまえばいい。

sample.conf
server {
    listen       80;
    server_name app1.com www.app1.com;
    location / {
        include uwsgi_params;
        uwsgi_pass unix:///tmp/uwsgi_app1.sock;
    }
}
server {
    listen       80;
    server_name app2.com www.app2.com;
    location / {
        include uwsgi_params;
        uwsgi_pass unix:///tmp/uwsgi_app2.sock;
    }
}

起動

複数アプリケーションをたちあげるためのスクリプトは以下の通り。

start.sh
#!/bin/sh

cd app1
uwsgi --socket /tmp/uwsgi_app1.sock --module app --callable app --chmod-socket=666 &
cd ..
cd app2
uwsgi --socket /tmp/uwsgi_app2.sock --module app --callable app --chmod-socket=666 &

./start.sh
で起動。