60 lines
2.3 KiB
Markdown
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
|
|
```
|