Files
bri-sandbox-development-pla…/control-plane/internal/config/config.go
T
Achmad Setyabudi Susilo 3d99940658 Initial SDP skeleton
Sandbox Deployment Platform — Go control plane + agents, NextJS dashboard,
nginx reverse proxy. Cross-compile via Docker; deploy via sshpass to
172.18.136.92 (micro) and 172.18.139.186 (gateway).

- control-plane: HTTP API, WS hub, SQLite (modernc.org/sqlite) for
  progress, .log files for log persistence
- agent-micro / agent-gateway: alpine:3.20 + bind-mounted repo,
  binary exec'd in container, no Dockerfile build step
- dashboard: NextJS static export + shadcn/ui components, single
  WebSocket hook
- docker-compose.yml: three services on alpine:latest with docker
  socket bind for agents
- scripts/: build.sh (golang:1.23-alpine cross-compile), deploy.sh,
  patch-nginx.sh (idempotent nginx splice), ssh wrappers

Runtime model: pass-through Bitbucket creds per deploy, never logged or
persisted on the agent. Control plane never touches git or docker
directly — agents do all the work locally.
2026-06-24 07:25:01 +07:00

33 lines
762 B
Go

package config
import (
"flag"
"os"
)
type Config struct {
Addr string // listen addr, e.g. ":8080"
DataDir string // SQLite + .log files live here
AgentHealth string // map of nodeID -> agent base URL (TODO: real map)
}
// Load reads flags and env. Env wins over defaults; flags win over env.
func Load() Config {
c := Config{
Addr: envOr("SDP_ADDR", ":8080"),
DataDir: envOr("SDP_DATA", "./data"),
AgentHealth: envOr("SDP_AGENT_HEALTH", ""),
}
flag.StringVar(&c.Addr, "addr", c.Addr, "control plane listen addr")
flag.StringVar(&c.DataDir, "data", c.DataDir, "data directory for sqlite and logs")
flag.Parse()
return c
}
func envOr(k, def string) string {
if v := os.Getenv(k); v != "" {
return v
}
return def
}