Django + DRF + Docker + PostgreSQL を使った EC システムにおける DevOps の活用

⚙️ はじめに

スマートフォン向け EC アプリのバックエンドとして Django + Django REST Framework (DRF) を利用する場合、
最も重要なのは「安定性と継続的なデプロイ」です。

商品情報、カート機能、決済システムなど頻繁に更新が発生するため、
わずかな不具合でもユーザー体験に影響を与えてしまいます。

その課題を解決するのが DevOps(デブオプス)
開発(Development)と運用(Operations)を統合し、
テスト・ビルド・デプロイ・監視を自動化するアプローチです。


🧱 システム概要

技術構成:

  • バックエンド: Django + DRF(モバイルアプリ向け API)
  • データベース: PostgreSQL
  • コンテナ: Docker + Docker Compose
  • デプロイ: GitHub Actions → AWS EC2 / DigitalOcean
  • 監視: Prometheus + Grafana

🎯 目的:

CI/CD と監視を導入し、安定した API ベースの EC システムを実現する。


🔄 DevOps ワークフロー概要

flowchart TD
  A["Developer Commit (GitHub)"] --> B["CI Pipeline (GitHub Actions)"]
  B --> C["Build Docker Image"]
  C --> D["Run Unit & API Tests (pytest + DRF client)"]
  D --> E["Push to Registry (Docker Hub / ECR)"]
  E --> F["Deploy via Docker Compose / K8s"]
  F --> G["Monitor with Prometheus + Grafana"]

🧩 ステップ1:Continuous Integration(継続的インテグレーション)

開発者が GitHub にプッシュするたびに、自動でテストを実行。

例:.github/workflows/ci.yml

name: Django CI
on: [push, pull_request]

jobs:
  test:
    runs-on: ubuntu-latest
    services:
      postgres:
        image: postgres:14
        env:
          POSTGRES_DB: ecommerce
          POSTGRES_USER: django
          POSTGRES_PASSWORD: password
        ports: ['5432:5432']
    env:
      DATABASE_URL: postgres://django:password@localhost:5432/ecommerce
    steps:
      - uses: actions/checkout@v3
      - name: Set up Python
        uses: actions/setup-python@v4
        with:
          python-version: '3.11'
      - name: Install dependencies
        run: pip install -r requirements.txt
      - name: Run Tests
        run: pytest -v

効果:
不安定なコードが本番に入る前に検出でき、API の信頼性が大幅に向上します。


🚀 ステップ2:Continuous Delivery(継続的デリバリー)

CI に成功すると、コードが自動的に Docker イメージとしてビルド・デプロイされます。

Dockerfile

FROM python:3.11-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
CMD ["gunicorn", "core.wsgi:application", "--bind", "0.0.0.0:8000"]

docker-compose.yml

version: '3'
services:
  web:
    build: .
    container_name: ecommerce_api
    command: gunicorn core.wsgi:application --bind 0.0.0.0:8000
    ports:
      - "8000:8000"
    depends_on:
      - db
  db:
    image: postgres:14
    environment:
      POSTGRES_DB: ecommerce
      POSTGRES_USER: django
      POSTGRES_PASSWORD: password

🟢 ポイント:
CI → Docker ビルド → レジストリへのプッシュ → サーバーへ自動デプロイ
すべてが自動化されるため、リリースサイクルが劇的に短縮されます。


🧪 ステップ3:自動テスト(Automated Testing)

pytest と DRF の APIClient を利用して API の動作を検証。

from rest_framework.test import APIClient

def test_product_list(api_client):
    client = APIClient()
    response = client.get("/api/products/")
    assert response.status_code == 200
    assert isinstance(response.json(), list)

🧠 ヒント:
本番デプロイ前にすべての API テストを実行し、
モバイルアプリが常に正しく通信できる状態を保証します。


🧰 ステップ4:Infrastructure as Code(IaC)

TerraformAnsible を使い、サーバー・ネットワーク・DB をコードで構築。

例:Terraform

resource "aws_instance" "backend" {
  ami           = "ami-0f3e2d1e1d33b3b57"
  instance_type = "t3.medium"
  tags = { Name = "django-ecommerce" }
}

📦 利点:
環境構築の再現性が高く、ステージングと本番を同一設定で展開できます。


📊 ステップ5:モニタリングとログ分析

Prometheus + Grafana を導入して可視化。
監視対象:

  • API レイテンシ
  • リクエスト数 / 秒
  • DB コネクション数
  • CPU・メモリ使用率

⚠️ アラート例:

「/checkout API の応答時間が2秒を超過 — DB の負荷が疑われます」

ログは ELK Stack(Elasticsearch, Logstash, Kibana) に送って詳細分析も可能です。


🔒 ステップ6:セキュリティと環境管理

  • GitHub Secrets または AWS SSM に環境変数を安全に保管
  • .env ファイルを Docker 内で読み込む(Git にはコミットしない)
  • SSH アクセスを制限

例:.env

DEBUG=False
DATABASE_URL=postgres://django:password@db:5432/ecommerce
SECRET_KEY=production_key_here

📱 ステップ7:モバイルアプリとの連携

Django REST Framework で作成した API はモバイルアプリの中核として動作。
機能例:

  • ログイン/ユーザー登録
  • 商品一覧/カート/決済
  • JWT 認証・API バージョン管理(例: /api/v1/, /api/v2/

CI/CD により:

API 更新があっても、既存アプリは問題なく動作を継続できます。


🌐 システム構成図

graph TD
  APP["モバイルアプリ"] --> API["Django REST Framework API"]
  API --> DB["PostgreSQL"]
  API --> CACHE["Redis / Celery Worker"]
  API --> MON["Prometheus + Grafana"]
  DEV["CI/CD Pipeline (GitHub Actions)"] --> API
  API --> DOCKER["Docker Container on EC2"]

🧭 DevOps 導入によるメリット

メリット 内容
🚀 リリース速度の向上 自動化されたパイプラインで迅速デプロイ
✅ 品質の安定 自動テストで不具合を早期検出
🔒 高いセキュリティ シークレット管理と安全なアクセス制御
⚙️ スケーラビリティ IaC による容易なスケールアップ
📈 可視化 ダッシュボードでリアルタイム監視可能

Get in Touch with us

Chat with Us on LINE

iiitum1984

Speak to Us or Whatsapp

(+66) 83001 0222

Related Posts

Our Products