FastAPI開発環境
WordPressで高度な処理を行いたい場合には、外部サーバを活用して、外部でPythonなどを使って処理した結果をWordPressで表示することが可能です。
Pythonの場合、FastAPIを使うことで、簡単にそのような機能を実装できます。
実際に開発する上では、github codespacesなどを使ってFastAPI環境を構築することもできますが、今回は、Dockerで全体の環境を作ってみたいと思います。
github codespacesやRenderを使う方法は以下の記事で紹介しています。
すでにDockerでWordPress環境は作成している前提で進めていきます。
詳しくは以下で確認してください。
WordPress環境にFastAPIを追加して開発できるようにするために、docker-compose.yml
ファイルにFastAPIのサービスを追加します。
FastAPIサービスの追加
docker-compose.yml
にFastAPIのサービスを追加します。FastAPI用のPython環境を構築し、アプリケーションコードを配置するために新しいディレクトリを作成し、そこにDockerfile
を配置します。
Dockerfile(FastAPI用)
新しいディレクトリ(例: fastapi
)を作成し、その中に以下のDockerfile
を作成します。
# fastapi/Dockerfile
FROM python:3.12
WORKDIR /app
# 必要なPythonパッケージをインストール
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
# FastAPIアプリケーションコードをコピー
COPY . .
# FastAPIサーバーを起動
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
requirements.txt
同じディレクトリ(fastapi
)にrequirements.txt
ファイルを作成し、FastAPIとUvicornをインストールするための要件を追加します。
fastapi
uvicorn
FastAPIアプリケーションファイル
FastAPIアプリケーションファイル(例: main.py
)を作成し、以下のように記述します。
# fastapi/main.py
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
return {"Hello": "World"}
docker-compose.yml の更新
docker-compose.yml
ファイルにFastAPIのサービスを追加します。
version: "3.9"
services:
db:
image: mariadb:10.4
container_name: "wordpress-db"
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
volumes:
- db_data:/var/lib/mysql # 名前付きボリュームを使用してDBデータを永続化
wordpress:
build:
context: . # Dockerfileがあるディレクトリ
dockerfile: Dockerfile
container_name: "wordpress-wp"
ports:
- "8060:80"
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wordpress
WORDPRESS_DB_NAME: wordpress
volumes:
- wp_data:/var/www/html # 名前付きボリュームを使用してWordPressデータを永続化
depends_on:
- db
phpmyadmin:
image: phpmyadmin/phpmyadmin
container_name: "phpmyadmin"
ports:
- "8070:80"
environment:
PMA_HOST: db:3306
MYSQL_ROOT_PASSWORD: root # rootパスワードを正しく設定
depends_on:
- db
fastapi:
build:
context: ./fastapi # FastAPIのDockerfileがあるディレクトリ
dockerfile: Dockerfile
container_name: "fastapi-app"
ports:
- "8000:8000" # FastAPIのポートを公開
volumes:
- ./fastapi:/app # FastAPIのコードをマウント
depends_on:
- db
volumes:
db_data: # 名前付きボリュームを定義
driver: local
wp_data: # 名前付きボリュームを定義
driver: local
Docker Composeの実行
- FastAPIのサービスを追加したら、
docker-compose
を再起動して新しいサービスを構築します。
docker-compose up --build
docker-compose up
コマンドで全てのサービス(WordPress, MariaDB, phpMyAdmin, FastAPI)が起動するのを確認します。
動作確認
- WordPress:
http://localhost:8060
でWordPressサイトが表示されることを確認します。 - phpMyAdmin:
http://localhost:8070
でphpMyAdminが表示されることを確認します。 - FastAPI:
http://localhost:8000
でFastAPIのエンドポイントが表示されることを確認します。
追加の注意点
- ファイル構造: FastAPI関連のファイル(
Dockerfile
,requirements.txt
,main.py
)をfastapi
ディレクトリに配置します。 - 依存関係の設定:
depends_on
を使用して、サービスの起動順序を制御しています。MariaDBとWordPressが先に起動されるように設定されています。