== controller log (sparkyfitness lines + deploy/stop/start)
2026/09/23 14:35:59 auth.go:142: [DEBUG] [web] auth: valid session for GET /api/stacks/sparkyfitness/deploy-fields
2026/09/23 14:35:59 router.go:82: [DEBUG] [api] GET /api/stacks/sparkyfitness/deploy-fields (path=/stacks/sparkyfitness/deploy-fields)
2026/09/23 14:35:59 auth.go:142: [DEBUG] [web] auth: valid session for POST /api/stacks/sparkyfitness/deploy
2026/09/23 14:35:59 router.go:82: [DEBUG] [api] POST /api/stacks/sparkyfitness/deploy (path=/stacks/sparkyfitness/deploy)
2026/09/23 14:35:59 router.go:438: [INFO] [api] Deploy requested for stack: sparkyfitness
2026/09/23 14:35:59 router.go:82: [DEBUG] [api] deployStack: name=sparkyfitness contentLength=70
2026/09/23 14:35:59 deploy.go:253: [DEBUG] Deploy sparkyfitness: received 2 user values
2026/09/23 14:35:59 deploy.go:258: [DEBUG]   SUBDOMAIN = "sparkyfitness"
2026/09/23 14:35:59 [DEBUG] [stacks] SaveAppConfig: saving /opt/docker/stacks/sparkyfitness — 6 env vars, 4 encrypted, 4 sensitive fields
2026/09/23 14:35:59 [INFO] [stacks] SaveAppConfig: saved config for sparkyfitness
2026/09/23 14:35:59 deploy.go:383: [INFO] [stacks] Deploying stack sparkyfitness with 6 env vars: [APP_DB_PASSWORD, API_ENCRYPTION_KEY, BETTER_AUTH_SECRET, DOMAIN, SUBDOMAIN, DB_PASSWORD]
2026/09/23 14:35:59 manager.go:1533: [INFO] [stacks] Deploying stack sparkyfitness — checking 3 images...
2026/09/23 14:35:59 manager.go:1537: [DEBUG]   codewithcj/sparkyfitness_server:v0.17.3 — not found locally, will pull
2026/09/23 14:35:59 manager.go:1537: [DEBUG]   codewithcj/sparkyfitness:v0.17.3 — not found locally, will pull
2026/09/23 14:35:59 lifecycle.go:70: [DEBUG] [integrations] OnStackStart: stack=sparkyfitness, waiting 5s for state refresh
2026/09/23 14:35:59 manager.go:1414: [DEBUG] Running: docker compose up -d (in /opt/docker/stacks/sparkyfitness)
2026/09/23 14:35:59 auth.go:142: [DEBUG] [web] auth: valid session for GET /api/stacks/sparkyfitness
2026/09/23 14:35:59 router.go:82: [DEBUG] [api] GET /api/stacks/sparkyfitness (path=/stacks/sparkyfitness)
2026/09/23 14:36:02 auth.go:142: [DEBUG] [web] auth: valid session for GET /api/stacks/sparkyfitness
2026/09/23 14:36:02 router.go:82: [DEBUG] [api] GET /api/stacks/sparkyfitness (path=/stacks/sparkyfitness)
2026/09/23 14:36:04 lifecycle.go:86: [DEBUG] [integrations] OnStackStart: stack=sparkyfitness integrationsFound=0
2026/09/23 14:36:05 auth.go:142: [DEBUG] [web] auth: valid session for GET /api/stacks/sparkyfitness
2026/09/23 14:36:05 router.go:82: [DEBUG] [api] GET /api/stacks/sparkyfitness (path=/stacks/sparkyfitness)
2026/09/23 14:36:08 auth.go:142: [DEBUG] [web] auth: valid session for GET /api/stacks/sparkyfitness
2026/09/23 14:36:08 router.go:82: [DEBUG] [api] GET /api/stacks/sparkyfitness (path=/stacks/sparkyfitness)
2026/09/23 14:36:11 auth.go:142: [DEBUG] [web] auth: valid session for GET /api/stacks/sparkyfitness
2026/09/23 14:36:11 router.go:82: [DEBUG] [api] GET /api/stacks/sparkyfitness (path=/stacks/sparkyfitness)
2026/09/23 14:36:14 auth.go:142: [DEBUG] [web] auth: valid session for GET /api/stacks/sparkyfitness
2026/09/23 14:36:14 router.go:82: [DEBUG] [api] GET /api/stacks/sparkyfitness (path=/stacks/sparkyfitness)
2026/09/23 14:36:17 manager.go:584: [DEBUG] [stacks] ScanStacks: found stack "sparkyfitness" deployed=false composePath=/opt/docker/stacks/sparkyfitness/docker-compose.yml
2026/09/23 14:36:17 auth.go:142: [DEBUG] [web] auth: valid session for GET /api/stacks/sparkyfitness
2026/09/23 14:36:17 router.go:82: [DEBUG] [api] GET /api/stacks/sparkyfitness (path=/stacks/sparkyfitness)
2026/09/23 14:36:20 auth.go:142: [DEBUG] [web] auth: valid session for GET /api/stacks/sparkyfitness
2026/09/23 14:36:20 router.go:82: [DEBUG] [api] GET /api/stacks/sparkyfitness (path=/stacks/sparkyfitness)
2026/09/23 14:36:23 auth.go:142: [DEBUG] [web] auth: valid session for GET /api/stacks/sparkyfitness
2026/09/23 14:36:23 router.go:82: [DEBUG] [api] GET /api/stacks/sparkyfitness (path=/stacks/sparkyfitness)
2026/09/23 14:36:26 auth.go:142: [DEBUG] [web] auth: valid session for GET /api/stacks/sparkyfitness
2026/09/23 14:36:26 router.go:82: [DEBUG] [api] GET /api/stacks/sparkyfitness (path=/stacks/sparkyfitness)
2026/09/23 14:36:27 manager.go:815: [DEBUG] [stacks] restart-policy of down member "sparkyfitness" = "unless-stopped"
2026/09/23 14:36:29 auth.go:142: [DEBUG] [web] auth: valid session for GET /api/stacks/sparkyfitness
2026/09/23 14:36:29 router.go:82: [DEBUG] [api] GET /api/stacks/sparkyfitness (path=/stacks/sparkyfitness)
2026/09/23 14:36:32 auth.go:142: [DEBUG] [web] auth: valid session for GET /api/stacks/sparkyfitness
2026/09/23 14:36:32 router.go:82: [DEBUG] [api] GET /api/stacks/sparkyfitness (path=/stacks/sparkyfitness)
2026/09/23 14:36:35 auth.go:142: [DEBUG] [web] auth: valid session for GET /api/stacks/sparkyfitness
2026/09/23 14:36:35 router.go:82: [DEBUG] [api] GET /api/stacks/sparkyfitness (path=/stacks/sparkyfitness)
2026/09/23 14:36:37 healthprobe.go:99: [DEBUG] [stacks] RunHealthProbes: sparkyfitness has a health check but no container to probe — candidates: [sparkyfitness(stopped) sparkyfitness-server(stopped) sparkyfitness-db(starting)]
2026/09/23 14:36:38 auth.go:142: [DEBUG] [web] auth: valid session for GET /api/stacks/sparkyfitness
2026/09/23 14:36:38 router.go:82: [DEBUG] [api] GET /api/stacks/sparkyfitness (path=/stacks/sparkyfitness)
2026/09/23 14:36:41 auth.go:142: [DEBUG] [web] auth: valid session for GET /api/stacks/sparkyfitness
2026/09/23 14:36:41 router.go:82: [DEBUG] [api] GET /api/stacks/sparkyfitness (path=/stacks/sparkyfitness)
2026/09/23 14:36:45 auth.go:142: [DEBUG] [web] auth: valid session for GET /api/stacks/sparkyfitness
2026/09/23 14:36:45 router.go:82: [DEBUG] [api] GET /api/stacks/sparkyfitness (path=/stacks/sparkyfitness)
2026/09/23 14:36:46 deploy.go:451: [INFO] [stacks] Stack sparkyfitness deployed successfully (took 47.3s)
2026/09/23 14:36:46 [DEBUG] [stacks] SaveAppConfig: saving /opt/docker/stacks/sparkyfitness — 6 env vars, 4 encrypted, 4 sensitive fields
2026/09/23 14:36:46 [INFO] [stacks] SaveAppConfig: saved config for sparkyfitness
2026/09/23 14:36:47 [DEBUG] [stacks] SaveAppConfig: saving /opt/docker/stacks/sparkyfitness — 6 env vars, 0 encrypted, 4 sensitive fields
2026/09/23 14:36:47 [INFO] [stacks] SaveAppConfig: saved config for sparkyfitness
2026/09/23 14:36:47 installed.go:408: [INFO] [stacks] installed-images sparkyfitness: recorded 3 service(s) (sparkyfitness-db=postgres:15-alpine (sha256:f7d23353e1b1…), sparkyfitness-frontend=codewithcj/sparkyfitness:v0.17.3 (sha256:46d90e46bd87…), sparkyfitness-server=codewithcj/sparkyfitness_server:v0.17.3 (sha256:6aa7d9832324…))
2026/09/23 14:36:47 [DEBUG] [stacks] SaveAppConfig: saving /opt/docker/stacks/sparkyfitness — 6 env vars, 0 encrypted, 4 sensitive fields
2026/09/23 14:36:47 [INFO] [stacks] SaveAppConfig: saved config for sparkyfitness
2026/09/23 14:36:47 pin.go:93: [INFO] [stacks] pin sparkyfitness: sparkyfitness-db=postgres:15-alpine, sparkyfitness-frontend=codewithcj/sparkyfitness:v0.17.3, sparkyfitness-server=codewithcj/sparkyfitness_server:v0.17.3
2026/09/23 14:36:48 auth.go:142: [DEBUG] [web] auth: valid session for GET /api/stacks/sparkyfitness
2026/09/23 14:36:48 router.go:82: [DEBUG] [api] GET /api/stacks/sparkyfitness (path=/stacks/sparkyfitness)
2026/09/23 14:36:50 manager.go:1414: [DEBUG] Running: docker compose ps -a --format table {{.Name}}	{{.Image}}	{{.State}}	{{.Status}} (in /opt/docker/stacks/sparkyfitness)
2026/09/23 14:36:50 manager.go:1494: [INFO] [stacks] Stack sparkyfitness post-start status:
2026/09/23 14:36:50 manager.go:1497: [INFO] [stacks]   sparkyfitness          codewithcj/sparkyfitness:v0.17.3          running   Up 3 seconds (health: starting)
2026/09/23 14:36:50 manager.go:1497: [INFO] [stacks]   sparkyfitness-db       postgres:15-alpine                        running   Up 24 seconds (healthy)
2026/09/23 14:36:50 manager.go:1497: [INFO] [stacks]   sparkyfitness-server   codewithcj/sparkyfitness_server:v0.17.3   running   Up 19 seconds (healthy)
2026/09/23 14:36:51 auth.go:142: [DEBUG] [web] auth: valid session for GET /api/stacks/sparkyfitness
2026/09/23 14:36:51 router.go:82: [DEBUG] [api] GET /api/stacks/sparkyfitness (path=/stacks/sparkyfitness)
2026/09/23 14:36:54 auth.go:142: [DEBUG] [web] auth: valid session for GET /api/stacks/sparkyfitness
2026/09/23 14:36:54 router.go:82: [DEBUG] [api] GET /api/stacks/sparkyfitness (path=/stacks/sparkyfitness)
2026/09/23 14:36:57 auth.go:142: [DEBUG] [web] auth: valid session for GET /api/stacks/sparkyfitness
2026/09/23 14:36:57 router.go:82: [DEBUG] [api] GET /api/stacks/sparkyfitness (path=/stacks/sparkyfitness)
2026/09/23 14:37:00 auth.go:142: [DEBUG] [web] auth: valid session for GET /api/stacks/sparkyfitness
2026/09/23 14:37:00 router.go:82: [DEBUG] [api] GET /api/stacks/sparkyfitness (path=/stacks/sparkyfitness)
2026/09/23 14:37:00 auth.go:142: [DEBUG] [web] auth: valid session for GET /api/stacks/sparkyfitness
2026/09/23 14:37:00 router.go:82: [DEBUG] [api] GET /api/stacks/sparkyfitness (path=/stacks/sparkyfitness)
2026/09/23 14:37:03 auth.go:142: [DEBUG] [web] auth: valid session for GET /api/stacks/sparkyfitness
2026/09/23 14:37:03 router.go:82: [DEBUG] [api] GET /api/stacks/sparkyfitness (path=/stacks/sparkyfitness)
== docker events (sparkyfitness)
1790174166 image pull codewithcj/sparkyfitness
1790174183 image pull codewithcj/sparkyfitness_server
1790174183 network create sparkyfitness_sparkyfitness-internal
1790174185 container create sparkyfitness-db
1790174185 container create sparkyfitness-server
1790174185 container create sparkyfitness
1790174185 network connect sparkyfitness_sparkyfitness-internal
1790174185 container start sparkyfitness-db
1790174190 container exec_create: /bin/sh -c pg_isready -U sparky -d sparkyfitness_db sparkyfitness-db
1790174190 container exec_start: /bin/sh -c pg_isready -U sparky -d sparkyfitness_db sparkyfitness-db
1790174190 container exec_die sparkyfitness-db
1790174190 container health_status: healthy sparkyfitness-db
1790174191 network connect sparkyfitness_sparkyfitness-internal
1790174191 container start sparkyfitness-server
1790174196 container exec_create: node -e require('http').get('http://127.0.0.1:3010/api/health',r=>process.exit(r.statusCode<400?0:1)).on('error',()=>process.exit(1)) sparkyfitness-server
1790174196 container exec_start: node -e require('http').get('http://127.0.0.1:3010/api/health',r=>process.exit(r.statusCode<400?0:1)).on('error',()=>process.exit(1)) sparkyfitness-server
1790174196 container exec_die sparkyfitness-server
1790174200 container exec_create: /bin/sh -c pg_isready -U sparky -d sparkyfitness_db sparkyfitness-db
1790174200 container exec_start: /bin/sh -c pg_isready -U sparky -d sparkyfitness_db sparkyfitness-db
1790174200 container exec_die sparkyfitness-db
1790174201 container exec_create: node -e require('http').get('http://127.0.0.1:3010/api/health',r=>process.exit(r.statusCode<400?0:1)).on('error',()=>process.exit(1)) sparkyfitness-server
1790174201 container exec_start: node -e require('http').get('http://127.0.0.1:3010/api/health',r=>process.exit(r.statusCode<400?0:1)).on('error',()=>process.exit(1)) sparkyfitness-server
1790174201 container exec_die sparkyfitness-server
1790174206 container exec_create: node -e require('http').get('http://127.0.0.1:3010/api/health',r=>process.exit(r.statusCode<400?0:1)).on('error',()=>process.exit(1)) sparkyfitness-server
1790174206 container exec_start: node -e require('http').get('http://127.0.0.1:3010/api/health',r=>process.exit(r.statusCode<400?0:1)).on('error',()=>process.exit(1)) sparkyfitness-server
1790174206 container exec_die sparkyfitness-server
1790174206 container health_status: healthy sparkyfitness-server
1790174206 network connect sparkyfitness_sparkyfitness-internal
1790174206 container start sparkyfitness
1790174210 container exec_create: /bin/sh -c pg_isready -U sparky -d sparkyfitness_db sparkyfitness-db
1790174210 container exec_start: /bin/sh -c pg_isready -U sparky -d sparkyfitness_db sparkyfitness-db
1790174210 container exec_die sparkyfitness-db
1790174211 container exec_create: wget --spider -q http://127.0.0.1:80/ sparkyfitness
1790174211 container exec_start: wget --spider -q http://127.0.0.1:80/ sparkyfitness
1790174211 container exec_die sparkyfitness
1790174211 container health_status: healthy sparkyfitness
1790174220 container exec_create: /bin/sh -c pg_isready -U sparky -d sparkyfitness_db sparkyfitness-db
1790174220 container exec_start: /bin/sh -c pg_isready -U sparky -d sparkyfitness_db sparkyfitness-db
1790174220 container exec_die sparkyfitness-db
1790174230 container exec_create: /bin/sh -c pg_isready -U sparky -d sparkyfitness_db sparkyfitness-db
1790174230 container exec_start: /bin/sh -c pg_isready -U sparky -d sparkyfitness_db sparkyfitness-db
1790174230 container exec_die sparkyfitness-db
1790174236 container exec_create: node -e require('http').get('http://127.0.0.1:3010/api/health',r=>process.exit(r.statusCode<400?0:1)).on('error',()=>process.exit(1)) sparkyfitness-server
1790174236 container exec_start: node -e require('http').get('http://127.0.0.1:3010/api/health',r=>process.exit(r.statusCode<400?0:1)).on('error',()=>process.exit(1)) sparkyfitness-server
1790174236 container exec_die sparkyfitness-server
1790174240 container exec_create: /bin/sh -c pg_isready -U sparky -d sparkyfitness_db sparkyfitness-db
1790174240 container exec_start: /bin/sh -c pg_isready -U sparky -d sparkyfitness_db sparkyfitness-db
1790174240 container exec_die sparkyfitness-db
1790174241 container exec_create: wget --spider -q http://127.0.0.1:80/ sparkyfitness
1790174241 container exec_start: wget --spider -q http://127.0.0.1:80/ sparkyfitness
1790174242 container exec_die sparkyfitness
1790174250 container exec_create: /bin/sh -c pg_isready -U sparky -d sparkyfitness_db sparkyfitness-db
1790174250 container exec_start: /bin/sh -c pg_isready -U sparky -d sparkyfitness_db sparkyfitness-db
1790174250 container exec_die sparkyfitness-db
1790174260 container exec_create: /bin/sh -c pg_isready -U sparky -d sparkyfitness_db sparkyfitness-db
1790174260 container exec_start: /bin/sh -c pg_isready -U sparky -d sparkyfitness_db sparkyfitness-db
1790174260 container exec_die sparkyfitness-db
1790174266 container exec_create: node -e require('http').get('http://127.0.0.1:3010/api/health',r=>process.exit(r.statusCode<400?0:1)).on('error',()=>process.exit(1)) sparkyfitness-server
1790174266 container exec_start: node -e require('http').get('http://127.0.0.1:3010/api/health',r=>process.exit(r.statusCode<400?0:1)).on('error',()=>process.exit(1)) sparkyfitness-server
1790174266 container exec_die sparkyfitness-server
1790174270 container exec_create: /bin/sh -c pg_isready -U sparky -d sparkyfitness_db sparkyfitness-db
1790174270 container exec_start: /bin/sh -c pg_isready -U sparky -d sparkyfitness_db sparkyfitness-db
1790174271 container exec_die sparkyfitness-db
1790174272 container exec_create: wget --spider -q http://127.0.0.1:80/ sparkyfitness
1790174272 container exec_start: wget --spider -q http://127.0.0.1:80/ sparkyfitness
1790174272 container exec_die sparkyfitness
1790174281 container exec_create: /bin/sh -c pg_isready -U sparky -d sparkyfitness_db sparkyfitness-db
1790174281 container exec_start: /bin/sh -c pg_isready -U sparky -d sparkyfitness_db sparkyfitness-db
1790174281 container exec_die sparkyfitness-db
1790174291 container exec_create: /bin/sh -c pg_isready -U sparky -d sparkyfitness_db sparkyfitness-db
1790174291 container exec_start: /bin/sh -c pg_isready -U sparky -d sparkyfitness_db sparkyfitness-db
1790174291 container exec_die sparkyfitness-db
grep: write error: Broken pipe
