Ubuntu + Apache環境でのFlaskの連携設定

カテゴリ:Python

本記事の対象OS:Ubuntu

以下では、Ubuntu で WSGI (Web Server Gateway Interface) を使用して Apache と Flask と連携する手順について解説します。

実行環境は以下となります。

# cat /etc/issue
Ubuntu 22.04.3 LTS \n \l

# python3 --version
Python 3.10.12

# apache2 -v
Server version: Apache/2.4.52 (Ubuntu)
Server built:   2023-05-03T20:02:51

Python関連のインストール

Python関連のパッケージをインストールします。

# apt install python3-dev python3-pip
# pip3 install Flask

Apache関連のインストール

Apache2およびWSGIモジュールをインストールします。

# apt install apache2
# apt install libapache2-mod-wsgi-py3

Apacheの設定

1. /etc/apache2/sites-available配下にflask.confファイルを作成します。

# cd /etc/apache2/sites-available
# touch flask.conf

実施後の状態:

# pwd
/etc/apache2/sites-available

# tree -l
.
├── 000-default.conf
├── default-ssl.conf
└── flask.conf

2. flask.confを設定します。

以下の例では /api へのリクエストをWSGI (Flask)で処理するようにマッピングしています。

flask.confの設定例)

<VirtualHost *:80>
    ServerName localhost:80

    WSGIDaemonProcess flask_app user=www-data group=www-data threads=5
    WSGIScriptAlias /api /var/www/flask/wsgi.py

    <Directory /var/www/flask>
        WSGIProcessGroup flask_app
        WSGIApplicationGroup %{GLOBAL}
        Order deny,allow
        Allow from all
    </Directory>
</VirtualHost>

Noteこの設定例ではFlask用のディレクトリを /var/www/flask としています。環境によって読み替えてください。

3. /var/www/flask/ ディレクトリを作成し、ユーザー、グループをwww-dataに変更します。

# mkdir /var/www/flask/
# chown -R www-data:www-data /var/www/flask/

4. flask.confを有効化します。

# a2ensite flask

WSGIの設定

1. /var/www/flask配下にwsgi.pyapp.pyファイルを作成します。

# cd /var/www/flask
# touch wsgi.py
# touch app.py

実施後の状態:

# pwd
/var/www/flask

# tree -l
.
├── app.py
└── wsgi.py

2. wsgi.pyに以下のようにコードを記述します。

Note以下の例ではPythonアプリケーションとしてappパッケージからappオブジェクトをインポートしています。

wsgi.pyの設定例)

import os,sys

sys.path.insert(0, os.path.abspath(os.path.dirname(__file__)))

from app import app as application

サンプルアプリケーションの設定

app.pyにサンプルアプリケーションとして以下のような Hello World! を表示するコードを記述します。

app.pyの設定例)

from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello():
   name = "Hello World!"
   return name

if __name__ == "__main__":
   app.run()

最後に Apache を再起動します。

# systemctl restart apache2

サンプルページの表示

Webブラウザで http://localhost/api/ を開き、Hello World! が表示されることを確認してください。

サンプルページ:

localhost (127.0.0.1)以外からアクセスしたら404エラーになる場合

flask.confのServerNamelocalhostではなく、実際のサーバー名を指定してください。 もしくは以下のコマンドを実行してデフォルトの 000-default.conf を無効にします。

# a2dissite 000-default.conf
# systemctl reload apache2

Note理由については「VirtualHostのページにlocalhost (127.0.0.1)以外からアクセスしたら404エラーになる場合」の記事をご参照ください。

公開日時:2022年07月15日 12:20:58
最終更新日時:2023年11月11日 16:07:05

なお、VPS選びで迷ったらこちらの記事で主要VPSのメモリ容量ごとの月額、年額料金を比較していますので、是非参考にしてみてください。

Pythonに戻る

このページのトップに戻る