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


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: