Cách thiết lập Django với Docker, Postgres, Redis Cache, Redis Message Queue và Celery

By khoanc, at: 21:58 Ngày 12 tháng 9 năm 2024

Thời gian đọc ước tính: __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

Đối với các nhà phát triển xây dựng các ứng dụng web có khả năng mở rộng, việc tích hợp Docker với Django, Postgres, Redis, và Celery cung cấp một cấu hình hiệu quả và mạnh mẽ. 

Hướng dẫn này sẽ hướng dẫn bạn từng bước tạo một môi trường phát triển container hóa bằng Docker và Docker Compose để xử lý các nhu cầu về cơ sở dữ liệu, bộ nhớ cache và xử lý tác vụ bất đồng bộ. Đây là một chủ đề nâng cao của bài đăng trên blog trước đây ở đây - Cách thiết lập ứng dụng Django với PostgreSQL sử dụng Docker 

 

Tại sao lại sử dụng cấu hình này?

 

Kết hợp các công nghệ này cung cấp:

  • Khả năng mạnh mẽ của cơ sở dữ liệu: Postgres là một cơ sở dữ liệu quan hệ đáng tin cậy, giàu tính năng.
     
  • Bộ nhớ cache hiệu quả: Redis giảm tải cho cơ sở dữ liệu và tăng tốc độ xử lý yêu cầu.
     
  • Xử lý bất đồng bộ: Celery xử lý các tác vụ chạy lâu như gửi email hoặc xử lý hình ảnh.
     
  • Khả năng di chuyển: Docker đảm bảo tính nhất quán trên tất cả các môi trường.

 

Điều kiện tiên quyết

 

Trước khi bắt đầu, hãy đảm bảo bạn đã có:

  • Docker và Docker Compose được cài đặt trên hệ thống của bạn.
     
  • Một dự án Django (mới hoặc cũ).
     
  • Kiến thức cơ bản về Docker, Redis và Celery.

 

Bước 1: Thiết lập thư mục dự án của bạn

 

Tổ chức dự án của bạn để đảm bảo tính rõ ràng và khả năng mở rộng:

 

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

 

Bước 2: Tạo Dockerfile

 

Tệp Dockerfile định nghĩa môi trường của ứng dụng của bạn. Dưới đây là cấu hình tối thiểu cho Django:

 

# Sử dụng hình ảnh cơ sở Python nhẹ
FROM python:3.10-slim

# Thiết lập thư mục làm việc trong container
WORKDIR /app

# Sao chép và cài đặt các phụ thuộc
COPY requirements.txt /app/
RUN pip install --no-cache-dir -r requirements.txt

# Sao chép mã ứng dụng vào container
COPY . /app/

# Bật cổng 8000 cho máy chủ phát triển Django
EXPOSE 8000

# Lệnh để chạy ứng dụng Django
CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]

 

Bước 3: Cấu hình Docker Compose

 

Tệp docker-compose.yml quản lý nhiều dịch vụ. Dưới đây là cách định nghĩa Django, Postgres, Redis và 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

 

 

Bước 4: Cập nhật cài đặt Django

 

Cấu hình cơ sở dữ liệu

 

Trong settings.py, cập nhật cài đặt DATABASES để kết nối với Postgres:

 

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

 

Đặt Redis làm bộ nhớ cache phía sau

 

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

 

 

Cấu hình Celery cho Redis

 

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

 

Bước 5: Tạo và kiểm tra các tác vụ Celery

 

Thêm cấu hình Celery

 

Trong dự án Django của bạn, tạo tệp celery.py:

 

from celery import Celery

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

 

Tạo một tác vụ mẫu

 

Trong ứng dụng của bạn, thêm tasks.py:

 

from celery import shared_task

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

 

Bước 6: Xây dựng và chạy các container

 

Xây dựng các hình ảnh

 

docker-compose build

 

Khởi động các container

 

docker-compose up

 

Chạy Migrations

 

docker-compose run web python manage.py migrate

 

Kiểm tra tác vụ Celery

 

Sử dụng shell Celery để kiểm tra tác vụ của bạn:

 

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

 

Bước 7: Kiểm tra cấu hình

 

  • Truy cập ứng dụng Django tại http://localhost:8000.
     
  • Kiểm tra bộ nhớ cache Redis với điểm cuối API.
     
  • Xác minh rằng các tác vụ Celery được xử lý bất đồng bộ.
     

Cải tiến cho môi trường sản xuất

 

Để làm cho cấu hình này sẵn sàng cho sản xuất:

 

  • Thay thế máy chủ phát triển bằng gunicorn.
     
  • Sử dụng nginx làm proxy ngược.
     
  • Giám sát các tác vụ Celery bằng Flower.
     
  • Bảo mật thông tin nhạy cảm bằng tệp .env.

 

Kết luận

 

Hướng dẫn này đã trang bị cho bạn khả năng thiết lập Django với Docker, Postgres, Redis Cache, Redis Message Queue, và Celery. Với kiến trúc này, ứng dụng của bạn có thể xử lý lưu lượng truy cập cao, tối ưu hóa hiệu suất và quản lý các tác vụ bất đồng bộ một cách hiệu quả.

Để tìm hiểu thêm:

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

Liên quan

Docker Docker-Compose

Đọc thêm

Theo dõi

Theo dõi bản tin của chúng tôi và không bao giờ bỏ lỡ những tin tức mới nhất.