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 設定
- ローカルで SSH 鍵を生成:
ssh-keygen -t ed25519 -C "your_email@example.com"
~/.ssh/id_ed25519.pubを DigitalOcean の VM のauthorized_keysに追加~/.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.ip や deploy は自身の環境に置き換えてください。
🔧 ステップ 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
Related Posts
- モダンなサイバーセキュリティ監視・インシデント対応システムの設計 Wazuh・SOAR・脅威インテリジェンスを用いた実践的アーキテクチャ
- AI時代におけるクラシック・プログラミングの考え方
- SimpliPOSFlex 現場の「現実」に向き合うためのPOS(日本市場向け)
- 古典的プログラミング思考 ― Kernighan & Pike から学び続けること
- コードを書く前に:私たちが必ずお客様にお聞きする5つの質問
- なぜ利益を生むシステムでも「本当の価値」を持たないことがあるのか
- 彼女の世界(Her World)
- Temporal × ローカルLLM × Robot Framework 日本企業向け「止まらない・壊れない」業務自動化アーキテクチャ
- RPA × AI: なぜ「自動化」は知能なしでは破綻し、 知能は制御なしでは信頼されないのか
- 国境紛争・代理戦争をどうシミュレーションするか
- 検索とアクセスを最初に改善する 大学図書館の戦略的価値を最短で回復する方法
- 工場とリサイクル事業者をつなぐ、新しいスクラップ取引プラットフォームを開発しています
- Python で MES(製造実行システム)を開発する方法 ― 日本の製造現場に適した実践ガイド ―
- MES・ERP・SCADA の違いとは? ― 製造業における役割と境界を分かりやすく解説
- なぜソフトウェア開発の学習はこんなにも「つらい」のか ― そして、その解決方法
- 企業はどちらを選ぶのか:GPT型AIか、Gemini型AIか
- GPT-5.2 が GPT-5.1 より真価を発揮する実務ユースケース
- ChatGPT 5.2 と 5.1 の違い ― たとえ話でわかりやすく解説
- なぜ成長する企業は 既製ソフトウェアでは限界を迎えるのか ― 成功している企業が選ぶ次の一手 ―
- コンピュータビジョンのエッジ化と低リソース環境:日本企業における課題と新たな機会*













