Apache2 (Webサーバ) と Flask (Webアプリケーション) を連携させて HTTP でアクセスできる環境を構築します
動作確認環境
Ubuntu 24.04
Apache 2.4.58
Python 3.13.3
Flask 3.1.0
( 🐳 Docker コンテナを利用して動作確認)
まずは、ベースとなる環境を構築します
以下のようにして、Apache2 から導入します
sudo apt update && sudo apt install build-essential apache2次に Python のセットアップを行います
Ubuntu の場合、Python3 はすでに導入されていると思われますが、 pip がない場合は以下のようにして導入します
sudo apt install python3-pipそもそも Python がない場合やバージョンが気に入らない場合は、pyenv 等を用いて新たに環境構築してください
Apache2 に対し リバースプロキシの設定を行うことで 80(http) → 5000(Flask のデフォルト) ポートへの転送を行います
/etc/apache2/sites-available/000-default.conf に ProxyPreserveHost On 等の3行分を末尾に追記します
なお、Flask アプリケーションのポート番号が 5000 でない場合は、:5000 の部分を正しい番号に書き換えてください
<VirtualHost *:80>...ProxyPreserveHost OnProxyPass / http://localhost:5000/ProxyPassReverse / http://localhost:5000/</VirtualHost>
設定が完了したら、Apache2 を起動します (すでに起動している場合は restart)
sudo service apache2 startInvalid command 'ProxyPreserveHost', perhaps misspelled or defined by a module not included in the server configuration エラー
このようなエラーが出る場合は、 Apache のモジュールが不足しています
以下のコマンドで必要な Apache のモジュールを追加しましょう
sudo a2enmod proxy_http導入が完了したら、もう一度再起動して試してみてください
Apache2 の起動や停止など、よく使いそうなコマンドをまとめておきます
Apache2のステータス・起動・停止・再起動コマンド一覧
Python 環境に pip で Flask を導入します
pip3 install flask× This environment is externally managed エラー
Python 3.12 以降、他環境のパッケージを上書きしないよう、直接的なインストールの実行が非推奨となりました
このエラーを回避するには venv 等による仮想環境を構築する必要がありますが、少し大袈裟な気もするので、今回は --break-system-packages オプションをつけてお茶を濁します (無視してインストールします)
pip3 install flask --break-system-packages 以下を app.py としてカレントディレクトリに作成してください
from flask import Flaskapp = Flask(__name__)@app.route('/')def hello_world():return "<h1>Hello World!!!!</h1>"if __name__ == '__main__':app.run(port=5000)
以下のコマンドで Flask を起動します
python3 app.pyこのように表示されれば起動成功です 🎉
ブラウザからサーバのグローバル IP アドレスを入力しアクセスして確認してみてください
* Serving Flask app 'app'* Debug mode: onWARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.* Running on http://127.0.0.1:5000Press CTRL+C to quit
(http://127.0.0.1:5000 はループバックアドレスであり、グローバルIPアドレスではありません)
Flask を停止するには [Ctrl] + [c] で終了できます
開発にあたり、Flask・Ubuntu 技術や、遭遇しそうなエラーについて、簡単に記しておきます
Service Unavailable (503)
Internal Server Error (500)
ロードが終わらない
pip でインストールされているモジュールを確認する・まとめてインストールする
別ファイルの HTML/CSS/JavaScript を読み込む
Flask に Basic 認証を設定する
Flask を起動したままにする (バックグラウンド実行)