فصل پنجم: داکرایز کردن یک پروژه‌ی جنگو

افزودن پستگرس با docker compose

اتصال جنگو به پستگرس در کانتینر

در فصل قبل با docker compose آشنا شدیم؛ حالا آن را برای پروژه‌ی جنگوی خودمان کامل می‌کنیم. فایل docker-compose.yml:

services:
  web:
    build: .
    command: python manage.py runserver 0.0.0.0:8000
    volumes:
      - .:/code
    ports:
      - "8000:8000"
    env_file: .env
    depends_on:
      - db

  db:
    image: postgres:16
    env_file: .env
    volumes:
      - pgdata:/var/lib/postgresql/data

volumes:
  pgdata:

فایل .env متغیرهای مشترک بین جنگو و پستگرس را نگه می‌دارد:

POSTGRES_DB=appdb
POSTGRES_USER=appuser
POSTGRES_PASSWORD=apppass
DATABASE_URL=postgres://appuser:apppass@db:5432/appdb

در فایل settings.py جنگو، تنظیمات پایگاه‌داده باید این مقدار را از متغیر محیطی بخواند، معمولاً با کتابخانه‌ی django-environ:

import environ

env = environ.Env()
DATABASES = {
    "default": env.db("DATABASE_URL")
}

پس از بالا آوردن سرویس‌ها با docker compose up -d، باید مایگریشن‌های جنگو را داخل کانتینر اجرا کنید:

docker compose exec web python manage.py migrate
docker compose exec web python manage.py createsuperuser

از این پس، پروژه‌ی جنگوی شما و پایگاه‌داده‌اش کاملاً در کانتینر اجرا می‌شوند و هر همکار جدید فقط با docker compose up کل محیط توسعه را یکسان راه‌اندازی می‌کند.

برای ذخیره‌ی پیشرفت و شرکت در آزمون، وارد شوید — رایگان است.