menzelj and Claude Opus 4.8
7bd449101d
Phase 6: remote backup destinations — SFTP & S3 (0.6.0)
...
- BackupDestination model + backup_destination_service (SFTP via paramiko,
S3-compatible via boto3): upload/list/download/delete/test.
- routers/destinations.py: destinations CRUD (secrets masked, merge-on-update),
test, list/delete remote backups. backups.py: POST /{id}/backup/push and
POST /restore-from (download from a destination + restore, volumes included).
- Frontend: Settings → Backup destinations (SFTP/S3 forms + test); Backup dialog
can push to a destination; Restore dialog can pick a destination + backup.
- deps: paramiko 3.5.0, boto3 1.35.99.
Verified end-to-end against live MinIO + atmoz/sftp: create/test destinations,
push (incl. volumes), list, restore-from to a fresh stack (volume data intact),
delete remote backup.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-07 21:50:03 +00:00
menzelj and Claude Opus 4.8
59037f4287
Phase 5: multi-host agents (0.5.0)
...
- stackpilot-agent: slim token-guarded FastAPI (reuses compose_service) exposing
stack CRUD/lifecycle/logs + system info; same image, different CMD. agent/
Dockerfile + compose + .env.example.
- Central proxy: Agent model, agent_service (httpx ping/proxy + live status:
online/offline/unauthorized + hostname/last_seen), routers/agents.py
(CRUD + ping + proxied stacks/lifecycle/logs/system).
- Frontend: Settings → Remote hosts (add/check/remove, connectivity dot); Stacks
grouped by host; remote stack detail with lifecycle, live logs, compose/.env edit.
Verified end-to-end: agent+main on a shared network — register (good/bad token),
list/create/start/logs/delete remote stacks, offline detection (502).
Remote backup destinations (SFTP/S3) deferred.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-07 21:23:17 +00:00
menzelj and Claude Opus 4.8
8d19b09abd
Phase 4: backups w/ volumes, notifications, settings & users, audit page (0.4.0)
...
- Backup/restore: per-stack tar.gz incl. named-volume snapshots (helper
container), upload restore with rename/overwrite/conflict detection.
- Notifications: ntfy/Discord/Slack/Gotify/generic webhooks, per-event
subscriptions; wired into the update checker and stack lifecycle.
- Settings page: update-check interval, webhook CRUD + test, user management
(with last-admin safeguards).
- Audit log page (searchable, paginated).
- Mobile-responsive sidebar/layout.
Multi-host agents and remote backup destinations (SFTP/S3) deferred.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-07 20:58:05 +00:00
menzelj and Claude Opus 4.8
22d9864436
Phase 3: env masking, image updates, port conflicts, resources, templates (0.3.0)
...
Backend:
- update_service: registry manifest digest check (Docker Hub/ghcr/lscr/private
v2 token auth) vs local RepoDigests; in-memory cache + background loop
- port_service: parse compose ports, check /proc/net/tcp[6] + docker bindings
- template_service + bundled templates (jellyfin/vaultwarden/uptime-kuma/
paperless-ngx/gitea) with {{VAR}} placeholders; custom templates in DB
- compose_edit set_resources (deploy.resources.limits/reservations)
- routers: images, ports, templates, editor/set-resources
- Template model; background update task wired into lifespan
Frontend:
- EnvEditor (table + raw, sensitive masking, quick-insert)
- Images page + UpdateBadge + dashboard 'updates available' banner
- PortConflictDialog pre-deploy check on Deploy
- ResourcePanel (CPU/RAM sliders) as editor Limits tab
- Templates page with per-variable instantiate form
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-07 16:49:38 +00:00
menzelj and Claude Opus 4.8
b553c1b861
Phase 2: Volume Wizard, GPU & device passthrough (0.2.0)
...
Backend:
- gpu_service: detect NVIDIA (nvidia-smi) + AMD/Intel (/dev/dri, sysfs);
inject helpers (nvidia deploy.reservations, /dev/dri + groups + LIBVA)
- volume_service: list/orphaned/prune volumes; NFS/SMB/named/bind/tmpfs
YAML generation (generate-yaml)
- device_service: USB/TTY/DRI detection + sandboxed host path browser
- compose_edit_service: server-side merge of volume/gpu/device fragments
- routers: volumes (+host paths), editor (services/add-volume/set-gpu/
add-device/remove-device/set-privileged), system gpus+devices
- compose: bind-mount /dev:ro for detection
Frontend:
- split-pane StackEditor with helper panel (service picker + tabs)
- VolumeWizard (bind/named/nfs/smb/tmpfs) + HostPathBrowser
- GPUSelector, DevicePanel; api clients for volumes/editor/system
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-07 16:35:22 +00:00
menzelj and Claude Opus 4.8
f732cb080b
Initial commit: StackPilot Phase 1 (Core)
...
Self-hosted Docker Compose manager.
- Backend: FastAPI + docker-py + SQLite (JWT auth, file-first stacks,
lifecycle, live status, WebSocket logs, docker-run converter, audit log)
- Frontend: React + Vite + Tailwind (login/setup, dashboard, stacks,
stack detail, Monaco editor, dark/light theme)
- Deployment: docker-compose.yml, Dockerfiles, nginx reverse proxy
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-07 16:04:58 +00:00