Files
site-portfolio/docs/vps-deploy.md
T

60 lines
2.3 KiB
Markdown

# Деплой на 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
```