Docker、Postgres、Redisキャッシュ、Redisメッセージキュー、Celeryを用いたDjangoの設定方法

By khoanc, at: 2024年9月12日21:58

Estimated Reading Time: __READING_TIME__ minutes

How to Set Up Django with Docker, Postgres, Redis Cache, Redis Message Queue, and Celery
How to Set Up Django with Docker, Postgres, Redis Cache, Redis Message Queue, and Celery

スケーラブルなウェブアプリケーションを構築する開発者にとって、DockerDjangoPostgresRedisCeleryを統合することは、効率的で堅牢なセットアップを提供します。

このガイドでは、DockerとDocker Composeを使用して、データベース、キャッシング、非同期タスク処理のニーズに対応するコンテナ化された開発環境を作成する手順を説明します。これは、以前のブログ記事 - Dockerを使用してPostgreSQLでDjangoアプリを設定する方法 - の高度なトピックです。

 

なぜこのセットアップなのか?

 

これらのテクノロジーを組み合わせることで、以下のメリットがあります。

  • 強力なデータベースPostgresは、信頼性が高く、機能豊富なリレーショナルデータベースです。
     
  • 効率的なキャッシングRedisはデータベースの負荷を軽減し、リクエスト処理を高速化します。
     
  • 非同期処理Celeryは、メールの送信や画像の処理などの長時間実行されるタスクを処理します。
     
  • 移植性:Dockerは、すべての環境で一貫性を確保します。

 

前提条件

 

始める前に、以下の条件を満たしていることを確認してください。

  • システムにDockerとDocker Composeがインストールされている。
     
  • Djangoプロジェクト(新規または既存)。
     
  • Docker、Redis、Celeryの基本的な知識。

 

ステップ1:プロジェクトディレクトリのセットアップ

 

明確性とスケーラビリティのためにプロジェクトを整理します。

 

django-docker-redis/
├── django_project/
├── Dockerfile
├── docker-compose.yml
├── requirements.txt
├── celery_tasks/

 

ステップ2:Dockerfileの作成

 

Dockerfileは、アプリケーションの環境を定義します。Djangoの最小限のセットアップを以下に示します。

 

# 軽量のPythonベースイメージを使用
FROM python:3.10-slim

# コンテナ内の作業ディレクトリを設定
WORKDIR /app

# 依存関係をコピーしてインストール
COPY requirements.txt /app/
RUN pip install --no-cache-dir -r requirements.txt

# アプリケーションコードをコンテナにコピー
COPY . /app/

# Django開発サーバー用のポート8000を公開
EXPOSE 8000

# Djangoアプリを実行するコマンド
CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]

 

ステップ3:Docker Composeの設定

 

docker-compose.ymlファイルは、複数のサービスを管理します。Django、Postgres、Redis、Celeryを定義する方法を以下に示します。

 

version: '3.8'

services:
  web:
    build: .
    command: python manage.py runserver 0.0.0.0:8000
    volumes:
      - .:/app
    ports:
      - "8000:8000"
    depends_on:
      - db
      - redis

  db:
    image: postgres:13
    environment:
      POSTGRES_USER: glinteco
      POSTGRES_PASSWORD: glinteco
      POSTGRES_DB: glinteco

  redis:
    image: redis:6

  celery:
    build: .
    command: celery -A django_project worker --loglevel=info
    depends_on:
      - redis
      - db

 

 

ステップ4:Django設定の更新

 

データベースの設定

 

settings.pyで、Postgresに接続するようにDATABASES設定を更新します。

 

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'glinteco',
        'USER': 'glinteco',
        'PASSWORD': 'glinteco',
        'HOST': 'db',
        'PORT': 5432,
    }
}

 

Redisをキャッシュバックエンドとして設定

 

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.redis.RedisCache',
        'LOCATION': 'redis://redis:6379/1',
    }
}

 

 

Redis用のCeleryの設定

 

CELERY_BROKER_URL = 'redis://redis:6379/0'
CELERY_ACCEPT_CONTENT = ['json']
CELERY_TASK_SERIALIZER = 'json'

 

ステップ5:Celeryタスクの作成とテスト

 

Celeryの設定を追加

 

あなたのDjangoプロジェクトで、celery.pyファイルを作成します。

 

from celery import Celery

app = Celery('django_project')
app.config_from_object('django.conf:settings', namespace='CELERY')
app.autodiscover_tasks()

 

サンプルタスクの作成

 

あなたのアプリで、tasks.pyを追加します。

 

from celery import shared_task

@shared_task
def add(x, y):
    return x + y

 

ステップ6:コンテナのビルドと実行

 

イメージのビルド

 

docker-compose build

 

コンテナの起動

 

docker-compose up

 

マイグレーションの実行

 

docker-compose run web python manage.py migrate

 

Celeryタスクのテスト

 

Celeryシェルを使用してタスクをテストします。

 

docker-compose run celery celery -A django_project call tasks.add --args='[10, 20]'

 

ステップ7:セットアップのテスト

 

  • http://localhost:8000でDjangoアプリにアクセスします。
     
  • APIエンドポイントを使用してRedisキャッシングをテストします。
     
  • Celeryタスクが非同期に処理されていることを確認します。
     

本番環境向け機能拡張

 

このセットアップを本番環境対応にするには、以下の点を考慮します。

 

  • 開発サーバーをgunicornに置き換えます。
     
  • nginxをリバースプロキシとして使用します。
     
  • Flowerを使用してCeleryタスクを監視します。
     
  • .envファイルを使用して機密情報を保護します。

 

結論

 

このガイドでは、DjangoDockerPostgresRedis Cache、Redis Message QueueCelery を設定する方法を説明しました。このアーキテクチャにより、アプリケーションは高トラフィックを処理し、パフォーマンスを最適化し、非同期タスクを効率的に管理できます。

さらに詳しく知りたい場合:

Tag list:
- Django Docker setup
- Celery task queue setup
- Docker-compose for Django and Postgres
- Docker Postgres integration
- Redis Cache with Django
- Celery integration in Django
- Django asynchronous task queue
- Configure Celery in Django project
- Asynchronous Django tasks
- Django Redis caching
- Django tasks with Celery and Redis
- Multi-container Docker setup for Django
- Docker Postgres Redis Django guide
- Redis Message Queue with Celery
- Docker setup for Django with Redis Cache

Related

Docker Docker-Compose

Read more

Subscribe

Subscribe to our newsletter and never miss out lastest news.