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

Cách thiết lập Django với Docker, Postgres, Redis Cache, Redis Message Queue và Celery: Hướng dẫn hoàn chỉnh

Đố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, tích hợp Docker với Django, Postgres, Redis, và Celery cung cấp một thiết lập 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ớ đệm và xử lý tác vụ bất đồng bộ của bạn. Đây là một chủ đề nâng cao của bài viết trước đây tại đâ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 thiết lập này?

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

  • Sức mạnh 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ớ đệm 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ụ dài hạn 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 đã tồn tại).
     
  • 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

Sắp xếp 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à thiết lập tối thiểu cho Django:

# Sử dụng ả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ỏ lộ 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ớ đệm 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 thử 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 ảnh

docker-compose build

 

Khởi chạy các container

docker-compose up

 

Chạy Migrations

docker-compose run web python manage.py migrate

 

Kiểm thử tác vụ Celery

Sử dụng shell Celery để kiểm thử 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 thử thiết lập

  • Truy cập ứng dụng Django tại http://localhost:8000.
     
  • Kiểm thử bộ nhớ đệm 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 sản xuất

Để làm cho thiết lập 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 đảo 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

Python Flask

Đọc thêm
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.