概要
Nginxを使いたかったけど既存環境がNginxでなかったので、Apacheを使ってFlaskを動かした話。
EC2の立ち上げについては他記事に投げてますすいません。
環境
- AMI : 4.14.62-70.117.amzn2.x86_64
- Apache : 2.4.34
- uWSGI : 2.0.17.1
- Python :2.7.14
EC2
ここら辺を読むとわかります。
AWSでWebサーバー構築!EC2を作成してSSH接続する(第3回)
https://miyabi-lab.space/blog/15
Apache
EC2を建てると既にApahce2がインストールされているのでそのまま利用しました。
また、
/etc/httpd/conf.modules.d/00-proxy.conf
を見ると必要なモジュールが既に存在しているのでこれもそのまま利用。
LoadModule proxy_http_module modules/mod_proxy_http.so ←コレ
LoadModule proxy_hcheck_module modules/mod_proxy_hcheck.so
LoadModule proxy_scgi_module modules/mod_proxy_scgi.so
LoadModule proxy_uwsgi_module modules/mod_proxy_uwsgi.so ←コレ
リバースプロキシの設定を以下のようにし、/etc/conf.d/flask.confとして保存しました。
ProxyRequests Off //フォワードプロキシoff
ProxyPass /hoge uwsgi://127.0.0.1:8930 //転送設定
ProxyPassReverse /hoge uwsgi://127.0.0.1:8930
詳しい説明は以下で、
Apache 2.4 で リバースプロキシの設定
https://qiita.com/gingi99/items/83c1fb07644cd232d91e
uWSGI
以下のように最小限の設定にし、uwsgi.iniとして保存。
[uwsgi]
socket = 127.0.0.1:8930 #上記のProxyPassに合った設定を
module = app #app.pyならapp main.pyならmainを設定する
callable = app #moduleで設定したファイル内のこの名前→app = Flask(__name__)
master = True #子プロセスが死んでもそれを蘇生する親プロセスを立ち上げる否かのフラグ
Quickstart for Python/WSGI applications
https://uwsgi-docs.readthedocs.io/en/latest/WSGIquickstart.html
Flask
上記uwsgi.iniの設定通りにapp.pyを作成
from flask import Flask
app = Flask(__name__)
@app.route('/')
def upload():
return 'Hello World!'
if __name__ == '__main__':
app.run()
実行
こんなディレクトリ構成になりました。
.
├── app.py
└── uwsgi.ini
apache再起動して、uWSGIを実行します。
sudo service httpd restart
uwsgi --ini uwsgi.ini
curlコマンドで確認して出てました。
curl http://example.com/hoge
Hello World!
以上、Amazon Linux 2はいろいろ勝手に入っててくれるので環境構築が楽でした。
間違いがあればご指摘おねがします。