FlaskアプリケーションをGunicornのWSGIサーバーで運用する方法|macOS

以前にPythonのFlaskでRESTなアプリケーションを動かしました。しかし、Flaskの app.run でサーバーを動かすと動作が安定しません。そこで、 Gunicorn を使ったサーバー運用を導入してみました。Gunicornは「Python WSGI HTTP Server for UNIX」です。ここではGunicornのセットアップと起動方法を解説いたします。

開発環境

ここではmacOS上でGunicornを動かす方法を解説いたします。UbuntuなどのLinuxでも設定はほとんど同じです。

Gunicornのインストール

shell
$ pip install gunicorn

アプリケーションの作成

仮に test_gunicorn.py という名前でアプリケーションを作成します。

py
def app(environ, start_response):
    data = b"Hello, World!\n"
    start_response("200 OK", [
        ("Content-Type", "text/plain"),
        ("Content-Length", str(len(data)))
    ])
    return iter([data])

Gunicornでアプリケーションサーバーの立ち上げ

Gunicornを使って先ほどのアプリケーションサーバーを立ち上げます。-w はワーカースレッドの数です。

shell
$ gunicorn -w 4 test_gunicorn:app
[2022-12-19 23:06:15 +0900] [43249] [INFO] Starting gunicorn 20.1.0
[2022-12-19 23:06:15 +0900] [43249] [INFO] Listening at: http://127.0.0.1:8000 (43249)
[2022-12-19 23:06:15 +0900] [43249] [INFO] Using worker: sync
[2022-12-19 23:06:15 +0900] [43250] [INFO] Booting worker with pid: 43250
[2022-12-19 23:06:15 +0900] [43251] [INFO] Booting worker with pid: 43251
[2022-12-19 23:06:15 +0900] [43252] [INFO] Booting worker with pid: 43252
[2022-12-19 23:06:15 +0900] [43253] [INFO] Booting worker with pid: 43253

サーバーへリクエストテスト

curlを使ってサーバーへリクエストしてみます。「Hello, World!」の文字列が返ってきたら、サーバーテストの成功です。

shell
$ curl 127.0.0.1:8000        
Hello, World!

Port設定などconfigファイル作成

Gunicornではconfigファイル読み込んで起動することも可能です。そうすることでコマンドオプションを省略できます。次はGunicornのconfigファイルの記述例です。

#
# Gunicorn config file
#
wsgi_app = 'server:app'
chdir = '/Users/xxxx/Projects/Sites/iot-dev'
daemon = False
bind = '0.0.0.0:9000'
workers = 2
# accesslog = '/somewhere/access.log'
# access_log_format = '%(h)s %(l)s %(u)s %(t)s "%(r)s" %(s)s %(b)s "%(f)s" "%(a)s"'
# errorlog = '-'
# loglevel = 'info'

実行

先ほどの設定ファイルをGunicornで読み込んで起動するには、次のように実行します。

shell
$ gunicorn --config settings.py
[2022-12-19 23:37:56 +0900] [43495] [INFO] Starting gunicorn 20.1.0
[2022-12-19 23:37:56 +0900] [43495] [INFO] Listening at: http://0.0.0.0:9000 (43495)
[2022-12-19 23:37:56 +0900] [43495] [INFO] Using worker: sync
[2022-12-19 23:37:56 +0900] [43496] [INFO] Booting worker with pid: 43496
[2022-12-19 23:37:56 +0900] [43497] [INFO] Booting worker with pid: 43497

関連記事

最後までご覧いただきありがとうございます!

▼ 記事に関するご質問やお仕事のご相談は以下よりお願いいたします。
お問い合わせフォーム

関連記事