https://qiita.com/ekzemplaro/items/a570f79de254428a151d
こんどはこのページを参考に進める。
まずはFlaskのアプリを適当に作成。
foovar.py
from flask import Flask app = Flask(__name__) @app.route("/") def hello(): return "Hello World!" if __name__ == "__main__": app.run(host='0.0.0.0')
こんな感じにしておく。
$ python3 foovar.py
と起動してlocalからlocalhost:5000でアクセスするとちゃんとHello World!が表示された。
次にuWSGIとの連携を行うために、もう一つスクリプトを作る。
wsgi.py
from foovar import app if __name__ == "__main__": app.run()
これを先程のfoovar.pyと同じディレクトリに置いた状態で
$ uwsgi --socket 0.0.0.0:5000 --protocol=http -w wsgi:app
このように起動し、先ほどと同じようにlocalからlocalhost:5000でアクセスするとこれもちゃんとHello World!が表示された。
この状態でlocal->localhost:5000->uWSGI->wsgi.py->foovar.pyと繋がった模様。
また、--socket 0.0.0.0:80としておくとlocalじゃなく、外のネットワークからポート80でサーバにアクセスしたときにちゃんとFlaskアプリに繋いでくれる。
ここでほんちゃんのデータベースアプリに置き換えて構築していく。
exomedb.iniを作成
[uwsgi] [uwsgi] uid = root gid = root http = :80 python-path = /opt/database/database.latest wsgi-file = /opt/database/database.latest/wsgi.py callable = app master=true pidfile=/var/run/exomedb.pid logger=file:/opt/database/database.latest/exomedb.log
iniファイルを使って起動できるかテスト
$ sudo uwsgi exomedb.ini
問題ない。
/etc/systemd/system/exomedb.serviceを作成
[Unit] Description=uWSGI instance to serve exomedb After=network.target [Service] User=root #Group=www-data WorkingDirectory=/opt/database/database.latest ExecStart=/usr/bin/uwsgi --ini exomedb.ini [Install] WantedBy=multi-user.target
$ sudo systemctl start exomedb $ sudo systemctl enable exomedb
と実行するとdaemonが起動する。
あとはnginx.confの設定。たぶんこれがちゃんとできていなくて動かないんだな。ただし現状幾つものサービスを1つのサーバで運用していないからnginxを通さないこの状態でも問題ないといえば問題ない。セキュリティ面でどうか、というのはあるけど。
ところで、uWSGIで繋がった状態でデータベースにアクセスする段階で、速度の向上が見られたか(つまりPythonのサーバがヘボくて表示が遅かったのか)というと、全然変わらないようで、やはりこの遅さの原因はMySQL(MariaDB)内部でのデータ処理に起因しているっぽい。やはりカラム数が無駄に多いことが根本原因な気がするな。