4.8 KiB
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 — алгоритм
- Загрузить
scripts/deploy.env(без перезаписи уже экспортированных переменных) - Прочитать
.deployed-commit(если нет файла — взятьHEAD~1) git diff --name-only <last_commit> HEAD→ определить:changed_client— есть изменения вclient/changed_server— есть изменения вserver/changed_shared— есть изменения вshared/
- Если
changed_shared→changed_server=true,changed_client=true(shared используется обоими) - Если ни один флаг не true →
echo "nothing to deploy"→ exit 0 - Клиент:
cd client && npm ci && npm run build→ rsync/tarclient/dist/→$DEPLOY_PATH/www/ - Сервер: rsync/tar
server/иshared/→$DEPLOY_PATH/→ remotenpm ci && npx prisma generate && npx prisma migrate deploy→ remotesystemctl restart craftshop-api - Если все шаги успешны → записать
HEADв.deployed-commit - Флаг
--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:
- Установка Node.js 22.x (NodeSource)
- Создание пользователя deploy
- Создание директорий
/opt/craftshop/{server,www,uploads} - systemd unit
craftshop-api - Установка и настройка nginx (статика + proxy /api + /uploads)
- NetBird VPN (подключение к сети)
- Настройка
.env - Запуск сервиса и проверка
GET /health
Безопасность
prisma migrate deploy— не сбрасывает БД, только накатывает новые миграции*.dbисключены из rsync.envи.dev_envисключены из rsync.deployed-commit— локальный файл, добавлен в .gitignore