Деплой на shared и VPS: как работает сейчас

Jasefly больше не «только shared PHP». Платформа dual-runtime: один репозиторий, два production-пути — PHP shared hosting и Node VPS. Выбор зависит от хоста, а не от переписывания продукта.

Два артефакта

ЦельRuntimeПакет
Shared hostingPHPjasefly-cms-update-*.zip / install ZIP — Node на сервере не нужен
VPS / cloudNodejasefly-cms-vps-*.tgz — без PHP API tree в пакете

CLI:

node scripts/jasefly/cli.mjs build --runtime=php --target=shared
node scripts/jasefly/cli.mjs build --runtime=node --target=vps

Shared: привычный путь

  1. Локально собирается frontend (Vite).
  2. build-hosting.js кладёт PHP API + статику в update/install ZIP.
  3. На хостинг уходит архив через SiteUpdater / MCP upload.
  4. Серверу достаточно Apache/Nginx + PHP 8.2+ + MySQL.

Update-пакет бережёт локальный config, uploads, логи и бэкапы. Это не «залить поверх руками».

VPS: атомарный Node-релиз

Для сайта с runtime=node-vps MCP собирает VPS-артефакт и выкладывает по SSH: releases + symlink current, опциональный restart. Откат — cms_rollback с жёсткой грамматикой stamp (без shell-инъекций в аргументе to).

На VPS не тащат PHP-дерево «на всякий случай»: пакет должен соответствовать runtime.

Один операторский жест: cms_release

Независимо от цели, агентский путь один:

  1. build — локальная сборка пакета
  2. test — проверки / маркеры ZIP
  3. changelog — запись что ушло в релиз
  4. deploy — upload (shared) или SSH atomic (VPS)
  5. verify — API / site / DB / diagnostics

При нескольких сайтах в CMS_SITES обязателен аргумент site. Сначала cms_sites, потом релиз на конкретный хост. Fan-out «на всех сразу» намеренно нет.

Как выбрать

Контракты (API, Builder JSON, capabilities) общие. Меняется способ доставки runtime, а не «другой продукт».

Типичные ошибки

Итог

Shared остаётся честным default для обычного PHP-хостинга. VPS — осознанный второй путь для Node. Multi-site MCP связывает оба мира одним агентом: вы указываете хост и runtime в env, а пайплайн cms_release делает остальное предсказуемо.

К блогу