architect/patterns/deploy-service.md

type: pattern
layer: arch
object: service
aspect: deploy
title: "Деплой сервиса"
status: active
version: 1.0.0
date: 2026-04-14
parent: ../standards/arch-deployment-operation.md
deps:
- ../standards/arch-deployment-operation.md
- ../standards/arch-platform-policy.md
- ../standards/arch-cicd-pipeline.md


Деплой сервиса

Рецепт безопасного деплоя Docker-сервиса на сервер платформы.


ЗАЧЕМ

Деплой без протокола = пропущенные шаги = даунтайм или потеря данных. Паттерн фиксирует обязательную последовательность.


КОНТЕКСТ

Применять когда:
- Первый деплой нового Docker-сервиса
- Обновление существующего сервиса (новая версия образа)
- Деплой после изменений в docker-compose.yml


ШАГИ

0. Проверить ресурсы (ВСЕГДА)

bash /opt/scripts/check_resources.sh
# GREEN → продолжай / YELLOW → cleanup / RED → СТОП

1. Подготовить (dev/staging)

git stash                          # сохранить незакоммиченное
git pull origin main               # актуальная версия
docker compose config              # валидация docker-compose.yml

2. Резервная копия (если есть данные)

# БД
docker exec {db} pg_dump -U {user} {db} > backup_$(date +%Y%m%d).sql

# Volumes (если нужно)
docker run --rm -v {volume}:/data -v $(pwd):/backup \
  alpine tar czf /backup/vol_$(date +%Y%m%d).tar.gz /data

3. Развернуть

docker compose pull                # обновить образы
docker compose up -d --no-build    # запустить
docker compose ps                  # проверить статус
docker compose logs --tail=50      # проверить логи

4. Проверить (обязательно)

# HTTP-статус
curl -s -o /dev/null -w "%{http_code}" http://localhost:{port}/

# Логи на ошибки
docker compose logs --tail=100 | grep -i "error\|fatal\|exception"

5. Деплой в prod

Только после: "работает на staging, деплоим" от оператора.

# Prod — отдельный compose файл или override
docker compose -f docker-compose.prod.yml up -d

6. Откат (если что-то сломалось)

# Откат к предыдущей версии образа
docker compose down
docker compose up -d --no-build    # использует предыдущий тег

# Или полный откат
git stash pop
docker compose up -d

ПРИМЕР

# Деплой md-viewer обновление
bash /opt/scripts/check_resources.sh          # GREEN ✅
cd /opt/claude-workspace/infra/@md-viewer.service/
docker compose pull
docker compose up -d
curl -s -o /dev/null -w "%{http_code}" http://localhost:8899/
# 200 ✅ → сообщить оператору

ИСКЛЮЧЕНИЯ


СВЯЗАННЫЕ ДОКУМЕНТЫ