Django × DigitalOcean × GitHub Actions × Docker で構築する継続的デリバリー(CD)環境

概要:このガイドでは、Django アプリケーションに対してプロダクションレベルの継続的デリバリー(CD)パイプラインを構築する方法を紹介します。GitHub Actions、Docker、DigitalOcean の Ubuntu VM を活用し、テストから本番反映までを自動化します。


💡 継続的デリバリー(CD)とは?

継続的デリバリーは、コードの変更を常にデプロイ可能な状態に保つ開発手法です。以下のメリットがあります:

  • ✅ デプロイが高速かつ安全
  • 🔄 人的ミスの削減
  • 🚀 リリース頻度の向上
  • 📦 自動テスト・自動本番反映

🔄 CD パイプラインのワークフロー

graph TD
  A[GitHub にプッシュ] --> B[GitHub Actions が CI/CD を開始]
  B --> C[コードをチェックアウト]
  C --> D[DigitalOcean VM に SSH 接続]
  D --> E[Git リポジトリをプル]
  E --> F[Docker コンテナを再構築]
  F --> G[Docker Compose で再起動]
  G --> H[Nginx が最新バージョンを提供]

各ステップの詳細

ステップ 内容
A コードを GitHub の main ブランチにプッシュ
B GitHub Actions がワークフローを実行
C GitHub ランナーがコードを取得
D SSH 経由で VM に接続
E 最新コードを git pull
F Docker イメージを再ビルド
G アプリケーションを再起動
H Nginx が更新版を公開

🛠️ 使用ツール

役割 ツール
CI/CD GitHub Actions
本番環境 DigitalOcean (Ubuntu)
コンテナ管理 Docker + Compose
Web サーバ Nginx
リモート接続 SSH(秘密鍵)

📦 ステップ 1:Django アプリを Docker 化

Dockerfile

FROM python:3.11-slim

ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1

WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

COPY . .
CMD ["gunicorn", "myproject.wsgi:application", "--bind", "0.0.0.0:8000"]

🐳 ステップ 2:docker-compose.prod.yml

version: '3.9'
services:
  web:
    build: .
    env_file: .env
    volumes:
      - .:/app
    expose:
      - 8000

  nginx:
    image: nginx:alpine
    ports:
      - "80:80"
    volumes:
      - ./nginx.conf:/etc/nginx/conf.d/default.conf
    depends_on:
      - web

🌐 ステップ 3:Nginx 設定

server {
    listen 80;
    server_name yourdomain.com;

    location / {
        proxy_pass http://web:8000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

🔐 ステップ 4:GitHub Actions 用の SSH 設定

  1. ローカルで SSH 鍵を生成:
ssh-keygen -t ed25519 -C "your_email@example.com"
  1. ~/.ssh/id_ed25519.pub を DigitalOcean の VM の authorized_keys に追加
  2. ~/.ssh/id_ed25519 を GitHub Secrets に追加(名前:DO_SSH_PRIVATE_KEY

🤖 ステップ 5:GitHub Actions ワークフロー

name: Django CD to DigitalOcean

on:
  push:
    branches: [main]

jobs:
  deploy:
    runs-on: ubuntu-latest

    steps:
    - name: Checkout code
      uses: actions/checkout@v3

    - name: Setup SSH
      run: |
        mkdir -p ~/.ssh
        echo "${{ secrets.DO_SSH_PRIVATE_KEY }}" > ~/.ssh/id_ed25519
        chmod 600 ~/.ssh/id_ed25519
        ssh-keyscan your.server.ip >> ~/.ssh/known_hosts

    - name: Deploy via SSH
      run: |
        ssh -i ~/.ssh/id_ed25519 deploy@your.server.ip << 'EOF'
          cd /home/deploy/myproject/
          git pull origin main
          docker compose -f docker-compose.prod.yml down
          docker compose -f docker-compose.prod.yml up -d --build
        EOF

your.server.ipdeploy は自身の環境に置き換えてください。


🔧 ステップ 6:.env の例

DJANGO_SECRET_KEY=your-secret
DEBUG=False
ALLOWED_HOSTS=yourdomain.com

📁 サーバ上のディレクトリ構成例

/home/deploy/myproject/
├── manage.py
├── myproject/
├── Dockerfile
├── docker-compose.prod.yml
├── .env
├── nginx.conf

✅ 成果

  • コードをプッシュするだけで自動デプロイ
  • 再ビルド & 再起動は GitHub Actions が実行
  • 人的ミスなしの本番反映が実現

🌟 おまけ

  • ✅ Sentry でエラー監視
  • systemd 経由で自動再起動
  • ✅ Let's Encrypt で HTTPS 対応

🧠 まとめ

このガイドを通じて、自動テスト・自動デプロイの CD 環境を Django × DigitalOcean 上に構築できました。スケールにも強く、チーム開発にも最適です。


Get in Touch with us

Chat with Us on LINE

iiitum1984

Speak to Us or Whatsapp

(+66) 83001 0222

Related Posts

Our Products