DockerでWordPressと連携するFastAPIの開発環境を構築する

IT・プログラミング

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の実行

  1. FastAPIのサービスを追加したら、docker-composeを再起動して新しいサービスを構築します。
docker-compose up --build
  1. 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が先に起動されるように設定されています。
タイトルとURLをコピーしました