こんにちは。aniumaでインターンをしているryuseiです。
今回はwordpressのFAQページに使用するAIチャットボットを導入する流れをまとめていきたいと思います。
WordPress は PHP が中心ですが、「AI API を使いたい」「PDF 処理や画像処理をしたい」など、PHP だけでは扱いづらい処理も多いですよね。
そんなときに便利なのが Python アプリ(Flask / FastAPI)をサーバー内で動かして、WordPress から呼び出す方法です。
今回は VPS サーバー(Ubuntu + Nginx)を例に、https://example.com/pyapi/
で Python API を公開する流れをまとめました。
全体像
- Python アプリ(Flask or FastAPI)を localhost:8000 で待ち受け
- systemd で常駐化してサーバー起動時に自動起動
- Nginx リバースプロキシで
/pyapi/
→127.0.0.1:8000/
に転送 - WordPress は通常どおり
/
で稼働
1. サーバー環境を準備
まずは Python と Nginx をインストールします。
sudo apt update
sudo apt install -y python3 python3-venv nginx
専用のユーザーとディレクトリを作成しておくと管理が楽です。
sudo adduser --system --group --home /srv/pyapi pyapi
sudo mkdir -p /srv/pyapi
sudo chown -R pyapi:pyapi /srv/pyapi
仮想環境を作って必要ライブラリを入れます。
(ここでは FastAPI+Uvicorn を例にしていますが、Flask でもOK)
sudo -u pyapi python3 -m venv /srv/pyapi/venv
sudo -u pyapi /srv/pyapi/venv/bin/pip install --upgrade pip
sudo -u pyapi /srv/pyapi/venv/bin/pip install fastapi uvicorn[standard]
2. Python アプリを作成
/srv/pyapi/app.py
を作ります。
from fastapi import FastAPI
app = FastAPI()
@app.get("/health")
def health():
return {"ok": True}
@app.get("/hello")
def hello(name: str = "World"):
return {"message": f"Hello, {name}!"}
動作確認(手動起動):
sudo -u pyapi /srv/pyapi/venv/bin/python -m uvicorn app:app --host 127.0.0.1 --port 8000
ブラウザで http://サーバーIP:8000/hello?name=Ryusei
を叩いてみてください。
3. systemd で常駐化
アプリをサービス化しておくと、サーバー再起動後も自動で立ち上がります。
/etc/systemd/system/pyapi.service
を作成:
[Unit]
Description=PyAPI (FastAPI) via Uvicorn
After=network.target
[Service]
User=pyapi
Group=pyapi
WorkingDirectory=/srv/pyapi
ExecStart=/srv/pyapi/venv/bin/python -m uvicorn app:app --host 127.0.0.1 --port 8000
Restart=always
[Install]
WantedBy=multi-user.target
有効化・起動:
sudo systemctl daemon-reload
sudo systemctl enable pyapi
sudo systemctl start pyapi
sudo systemctl status pyapi
4. Nginx リバースプロキシ設定
WordPress と同じドメインで /pyapi/
を公開します。
/etc/nginx/sites-available/wordpress.conf
に追記:
location /pyapi/ {
proxy_pass http://127.0.0.1:8000/;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
設定反映:
sudo nginx -t
sudo systemctl reload nginx
これで https://example.com/pyapi/hello?name=Ryusei
にアクセスすると、
{"message": "Hello, Ryusei!"}
が返ります
5. WordPress から呼び出す
functions.php にショートコードを追加すると、投稿や固定ページ内で Python API を叩けます。
add_shortcode('call_python_api', function($atts) {
$atts = shortcode_atts(['name' => 'World'], $atts);
$url = home_url('/pyapi/hello?name=' . rawurlencode($atts['name']));
$res = wp_remote_get($url, ['timeout' => 10]);
if (is_wp_error($res)) return 'API error';
$body = wp_remote_retrieve_body($res);
$data = json_decode($body, true);
return isset($data['message']) ? esc_html($data['message']) : 'No message';
});
投稿に
[call_python_api name="Ryusei"]
と書けば、その場で Python API の結果を表示できます。
6. セキュリティと運用のポイント
- Python は 127.0.0.1 で動かし、外部には直接晒さない
/pyapi/
は認証(APIキー / JWT など)を実装すると安心systemctl status pyapi
やjournalctl -u pyapi -f
でログ確認- HTTPS(Let’s Encrypt)を必ず導入
まとめ
WordPress に直接 Python を埋め込むのではなく、
「Python は裏で API サーバー化 → Nginx でプロキシ → WordPress から呼び出す」
という構成にすると、拡張性・安定性・セキュリティの三拍子が揃います。
これで、AI API や独自処理を WordPress サイトに統合できるようになります