# Деплой на VPS (инкрементальный) Скрипт `scripts/deploy-vps.mjs` загружает содержимое `public/` на VPS, передавая только изменённые файлы. ## Принцип работы 1. **Манифест** (`.deploy-manifest.json`) хранит `mtime` и `size` каждого файла с прошлого деплоя. 2. При запуске скрипт сканирует `public/`, сравнивает с манифестом: - Файлы с изменившимся `mtime` или `size` — загружаются. - Файлы, которых нет локально, но есть в манифесте — удаляются с сервера. 3. Изменённые файлы пакуются в `tar` и передаются **одним SSH-соединением** (без сжатия, чтобы не тратить CPU на уже сжатые медиа). 4. Манифест обновляется после успешного деплоя. При первом запуске (манифест пуст) заливаются все файлы — ~3 минуты на ~400 файлов. Повторный деплой (1–10 изменившихся файлов) — 2–5 секунд. ## Запуск ```bash npm run deploy:vps # или напрямую node scripts/deploy-vps.mjs [sourceDir] ``` По умолчанию `sourceDir = public`. ## Рецепты ### Только в Coolify Запрос пользователя: «задеплой в Coolify», «задеплой на VPS». ```bash npm run deploy:vps ``` Нужны разрешения: **all** (SSH-ключ `~/.ssh/beget`, доступ к файлам `public/`). ### Везде (VPS + GitVerse) ```bash npm run deploy ``` Выполняет `deploy:vps`, затем `sync-gitverse`. ## Конфигурация - **SSH-ключ:** `~/.ssh/beget` - **Хост:** `root@155.212.186.39` - **Целевая папка:** `/data/static-site` - **Манифест:** `.deploy-manifest.json` в корне проекта (не коммитится) ## Сброс манифеста Если нужно залить всё с нуля — удалить `.deploy-manifest.json`: ```bash rm .deploy-manifest.json ```