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
bash /opt/scripts/check_resources.sh
# GREEN → продолжай / YELLOW → cleanup / RED → СТОП
git stash # сохранить незакоммиченное
git pull origin main # актуальная версия
docker compose config # валидация docker-compose.yml
# БД
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
docker compose pull # обновить образы
docker compose up -d --no-build # запустить
docker compose ps # проверить статус
docker compose logs --tail=50 # проверить логи
# HTTP-статус
curl -s -o /dev/null -w "%{http_code}" http://localhost:{port}/
# Логи на ошибки
docker compose logs --tail=100 | grep -i "error\|fatal\|exception"
Только после: "работает на staging, деплоим" от оператора.
# Prod — отдельный compose файл или override
docker compose -f docker-compose.prod.yml up -d
# Откат к предыдущей версии образа
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 ✅ → сообщить оператору