added fix for deployment race condition
This commit is contained in:
@@ -98,11 +98,13 @@ ssh kisfenyo@192.168.0.162 "cd /opt/docker/felhom-controller && docker pull gite
|
||||
- Stacks are sorted alphabetically by DisplayName
|
||||
- Protected stacks (traefik, cloudflared, felhom-controller) can't be stopped from UI
|
||||
- `app.yaml` persists deploy config; `deployed: true` flag controls UI state
|
||||
- In-memory `Deployed` flag is set BEFORE `docker compose up -d` (avoids race condition with slow image pulls); reverted on failure
|
||||
- Password fields require explicit user input or generation (no silent auto-fill)
|
||||
- App cards on dashboard and stacks pages are clickable via `data-href` attribute (skip protected stacks)
|
||||
- Logs page uses AJAX polling (`?raw=1` query param returns plain text) with auto-scroll and pause/resume
|
||||
- Memory bar on deploy page uses two-segment stacked bar (committed = solid green, new = translucent green)
|
||||
- Deploy flow shows 3-step progress panel (config → containers → health), polls `GET /api/stacks/{name}` every 3s until running/unhealthy/timeout(120s)
|
||||
- Telepítés buttons have `checkBeforeDeploy()` onclick guard — fetches live state from API before navigating to deploy page
|
||||
|
||||
## Git sync module (internal/sync)
|
||||
|
||||
@@ -138,7 +140,7 @@ Key patterns used in `internal/stacks/`:
|
||||
2. `docker compose restart` does NOT pick up new images — always use `docker compose up -d`
|
||||
3. Go map iteration order is random — always sort before displaying in UI
|
||||
4. Docker's `.State` field says "running" even for unhealthy containers — must parse `.Status` for health info
|
||||
5. After `DeployStack()` succeeds, update in-memory `Deployed` flag immediately — `RefreshStatus()` only reads docker ps, not app.yaml
|
||||
5. In-memory `Deployed` flag must be set BEFORE `docker compose up -d` (not after) — compose can take 30-60s for image pulls; revert both in-memory and disk on failure
|
||||
6. `docker compose up -d` returns exit 0 even when containers crash-loop — post-start status check is essential for detecting failures
|
||||
7. Mealie image has no wget/curl — use Python TCP socket check for healthcheck; set `start_period: 60s` for DB migration time
|
||||
8. Always verify container images have the healthcheck tool (`wget`, `curl`, etc.) before using it — Alpine has BusyBox wget, Python images have `python3`
|
||||
Reference in New Issue
Block a user