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.pyとapp.pyファイルを作成します。
※app.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
NoteFlaskはApacheのモジュールとして組み込まれるため、Systemd用のFlaskの起動スクリプトを作成したり自動起動の設定を行う必要はありません。
サンプルページの表示
Webブラウザで http://localhost/api/ を開き、Hello World! が表示されることを確認してください。
サンプルページ:

localhost (127.0.0.1)以外からアクセスしたら404エラーになる場合
flask.confのServerNameにlocalhostではなく、実際のサーバー名を指定してください。 もしくは以下のコマンドを実行してデフォルトの 000-default.conf を無効にします。
# a2dissite 000-default.conf # systemctl reload apache2
Note理由については「VirtualHostのページにlocalhost (127.0.0.1)以外からアクセスしたら404エラーになる場合」の記事をご参照ください。
公開日時:2022年07月15日 12:20:58
最終更新日時:2024年03月18日 15:52:11