Развертывание Django-приложения с PostgreSQL с использованием Docker Compose
Введение
Docker Compose позволяет легко развернуть несколько контейнеров и связать их между собой, что удобно при разработке и развертывании Django-приложений. В этом руководстве мы настроим проект Django с базой данных PostgreSQL, используя Docker и Docker Compose.
Требования
- Установленный Docker и Docker Compose.
- Базовые знания Django и работы с базами данных.
Шаг 1. Подготовка проекта Django
Создайте новую директорию для проекта Django и перейдите в нее:
mkdir my_django_project cd my_django_project
Создайте базовый Dockerfile для Django. Этот файл описывает, как будет выглядеть Docker-контейнер для Django:
# Dockerfile # Используем официальный образ Python FROM python:3.10 # Устанавливаем рабочую директорию внутри контейнера WORKDIR /app # Копируем файл зависимостей и устанавливаем их COPY requirements.txt /app/ RUN pip install -r requirements.txt # Копируем код приложения COPY . /app/ # Запуск сервера Django CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]
Создайте файл requirements.txt
и добавьте в него зависимости:
Django>=4.0 psycopg2
Инициализируйте Django-проект (если еще не создан):
docker run -it --rm -v "$PWD":/app -w /app python:3.10 django-admin startproject mysite .
Шаг 2. Настройка Docker Compose
Создайте файл docker-compose.yml
для настройки Docker Compose. Этот файл определяет контейнеры для Django и PostgreSQL:
version: '3' services: db: image: postgres:13 environment: POSTGRES_DB: mydb POSTGRES_USER: myuser POSTGRES_PASSWORD: mypassword volumes: - postgres_data:/var/lib/postgresql/data networks: - mynetwork web: build: . command: python manage.py runserver 0.0.0.0:8000 volumes: - .:/app ports: - "8000:8000" environment: - DJANGO_SETTINGS_MODULE=mysite.settings depends_on: - db networks: - mynetwork volumes: postgres_data: networks: mynetwork:
Добавьте PostgreSQL как базу данных в Django. Откройте файл настроек mysite/settings.py
и измените настройки базы данных:
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql', 'NAME': 'mydb', 'USER': 'myuser', 'PASSWORD': 'mypassword', 'HOST': 'db', # Название сервиса в docker-compose.yml 'PORT': 5432, } }
Создайте .env
файл для хранения переменных окружения, если требуется (например, для секретного ключа Django):
DJANGO_SECRET_KEY=supersecretkey
Шаг 3. Запуск контейнеров
Теперь, когда мы создали все необходимые файлы, можно запустить контейнеры с помощью Docker Compose.
Запустите Docker Compose:
docker-compose up -d
Эта команда создаст и запустит контейнеры в фоновом режиме.
Проверьте логи для отладки:
docker-compose logs -f
Выполните миграции базы данных для инициализации структуры базы данных:
docker-compose exec web python manage.py createsuperuser
Шаг 4. Тестирование приложения
После успешного запуска контейнеров и выполнения миграций откройте браузер и перейдите по адресу http://localhost:8000
, чтобы проверить, работает ли приложение.
Для доступа к админ-панели перейдите на http://localhost:8000/admin
и войдите с учетными данными суперпользователя.
Шаг 5. Управление контейнерами
Для удобного управления контейнерами можно использовать следующие команды:
Остановить контейнеры:
docker-compose down
Перезапустить контейнеры после изменения конфигурации:
docker-compose down && docker-compose up -d
Просмотр состояния контейнеров:
docker-compose ps
Заключение
С помощью Docker Compose мы создали удобное и изолированное окружение для Django-приложения и PostgreSQL. Такое окружение позволяет разработчикам и командам быстро развернуть приложение без необходимости в сложной конфигурации на локальной машине.