17 Commits

Author SHA1 Message Date
4ca9e588b5 security: bind all ports to 127.0.0.1
Docker bypasses ufw and exposes 0.0.0.0-bound ports directly via
iptables DNAT rules, even when ufw default policy is deny. Bind
every service port to 127.0.0.1 so only nginx (and SSH tunnels for
wizard) can reach them from outside.
2026-04-16 08:54:19 +00:00
87e1aae3f6 docs: add port map for T1 deployment 2026-04-16 08:49:25 +00:00
c8125b25f2 feat: add harborforge-monitor service to docker-compose
Runs the monitor container with network_mode: host and /:/host:ro
bind mount so gopsutil reads host-level telemetry. Backend URL,
identifier, and API key are sourced from .env via variable
interpolation (no secrets in compose).
2026-04-16 07:53:32 +00:00
c5735f3129 docs: add deployment log with 2026-04-15 vps.lab migration entry 2026-04-15 15:46:53 +00:00
5e601b1840 fix: chown wizard_config volume to nonroot uid via init sidecar
The abstract-wizard image runs as nonroot (65532), but the named
volume is created with root:root ownership, causing PUT writes to
harborforge.json to return 500. Add a busybox wizard_init service
that chowns /config to 65532:65532 before wizard starts.
2026-04-15 15:41:02 +00:00
5c10d6d4c2 Add HarborForge stack to docker-compose
- Add hf_db_init sidecar that ensures the HarborForge database exists on
  every `compose up` (idempotent CREATE DATABASE IF NOT EXISTS), so the
  shared MySQL instance can host both hangmanlab and harborforge schemas
  without touching existing data.
- Wire hf_backend's DATABASE_URL directly from compose env vars and gate
  it on hf_db_init completing successfully.
- Add a mysqladmin-ping healthcheck on mysql so dependents can wait on
  service_healthy.
- Drop dead Vite runtime envs from hf_frontend (build-time only) and
  make wizard CORS_ORIGINS configurable via HF_FRONTEND_HOST.
- Seed .env.example with all variables the stack reads.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-15 07:18:47 +01:00
f428cdacd9 fix: VITE_API_BASE_URL -> VITE_API_BASE (env var name mismatch) 2026-04-15 04:56:27 +00:00
ad3cb17047 fix: revert VITE_API_BASE_URL to hf_backend (API calls still go to hf_backend) 2026-04-15 04:50:29 +00:00
a9bd037dce fix: remove restart:no from hf_frontend, keep only on hf_backend 2026-04-15 04:49:52 +00:00
2988b6eb28 fix: hf_frontend depends only on wizard, VITE_API_BASE_URL points to wizard 2026-04-15 04:49:13 +00:00
7b1a195af6 feat: re-add hf_backend with restart:no, hf_frontend depends on both hf_backend and wizard 2026-04-15 04:46:56 +00:00
07b5816987 chore: remove hf_backend, keep only wizard and hf_frontend 2026-04-15 04:44:55 +00:00
b9e35b9766 fix: hf_frontend depends_on both hf_backend and wizard 2026-04-15 04:43:04 +00:00
e46e1aa0c6 feat: update HarborForge services config from reference compose
- hf_backend: use explicit env vars (CONFIG_DIR, SECRET_KEY, LOG_LEVEL), wizard_config volume
- hf_frontend: VITE_API_BASE_URL points to hf_backend service name, VITE_WIZARD_PORT
- wizard: CORS_ORIGINS, LISTEN_ADDR, MAX_BACKUPS
- Add mysql healthcheck condition for hf_backend
2026-04-15 04:36:37 +00:00
f343d3c12e chore: add .gitignore and remove .env from repo 2026-04-15 04:28:16 +00:00
9e99cda36b feat: add HarborForge services (hf_backend, hf_frontend, wizard) to docker-compose
- hf_backend: zhi/harborforge-backend:multi-stage on port 8000
- hf_frontend: zhi/harborforge-frontend:latest on port 3000
- wizard: nav/abstract-wizard:latest on port 8082
- All services share app-network bridge
2026-04-15 04:25:37 +00:00
3a526787cf Initial commit: docker-compose.yml 2026-04-14 19:12:06 +00:00