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

2.3 KiB

Деплой на 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 секунд.

Запуск

npm run deploy:vps
# или напрямую
node scripts/deploy-vps.mjs [sourceDir]

По умолчанию sourceDir = public.

Рецепты

Только в Coolify

Запрос пользователя: «задеплой в Coolify», «задеплой на VPS».

npm run deploy:vps

Нужны разрешения: all (SSH-ключ ~/.ssh/beget, доступ к файлам public/).

Везде (VPS + GitVerse)

npm run deploy

Выполняет deploy:vps, затем sync-gitverse.

Конфигурация

  • SSH-ключ: ~/.ssh/beget
  • Хост: root@155.212.186.39
  • Целевая папка: /data/static-site
  • Манифест: .deploy-manifest.json в корне проекта (не коммитится)

Сброс манифеста

Если нужно залить всё с нуля — удалить .deploy-manifest.json:

rm .deploy-manifest.json