mirror of
https://github.com/jhd3197/ServerKit.git
synced 2026-10-23 03:27:43 +09:00
docs(deploy): document the Deploy Console; update CHANGELOG and ROADMAP
Add docs/DEPLOY_CONSOLE.md (the feature + architecture), an architecture section in docs/ARCHITECTURE.md, a CHANGELOG (Unreleased) entry, and move the Deploy Console into the ROADMAP's Recently Completed list with its Active Development checkboxes ticked. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
1 parent
0c094aea8d
commit
6bf8c87b9d
4 files changed
+133
-4
No files matched your search
@@ -20,6 +20,23 @@ awaiting a stable release:
|
||||
|
||||
### Added
|
||||
|
||||
- **The Deploy Console — publish anything, watch it live, debug it from the UI.**
|
||||
Installing a template, deploying a repo, redeploying a service, or uploading a
|
||||
build now takes you to one full-page live console at `/deployments/<id>`: a
|
||||
terminal-style log that streams the real pull/build/start output line-by-line
|
||||
(not 1.5-second snapshots), a step rail that checks off with per-step timings, a
|
||||
live elapsed timer, and follow/wrap/timestamps/level-filter/search/copy/download
|
||||
controls. When a deploy fails, the page pins an error card with the real failure
|
||||
tail (the actual build output, not a stripped one-liner), a plain-language hint
|
||||
for common cases (port in use, image pull denied, OOM, missing env var, npm/pip
|
||||
failures…), and a one-click **Retry** — so you can read the failure and fix your
|
||||
env var / port / Dockerfile and retry entirely from the browser, no SSH. Every
|
||||
install and deploy flow — templates, repo services, manual redeploys, the Build
|
||||
tab — now rides the same job + log + console machinery, and the `/deployments`
|
||||
index deep-links every run to its console. Updates push over websockets with a
|
||||
transparent 2-second polling fallback, so the console keeps working (and says so)
|
||||
when live updates are unavailable. See [docs/DEPLOY_CONSOLE.md](docs/DEPLOY_CONSOLE.md).
|
||||
|
||||
- **Web Analytics — a native, privacy-first analytics extension
|
||||
(`serverkit-analytics`).** Self-hosted, first-party website analytics for the
|
||||
sites this panel manages, built on the extension platform. A cookieless
|
||||
|
||||
+5
-4
@@ -10,6 +10,7 @@ This document outlines the development roadmap for ServerKit. Features are organ
|
||||
|
||||
### Recently Completed (v1.7.x)
|
||||
|
||||
- **Deploy Console & Live Run Logs** - Every install and deploy lands on one full-page live console: streaming build output, a step timeline with per-step durations and a live elapsed timer, and failure cards showing the real error tail with plain-language hints and one-click retry. Backed by a unified batched run-log layer (database persistence + WebSocket push with a polling fallback).
|
||||
- **New Service Wizard & Template Catalog** - Three-step service creation (Source / Connect / Review) backed by a server-side template catalog with one-click compose templates and Git-repo templates.
|
||||
- **Extensions Platform Maturation** - Marketplace registry backed by standalone extension repos (Kubernetes, Automations, Analytics, Mail, GPU, CrowdSec, DNS server, and more), with built-in features progressively extracted to keep the default panel lean.
|
||||
- **Privacy-First Web Analytics** - Cookieless, self-hosted analytics extension with WordPress and nginx integration and optional geo lookup.
|
||||
@@ -597,10 +598,10 @@ platform infrastructure; new capability areas ship as Marketplace extensions.
|
||||
The publish pipeline is becoming ServerKit's signature experience: deploy anything, watch it
|
||||
happen live, and debug failures entirely from the UI.
|
||||
|
||||
- [ ] Full-page live deploy console for every install and deploy (templates, Git repos, uploads, redeploys)
|
||||
- [ ] Streaming build output with a step timeline, per-step durations, and live elapsed time
|
||||
- [ ] Failure cards showing the real error tail with plain-language hints and one-click retry
|
||||
- [ ] Unified batched run-log layer (database persistence + WebSocket push, polling fallback)
|
||||
- [x] Full-page live deploy console for every install and deploy (templates, Git repos, uploads, redeploys)
|
||||
- [x] Streaming build output with a step timeline, per-step durations, and live elapsed time
|
||||
- [x] Failure cards showing the real error tail with plain-language hints and one-click retry
|
||||
- [x] Unified batched run-log layer (database persistence + WebSocket push, polling fallback)
|
||||
|
||||
## Extension Platform
|
||||
|
||||
|
||||
@@ -508,6 +508,35 @@ drive handlers directly.
|
||||
|
||||
---
|
||||
|
||||
## Deploy Console & run logs
|
||||
|
||||
Every install and deploy is a `DeploymentJob` run by the single `JobConsumer`, and
|
||||
its live output is surfaced by the full-page **Deploy Console** at
|
||||
`/deployments/<jobId>`. All deploy-path logging funnels through one seam,
|
||||
`app/services/run_log_service.py` (`RunLogStream`):
|
||||
|
||||
- **Batched persistence** — one DB commit + one socket emit per flush (50 lines,
|
||||
300 ms, a step change, or close) instead of a commit per line; a hard 5000-row cap
|
||||
per job. Every line is a `DeploymentJobLog` row.
|
||||
- **Truthful failure tail** — an 80-line in-memory ring buffer persisted to the job's
|
||||
`result` JSON on failure, alongside `step_timings` and a matched plain-language
|
||||
`hint` (no schema migration).
|
||||
- **Clean text** — ANSI escapes and `\r` progress overwrites are stripped at the seam;
|
||||
builds run with `--ansi never --progress plain` (`DockerService.compose_up_streaming`).
|
||||
- **Crash-proof** — `RunLogStream.log()` never raises; a flush failure degrades to a
|
||||
buffered-drop + one telemetry event. Job failure marking never depends on the log
|
||||
path.
|
||||
|
||||
The read side stays the source of truth: `GET /deployment-jobs/<id>/logs?after_id=`
|
||||
for incremental polling, plus a `deploy_log` / `deploy_status` Socket.IO channel
|
||||
(room `deploy_{job_id}`) as an accelerator. The frontend `useDeployJobStream` hook
|
||||
de-dupes by row id and re-syncs with `after_id` on reconnect, with a 2-second poll
|
||||
fallback — so the console works with sockets disabled. Emits are in-process only,
|
||||
consistent with the single-worker gateway constraint below. See
|
||||
[DEPLOY_CONSOLE.md](DEPLOY_CONSOLE.md).
|
||||
|
||||
---
|
||||
|
||||
## Notifications Bus
|
||||
|
||||
).
|
||||
- **Streaming builds.** `DockerService.compose_up_streaming` runs compose with
|
||||
`--ansi never --progress plain` under `Popen` and delivers output line-by-line, so
|
||||
template installs stream the real pull/build transcript and a failure persists a
|
||||
meaningful tail — historically the biggest reason install errors were unreadable.
|
||||
- **Every deploy is a job.** `POST /apps/<id>/deploy` returns `202 {deploy_job_id}`
|
||||
(or runs synchronously with `?wait=true` for CLI/tests). Failed jobs can be retried
|
||||
via `POST /deployment-jobs/<id>/retry`, which clones the job and enqueues a fresh
|
||||
run on a new console URL.
|
||||
|
||||
## Follow-ups (not yet shipped)
|
||||
|
||||
- WordPress site creation adopting the console (via the plugins SDK).
|
||||
- Agent-side line streaming for remote-server installs (a protocol addition in the
|
||||
`serverkit-agent` repo); until then remote installs render as a labeled output
|
||||
block.
|
||||
- A cancel-running-deploy button (needs safe subprocess-kill semantics).
|
||||
Reference in new issue
Block a user