PR

【Flask】MacでのFlask + Nginx + Waitress環境の構築方法

Web開発
このサイトはアフィリエイト広告(Amazonアソシエイト含む)を掲載しています。

Pythonの必要最小限の機能だけを提供するWebフレームワークFlask

本記事ではMacでのFlask + Nginx + Waitress環境の構築方法をご紹介します。


pythonの勉強をスタートする方には以下の書籍がおすすめです!

私も実際に使用しましたが、非常に丁寧に解説されておりプログラミング未経験の方でも理解できる内容となっております。

動作確認環境

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のインストール

以下の記事を参考にインストールします。

【Flask】MacでのFlaskのインストール方法

SSLサーバー証明書の作成

以下の記事を参考にインストールします。

【自己署名証明書】OpenSSLを用いたSSL自己署名サーバー証明書の作成方法(Mac編)

Nginxのインストール

以下の記事を参考にインストールします。

【Nginx】NginxをMacにインストールする方法

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アドレスを調べます。

【Mac】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環境を構築する方法をご紹介しました。

少しでも参考になれば幸いです!

タイトルとURLをコピーしました