اتصال جنگو به پستگرس در کانتینر
در فصل قبل با 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 کل محیط توسعه را یکسان راهاندازی میکند.