architect/_archive/2025-11-26-cleanup/templates/DEPLOYMENT.template.md

🚀 DEPLOYMENT - Развёртывание

Проект: {PROJECT_NAME}
Последнее обновление: {ДАТА}


📑 СОДЕРЖАНИЕ

  1. Окружения
  2. Требования
  3. Development
  4. Staging
  5. Production
  6. Rollback
  7. Мониторинг

🌍 ОКРУЖЕНИЯ {#окружения}

Окружение URL Сервер Назначение
Development http://localhost:{PORT} Локальная машина Разработка
Staging https://staging.{DOMAIN} {СЕРВЕР_STAGING} Тестирование
Production https://{DOMAIN} {СЕРВЕР_PROD} Боевой

✅ ТРЕБОВАНИЯ {#требования}

Системные

Программное обеспечение


💻 DEVELOPMENT {#development}

Локальная установка

# 1. Клонировать репозиторий
git clone {REPO_URL}
cd {PROJECT_NAME}

# 2. Создать venv и установить зависимости
python -m venv venv
source venv/bin/activate
pip install -r requirements.txt

# 3. Настроить .env
cp .env.example .env
# Отредактировать .env

# 4. Инициализировать БД
alembic upgrade head

# 5. Запустить
{КОМАНДА_ЗАПУСКА_DEV}

Docker (альтернатива)

# Development с Docker Compose
docker-compose -f docker-compose.dev.yml up

🧪 STAGING {#staging}

Развёртывание на staging

# SSH на staging сервер
ssh {USER}@{STAGING_SERVER}

# Обновить код
cd /path/to/{PROJECT_NAME}
git pull origin develop

# Активировать venv
source venv/bin/activate

# Обновить зависимости
pip install -r requirements.txt

# Применить миграции
alembic upgrade head

# Перезапустить сервис
sudo systemctl restart {PROJECT_NAME}-staging

Docker (staging)

# На staging сервере
cd /path/to/{PROJECT_NAME}
git pull origin develop
docker-compose -f docker-compose.staging.yml up -d --build

🔴 PRODUCTION {#production}

⚠️ ВАЖНО: Чеклист перед deploy

Развёртывание на production

# SSH на production сервер
ssh {USER}@{PROD_SERVER}

# 1. Создать backup БД
sudo -u postgres pg_dump {DB_NAME} > /backup/db_$(date +%Y%m%d_%H%M%S).sql

# 2. Обновить код
cd /path/to/{PROJECT_NAME}
git fetch --tags
git checkout tags/v{VERSION}

# 3. Активировать venv
source venv/bin/activate

# 4. Обновить зависимости
pip install -r requirements.txt

# 5. Применить миграции БД
alembic upgrade head

# 6. Собрать статику (если frontend)
{КОМАНДА_СБОРКИ_FRONTEND}

# 7. Перезапустить сервис (zero-downtime)
sudo systemctl reload {PROJECT_NAME}
# или
sudo systemctl restart {PROJECT_NAME}

# 8. Проверить статус
sudo systemctl status {PROJECT_NAME}
curl https://{DOMAIN}/health

Docker (production)

# На production сервере
cd /path/to/{PROJECT_NAME}
git fetch --tags
git checkout tags/v{VERSION}

# Backup БД
docker exec {DB_CONTAINER} pg_dump -U {USER} {DB_NAME} > /backup/db_$(date +%Y%m%d_%H%M%S).sql

# Deploy
docker-compose -f docker-compose.prod.yml pull
docker-compose -f docker-compose.prod.yml up -d --no-deps --build {SERVICE_NAME}

# Проверить
docker-compose -f docker-compose.prod.yml ps
curl https://{DOMAIN}/health

⏪ ROLLBACK {#rollback}

Откат на предыдущую версию

# 1. SSH на сервер
ssh {USER}@{PROD_SERVER}

# 2. Вернуться к предыдущему тегу
cd /path/to/{PROJECT_NAME}
git checkout tags/v{PREVIOUS_VERSION}

# 3. Откатить миграции БД (если нужно)
alembic downgrade {PREVIOUS_MIGRATION_ID}

# 4. Восстановить зависимости
pip install -r requirements.txt

# 5. Перезапустить
sudo systemctl restart {PROJECT_NAME}

# 6. Проверить
curl https://{DOMAIN}/health

Восстановление из backup БД

# Остановить приложение
sudo systemctl stop {PROJECT_NAME}

# Восстановить БД
sudo -u postgres psql {DB_NAME} < /backup/db_{TIMESTAMP}.sql

# Запустить приложение
sudo systemctl start {PROJECT_NAME}

📊 МОНИТОРИНГ {#мониторинг}

Проверка статуса

# Статус сервиса
sudo systemctl status {PROJECT_NAME}

# Логи
sudo journalctl -u {PROJECT_NAME} -f

# Логи приложения
tail -f /var/log/{PROJECT_NAME}/app.log

# Docker логи
docker-compose logs -f {SERVICE_NAME}

Health checks

# HTTP health endpoint
curl https://{DOMAIN}/health

# Ожидаемый ответ
{"status": "ok", "version": "{VERSION}"}

# БД проверка
curl https://{DOMAIN}/health/db

# Redis проверка  
curl https://{DOMAIN}/health/redis

Метрики (если настроены)


🔧 CI/CD (опционально)

GitHub Actions

# .github/workflows/deploy.yml
name: Deploy to Production

on:
  push:
    tags:
      - 'v*'

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Deploy to server
        run: |
          # Деплой скрипт

GitLab CI

# .gitlab-ci.yml
deploy:production:
  stage: deploy
  only:
    - tags
  script:
    - # Деплой команды

🔐 SECRETS MANAGEMENT

Production secrets

НЕ КОММИТИТЬ в git:
- .env файлы
- API ключи
- Пароли БД
- SSH ключи

Хранить:
- В переменных окружения сервера
- В vault (HashiCorp Vault, AWS Secrets Manager)
- В CI/CD secrets

# Пример: установка secrets на сервере
echo "DATABASE_URL=postgresql://..." >> /etc/{PROJECT_NAME}/.env
chmod 600 /etc/{PROJECT_NAME}/.env

🆘 TROUBLESHOOTING

Проблема: Сервис не стартует

# Проверить логи
sudo journalctl -u {PROJECT_NAME} -n 50

# Проверить конфиг
{КОМАНДА_ПРОВЕРКИ_КОНФИГА}

# Проверить порты
sudo netstat -tulpn | grep {PORT}

Проблема: БД недоступна

# Проверить подключение
psql -h localhost -U {DB_USER} -d {DB_NAME}

# Проверить статус PostgreSQL
sudo systemctl status postgresql

Последнее обновление: {ДАТА}
Автор: {АВТОР}