Phase 6で学んだDockerを使ってWebアプリを本番環境にデプロイする実践的な手順を解説します。
FastAPIアプリのDockerfile
# マルチステージビルドで軽量イメージを作成
FROM python:3.12-slim AS builder
WORKDIR /app
COPY requirements.txt .
RUN pip install --user -r requirements.txt
FROM python:3.12-slim
WORKDIR /app
COPY --from=builder /root/.local /root/.local
COPY . .
ENV PATH=/root/.local/bin:$PATH
RUN useradd -m appuser
USER appuser
EXPOSE 8000
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]compose.yamlでNginx+FastAPI+DBを構成
services:
nginx:
image: nginx:alpine
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx.conf:/etc/nginx/conf.d/default.conf
- ./certbot:/etc/letsencrypt
depends_on:
- app
app:
build: .
env_file: .env
depends_on:
- db
db:
image: postgres:16-alpine
environment:
POSTGRES_DB: myapp
POSTGRES_USER: appuser
POSTGRES_PASSWORD_FILE: /run/secrets/db_password
volumes:
- db_data:/var/lib/postgresql/data
volumes:
db_data:環境変数の安全な管理
# .env ファイル(Gitにコミットしない!)
DATABASE_URL=postgresql://appuser:password@db:5432/myapp
SECRET_KEY=your-very-long-random-secret-key
DEBUG=false重要:.envファイルは必ず.gitignoreに追加してGitリポジトリにコミットしないでください。
まとめ
- マルチステージビルドでPythonアプリを軽量コンテナ化できる
- compose.yamlでNginx+アプリ+DBの本番構成を1ファイルで管理できる
- 秘密情報は.envで管理し、.gitignoreで必ずGitから除外する



コメント