Files
shop-server/docs/superpowers/specs/2026-05-14-auto-deploy-design.md
T

4.8 KiB

Auto-Deploy для Craftshop

Дата: 2026-05-14 Статус: Утверждён

Мотивация

Заменить ручной SSH-деплой (deploy-ssh.sh) на скрипт с автоматическим детектом изменений через git diff. Деплоятся только те компоненты (client/server), которые реально изменились с последнего деплоя. Удалить устаревшие скрипты и документацию.

Состав репозитория после изменений

Новые файлы

Файл Назначение
scripts/deploy-auto.sh Основной скрипт — детект изменений, сборка, деплой
scripts/SERVER_SETUP.md Инструкция с командами для первичной настройки LXC от root

Изменённые файлы

Файл Изменение
.gitignore Добавить .deployed-commit
README.md Убрать ссылки на удалённые doc'и, добавить секцию по деплою

Удаляемые файлы

Файл Причина
scripts/deploy-ssh.sh Заменён на deploy-auto.sh
scripts/deploy-ssh.ps1 Не нужен
scripts/deploy.env.example Есть deploy.env
scripts/read-deploy-env.ps1 Не нужен
scripts/register-ssh-key-for-root.ps1 Разовое действие
scripts/complete-lan-deploy.ps1 Устарел
scripts/craftshop-remote-lan.env Устарел
scripts/server-bootstrap.sh Заменён на SERVER_SETUP.md
docs/deploy-changes.md Неактуально
docs/test-deploy-proxmox.md Неактуально
docs/nginx-upload-limit.md Неактуально

deploy-auto.sh — алгоритм

  1. Загрузить scripts/deploy.env (без перезаписи уже экспортированных переменных)
  2. Прочитать .deployed-commit (если нет файла — взять HEAD~1)
  3. git diff --name-only <last_commit> HEAD → определить:
    • changed_client — есть изменения в client/
    • changed_server — есть изменения в server/
    • changed_shared — есть изменения в shared/
  4. Если changed_sharedchanged_server=true, changed_client=true (shared используется обоими)
  5. Если ни один флаг не true → echo "nothing to deploy" → exit 0
  6. Клиент: cd client && npm ci && npm run build → rsync/tar client/dist/$DEPLOY_PATH/www/
  7. Сервер: rsync/tar server/ и shared/$DEPLOY_PATH/ → remote npm ci && npx prisma generate && npx prisma migrate deploy → remote systemctl restart craftshop-api
  8. Если все шаги успешны → записать HEAD в .deployed-commit
  9. Флаг --force — игнорировать diff и деплоить всё

Интерфейс команд

Команда Что делает
./scripts/deploy-auto.sh Деплой изменений
./scripts/deploy-auto.sh --force Полный деплой всех компонентов
./scripts/deploy-auto.sh --frontend-only Только клиент
./scripts/deploy-auto.sh --backend-only Только сервер

Поддерживаемые конфиги (deploy.env)

Обязательные: DEPLOY_HOST, DEPLOY_PATH
Опциональные: DEPLOY_USER (root), DEPLOY_SSH_IDENTITY, DEPLOY_RESTART_CMD, DEPLOY_FRONTEND_DIST

Transport

Переиспользуется логика из текущего deploy-ssh.sh:

  • Linux/macOS → rsync
  • Git Bash Windows → tar | ssh (из‑за проблем cwRsync)

SERVER_SETUP.md — структура

Инструкция с блоками копируемых команд для последовательного выполнения от root:

  1. Установка Node.js 22.x (NodeSource)
  2. Создание пользователя deploy
  3. Создание директорий /opt/craftshop/{server,www,uploads}
  4. systemd unit craftshop-api
  5. Установка и настройка nginx (статика + proxy /api + /uploads)
  6. NetBird VPN (подключение к сети)
  7. Настройка .env
  8. Запуск сервиса и проверка GET /health

Безопасность

  • prisma migrate deploy — не сбрасывает БД, только накатывает новые миграции
  • *.db исключены из rsync
  • .env и .dev_env исключены из rsync
  • .deployed-commit — локальный файл, добавлен в .gitignore