Pythonの必要最小限の機能だけを提供するWebフレームワークFlask。
本記事ではMacでのFlask + Nginx + Waitress環境の構築方法をご紹介します。
エンジニアとして働くための実践力を高めたいならRUNTEQがオススメです。
Web系エンジニアを目指す方は一度無料キャリア相談会にご参加ください!
RUNTEQ(ランテック) – 実践型Webエンジニア養成プログラミングスクール
相談会の参加を悩んでいる方はRUNTEQの運営会社の代表取締役 菊本 久寿さんの著書
「エンジニア×スタートアップ」こそ、最高のキャリアである を一度よんでください。
参加したくなること間違いなしです!
読む時間がない方は以下の書籍紹介の記事をごらんください。
目次
動作確認環境
macOS Monterey 12.3
MacBook Pro(13-inch, M1, 2020)
Flaskアプリケーションを実行するサーバーの選定
特にサーバーを指定せずにFlaskアプリを起動すると、Flaskの内蔵サーバーが立ち上がります。
これは開発環境で使用するには問題ないですが、本番環境では使用してはいけません。
Do not use the development server when deploying to production. It is intended for use only during local development. It is not designed to be particularly secure, stable, or efficient.
https://werkzeug.palletsprojects.com/en/3.0.x/deployment/
本番環境では内蔵サーバーの代わりに以下のようなWSGIサーバーを使用します。
※ WSGI:PythonにおけるWebアプリケーションとサーバを接続する標準仕様のこと。
アプリケーション(やフレームワーク)側がWSGIに対応していれば、WSGIサーバーを自由に選択できる。
※ WSGIサーバー:WSGIの仕様に則ったサーバー
つまり、本番環境ではFlask(WSGIに対応するフレームワーク)を運用するWSGIサーバーを選定する必要があります。
推奨されるサーバー構成
Flaskの公式ページではサーバーの前にリバースプロキシサーバーを配置することが推奨されています。
WSGI servers have HTTP servers built-in. However, a dedicated HTTP server may be safer, more efficient, or more capable. Putting an HTTP server in front of the WSGI server is called a “reverse proxy.”
https://werkzeug.palletsprojects.com/en/3.0.x/deployment/
リバースプロキシサーバーとして以下が挙げられています。
環境イメージ
本記事では、Flask + Nginx + Waitress の環境を構築いたします。
Flaskのインストール
以下の記事を参考にインストールします。
SSLサーバー証明書の作成
以下の記事を参考にインストールします。
【自己署名証明書】OpenSSLを用いたSSL自己署名サーバー証明書の作成方法(Mac編)
Nginxのインストール
以下の記事を参考にインストールします。
Nginxの設定変更
Nginxの設定を変更するため、以下の設定ファイルを開きます。
(※ nginx.confの格納場所は異なる場合があります。)
/opt/homebrew/etc/nginx/nginx.conf
設定ファイルの内容を以下のようにします。
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 443 ssl;
server_name localhost;
# SSLサーバー証明書を設定
ssl_certificate /Users/{username}/openssl/server.crt;
# SSLサーバー証明書の秘密鍵を設定
ssl_certificate_key /Users/{username}/openssl/server.key;
location / {
# waitressへ中継
proxy_pass http://xxx.xxx.xxx.xxx:5000;
}
}
}
“xxx.xxx.xxx.xxx“には、今回の場合MacのIPアドレスを入力します。
以下の記事を参考にIPアドレスを調べます。
Waitressのインストール
ターミナルにて以下のコマンドを実行します。
pip install waitress
以下のようなメッセージが表示されればインストール成功です。
Successfully installed waitress-3.0.0
Pythonスクリプトの作成
FlaskアプリをWaitress環境で起動するため、以下のようなpythonプログラムを作成します。
from flask import Flask
from waitress import serve
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello, World!'
if __name__ == '__main__':
serve(app, host="xxx.xxx.xxx.xxx", port=5000, url_scheme='https')
“xxx.xxx.xxx.xxx“には、今回の場合MacのIPアドレスを入力します。
動作確認
Nginxの起動
以下を実行しNginxを起動します。
nginx
FlaskアプリをWaitressで起動
以下のコマンドを実行します。
python app.py
app.pyの箇所は上記のpythonプログラムの名称を使用してください。
Flaskアプリへアクセス
ブラウザでhttps://localhost をブラウザに入力すると以下の結果が得られます。
まとめ
MacでFlask + Nginx + Waitress環境を構築する方法をご紹介しました。
少しでも参考になれば幸いです!