⑧Web開発

DockerでWebアプリを本番運用する【compose.yaml実践構成】

⑧Web開発
記事内に広告が含まれています。

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から除外する

コメント

タイトルとURLをコピーしました