はじめに
図のような構成です。
①uWSGIを使ってFlask環境を構築
②Apache経由で接続する(http://host/api
で接続)
で書き進めます。
確認環境
- WSL2(Ubuntu22.04.3 LTS)
- Docker (24.0.6)
- Docker Compose (2.4.1)
- Python 3.12.1
- Apache 2.4.58
①uWSGIを使ってFlask環境を構築
フォルダ構成
[projectfolder]
├─ Dockerfile
├─ compose.yml
└─ api
├─ main.py
└─ uwsgi.ini
各コード
Dockerfile
# ビルドイメージ
FROM python:3.12-slim-bookworm
# パッケージ更新
RUN apt-get -y update
RUN apt-get -y install \
gcc
# Flaskとuwsgiをpipで取得
RUN python -m pip install Flask uwsgi
compose.yml
services:
app:
build:
context: .
volumes:
- ./api:/usr/local/src/api
ports:
- "8000:8000"
tty: true
entrypoint: >
sh -c "
cd /usr/local/src/api &&
uwsgi --ini uwsgi.ini
"
api/main.py
from flask import Flask, jsonify
app = Flask(__name__)
@app.route("/hello")
def hello():
return jsonify({
"message": "Hello World!"
})
api/uwsgi.ini
[uwsgi]
# ソケット設定
socket=0.0.0.0:8000
# HTTPで実行もできる
# http=0.0.0.0:8000
# 実行するuswgiファイル
wsgi-file=./main.py
# wsgi-fileで実行するアプリケーション
callable=app
# マスターモード指定
master=true
コンテナ立ち上げ
bash実行
cd [projectfolder]
docker compose up -d --build
ざっくり解説
- pythonが3.13.X になると、uwsgiがインストールできない
※ 3.11.7 でもインストール可能なことは確認済み - gccを入れないとpipでuwsgiがインストールできない
②Apache経由で接続する
フォルダ構成
こちらを参照
各設定ファイル(上記リンク先からの修正分のみ)
compose.yml ※同一端末内想定
extra_hosts:
- host.docker.internal:host-gateway
conf/httpd.conf ※以下をコメントアウトして、モジュール追加
LoadModule proxy_html_module modules/mod_proxy_html.so
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_uwsgi_module modules/mod_proxy_uwsgi.so
conf/extra/proxy-html.conf ※リバースプロキシ追加設定
<Location /api/>
ProxyPass uwsgi://host.docker.internal:8000/
ProxyPassReverse uwsgi://host.docker.internal:8000/
</Location>
確認
http://localhost/api/hello
にブラウザで接続して、リクエストしてください。
最後に
Apacheの情報少ない…
参考