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


Đố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: