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

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

スケーラブルなウェブアプリケーションを構築する開発者にとって、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キャッシュ、RedisメッセージキューCeleryと共に設定する方法を説明しました。このアーキテクチャにより、アプリケーションは高トラフィックを処理し、パフォーマンスを最適化し、非同期タスクを効率的に管理できます。

さらに詳しく知るには:

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

Python Flask

Read more
Docker Docker-Compose

Read more
Subscribe

Subscribe to our newsletter and never miss out lastest news.