Вот подробная инструкция по созданию архитектуры проекта на Django с использованием Docker, Poetry. Эта инструкция охватывает все этапы, начиная с инициализации проекта до его запуска в Docker-контейнере.
1. Создание структуры проекта
Начнем с создания структуры директорий:
mkdir -p project-root/src/{apps,config,feat,infra/{compose-files},templates,tests,validators}
cd project-root
2. Инициализация Poetry проекта
Инициализируем новый проект с использованием Poetry:
poetry init
Следуйте инструкциям для настройки pyproject.toml
. После этого добавьте зависимости для Django и PostgreSQL:
poetry add django psycopg2-binary
3. Создание Django проекта
Теперь создадим Django проект в папке config
:
poetry run django-admin startproject config src/config
4. Настройка базы данных
Отредактируйте файл src/config/settings.py
для подключения к базе данных PostgreSQL через переменные окружения. Убедитесь, что файл выглядит примерно так:
import os
SECRET_KEY = os.getenv('SECRET_KEY', 'your-default-secret-key')
DEBUG = os.getenv('DEBUG', 'False') == 'True'
ALLOWED_HOSTS = os.getenv('ALLOWED_HOSTS', 'localhost').split(',')
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': os.getenv('POSTGRES_DB', 'project_root'),
'USER': os.getenv('POSTGRES_USER', 'project_root'),
'PASSWORD': os.getenv('POSTGRES_PASSWORD', 'project_root'),
'HOST': os.getenv('POSTGRES_HOST', 'db'),
'PORT': os.getenv('POSTGRES_PORT', '5432'),
}
}
# STATIC, MEDIA, TEMPLATES, etc.
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
5. Настройка Docker
Создайте Dockerfile в корне проекта:
# Используем официальный образ Python 3.11
FROM python:3.11-slim
# Установка зависимостей для PostgreSQL
RUN apt-get update && apt-get install -y libpq-dev gcc
# Создание рабочего каталога
WORKDIR /app
# Копирование файлов проекта
COPY pyproject.toml poetry.lock ./
# Установка Poetry
RUN pip install poetry
# Установка зависимостей
RUN poetry install --no-root
# Копирование всего проекта
COPY . .
# Открытие порта 8000
EXPOSE 8000
# Запуск сервера разработки Django
CMD ["poetry", "run", "python", "src/manage.py", "runserver", "0.0.0.0:8000"]
6. Настройка Docker Compose
Создайте docker-compose.dev.yaml
в папке infra/compose-files
:
version: '3.8'
services:
web:
build:
context: ../../..
dockerfile: Dockerfile
volumes:
- .:/app
ports:
- "8000:8000"
environment:
- SECRET_KEY=your-secret-key
- DEBUG=True
- ALLOWED_HOSTS=localhost,127.0.0.1
- POSTGRES_DB=project_root
- POSTGRES_USER=project_root
- POSTGRES_PASSWORD=project_root
- POSTGRES_HOST=db
- POSTGRES_PORT=5432
depends_on:
- db
db:
image: postgres:13
volumes:
- postgres_data:/var/lib/postgresql/data
environment:
POSTGRES_USER: project_root
POSTGRES_PASSWORD: project_root
POSTGRES_DB: project_root
volumes:
postgres_data:
7. Создание первого приложения
Создайте папку для приложения и выполните команду startapp
:
mkdir -p src/apps/home
poetry run python src/manage.py startapp home src/apps/home
8. Регистрация приложения
Добавьте ваше приложение в INSTALLED_APPS
в src/config/settings.py
:
INSTALLED_APPS = [
# Django Apps
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
# Your Apps
'apps.home',
]
9. Настройка и запуск проекта
Теперь можно запускать проект:
-
Соберите и запустите контейнеры:
docker-compose -f src/infra/compose-files/docker-compose.dev.yaml up --build
-
Выполните миграции:
docker-compose -f src/infra/compose-files/docker-compose.dev.yaml run web poetry run python src/manage.py migrate
-
Создайте суперпользователя:
docker-compose -f src/infra/compose-files/docker-compose.dev.yaml run web poetry run python src/manage.py createsuperuser
Теперь проект Django готов и запущен в Docker-контейнере. Вы можете продолжать разрабатывать приложения, добавлять новые зависимости через Poetry и запускать их в контейнере.
10. Тестирование и разработка
Для запуска тестов:
docker-compose -f src/infra/compose-files/docker-compose.dev.yaml run web poetry run python src/manage.py test
Для запуска сервера:
docker-compose -f src/infra/compose-files/docker-compose.dev.yaml up
Следуя этим шагам, вы создадите Django проект с аккуратной и гибкой архитектурой, которая хорошо подходит для разработки и масштабирования.
Написать комментарий