2020年11月6日金曜日

RaspberryPi 2B + Apache2 mod-wsgi + Flask Deploy

RaspberryPi 2B で、 Flask アプリを Apache2 + wsgi でデプロイする。
将来的に、そのアプリで RaspberryPi のハードウェアを制御する。

 Python 3 用の apache2 mod-wsgi をインストールする。Python 2 用の mod-wsgi が入っていたらアンインストールする。

$ sudo a2dismod wsgi
$ sudo apt remove libapache2-mod-wsgi
$ sudo apt install apache2
$ sudo apt install libapache2-mod-wsgi-py3
$ sudo a2enmod wsgi
$ sudo systemctl restart apache2

Flask app のディレクトリを作成する。
pi@raspberrypi:~ $ mkdir flask
pi@raspberrypi:~ $ cd flask
pi@raspberrypi:~/flask $ mkdir templates
pi@raspberrypi:~/flask $ mkdir static

flask/my_app.py を作成する。
pi@raspberrypi:~/flask $ nano my_app.py
from flask import Flask
import sys


app = Flask(__name__)


@app.route('/')
def hello_world():
    msg = 'Hello Flask ' + sys.version
    return msg


if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)

flask.conf を作成する。
$ sudo nano /etc/apache2/sites-available/flask.conf
<VirtualHost *:80>
  ServerName 0.0.0.0

  WSGIDaemonProcess my_app user=pi group=pi threads=5
  WSGIScriptAlias / /home/pi/flask/my_app.wsgi

  <Directory /home/pi/flask/>
    WSGIProcessGroup my_app
    WSGIApplicationGroup %{GLOBAL}
    WSGIScriptReloading On

    Require all granted
  </Directory>
</VirtualHost>

wsgi ファイルを作成する。
$ nano ~/flask/my_app.wsgi
import sys

sys.path.insert(0, '/home/pi/flask/')
from my_app import app as application

デフォルトのサイト 000-default を外して、先ほどの flask.conf を有効化する。
$ sudo a2dissite 000-default
$ sudo a2ensite flask
$ sudo systemctl reload apache2

確認。
$ curl http://localhost
Hello Flask 3.7.3 (default, Jul 25 2020, 13:03:44)

他のパソコンなどからも同様に表示される。

0 件のコメント:

コメントを投稿