Ответ
В моем последнем проекте на Django процесс перед деплоем включал следующие этапы:
1. Сборка и тестирование:
# Запуск тестовой сборки
python manage.py test --settings=settings.test
pytest --cov=.
# Проверка качества кода
flake8 .
black --check .
2. Подготовка артефактов:
- Сбор статических файлов:
python manage.py collectstatic - Применение миграций БД:
python manage.py makemigrations && python manage.py migrate - Создание Docker-образа с тегами версий
3. Staging-развертывание:
# docker-compose.staging.yml
version: '3.8'
services:
web:
build: .
environment:
- DJANGO_SETTINGS_MODULE=settings.staging
- DATABASE_URL=postgresql://...
4. Проверки перед production:
- Smoke-тесты на staging
- Проверка метрик (response time < 200ms, error rate < 0.1%)
- Валидация конфигурации Nginx и Gunicorn
- Бэкап production базы данных
5. Подготовка миграций:
# migrations/0002_add_user_profile.py
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [('users', '0001_initial')]
operations = [
migrations.AddField(
model_name='user',
name='profile_picture',
field=models.ImageField(null=True, upload_to='profiles/')
)
]