🚀 Развёртывание Django + PostgreSQL с помощью Docker
Использование Docker упрощает развёртывание веб-приложений, позволяя создать изолированную среду для каждого сервиса. В этой статье мы создадим простое Django-приложение с базой данных PostgreSQL, используя docker-compose
.
📁 Структура проекта
myproject/
├── app/
│ ├── Dockerfile
│ ├── requirements.txt
│ └── manage.py (и остальные файлы Django)
├── .env
├── docker-compose.yml
└── README.md
Создайте директорию myproject
, перейдите в неё и инициализируйте Django:
django-admin startproject core app/
В папке app/
создайте файл Dockerfile
:
# Dockerfile
FROM python:3.11-slim
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1
WORKDIR /app
COPY requirements.txt .
RUN pip install --upgrade pip && pip install -r requirements.txt
COPY . .
В app/requirements.txt
укажите зависимости:
Django>=4.2,<5.0
psycopg2-binary>=2.9
Создайте в корне файл docker-compose.yml
:
version: '3.9'
services:
web:
build: ./app
command: python manage.py runserver 0.0.0.0:8000
volumes:
- ./app:/app
ports:
- "8000:8000"
env_file:
- .env
depends_on:
- db
db:
image: postgres:14
volumes:
- postgres_data:/var/lib/postgresql/data/
environment:
POSTGRES_DB: ${POSTGRES_DB}
POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
env_file:
- .env
volumes:
postgres_data:
Создайте файл .env
в корне проекта:
POSTGRES_DB=postgres
POSTGRES_USER=postgres
POSTGRES_PASSWORD=postgres
В app/core/settings.py
замените DATABASES
:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': os.getenv('POSTGRES_DB'),
'USER': os.getenv('POSTGRES_USER'),
'PASSWORD': os.getenv('POSTGRES_PASSWORD'),
'HOST': 'db',
'PORT': '5432',
}
}
Выполните команды:
docker-compose build
docker-compose run web python manage.py migrate
docker-compose up
Перейдите в браузере по адресу:
👉 http://localhost:8000
docker-compose run web python manage.py createsuperuser
Теперь у вас есть полностью изолированное Django-приложение, работающее с PostgreSQL, готовое к разработке или деплою.
Автор: Евгений Морковин
2 комментария
Как развернуть проект в интернете?
На vps сервере или https://dockerhosting.ru