From 5d43228c2e6a6f8a5a8d911bb920d5ae57c905b6 Mon Sep 17 00:00:00 2001 From: Hein Date: Thu, 26 Mar 2026 16:26:15 +0200 Subject: [PATCH] chore(docker): update environment variable prefixes to AMCS --- Dockerfile | 2 +- README.md | 8 +++++--- docker-compose.yml | 16 +++++++++++----- internal/config/loader.go | 16 ++++++++-------- internal/config/loader_test.go | 12 ++++++------ llm/plan.md | 10 +++++----- scripts/migrate.sh | 4 ++-- 7 files changed, 38 insertions(+), 30 deletions(-) diff --git a/Dockerfile b/Dockerfile index 7fd5f9a..41b5c41 100644 --- a/Dockerfile +++ b/Dockerfile @@ -25,6 +25,6 @@ USER appuser EXPOSE 8080 -ENV OB1_CONFIG=/app/configs/docker.yaml +ENV AMCS_CONFIG=/app/configs/docker.yaml ENTRYPOINT ["/app/amcs-server"] diff --git a/README.md b/README.md index 9af0d08..9a86443 100644 --- a/README.md +++ b/README.md @@ -66,7 +66,7 @@ LLM integration instructions are served at `/llm`. The repo now includes a `Dockerfile` and Compose files for running the app with Postgres + pgvector. 1. Set a real LiteLLM key in your shell: - `export OB1_LITELLM_API_KEY=your-key` + `export AMCS_LITELLM_API_KEY=your-key` 2. Start the stack with your runtime: `docker compose -f docker-compose.yml -f docker-compose.docker.yml up --build` `podman compose -f docker-compose.yml up --build` @@ -75,8 +75,10 @@ The repo now includes a `Dockerfile` and Compose files for running the app with Notes: - The app uses `configs/docker.yaml` inside the container. -- `OB1_LITELLM_BASE_URL` overrides the LiteLLM endpoint, so you can retarget it without editing YAML. -- `OB1_OLLAMA_BASE_URL` overrides the Ollama endpoint for local or remote servers. +- The local `./configs` directory is mounted into `/app/configs`, so config edits apply without rebuilding the image. +- `AMCS_LITELLM_BASE_URL` overrides the LiteLLM endpoint, so you can retarget it without editing YAML. +- `AMCS_OLLAMA_BASE_URL` overrides the Ollama endpoint for local or remote servers. +- The Compose stack uses a default bridge network named `amcs`. - The base Compose file uses `host.containers.internal`, which is Podman-friendly. - The Docker override file adds `host-gateway` aliases so Docker can resolve the same host endpoint. - Database migrations `001` through `005` run automatically when the Postgres volume is created for the first time. diff --git a/docker-compose.yml b/docker-compose.yml index 0f79d8c..6d9bcc4 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -25,14 +25,20 @@ services: db: condition: service_healthy restart: unless-stopped + volumes: + - ./configs:/app/configs:ro environment: - OB1_CONFIG: /app/configs/docker.yaml - OB1_DATABASE_URL: postgres://postgres:postgres@db:5432/amcs?sslmode=disable - OB1_LITELLM_BASE_URL: ${OB1_LITELLM_BASE_URL:-http://host.containers.internal:4000/v1} - OB1_LITELLM_API_KEY: ${OB1_LITELLM_API_KEY:-replace-me} - OB1_SERVER_PORT: 8080 + AMCS_CONFIG: /app/configs/docker.yaml + AMCS_DATABASE_URL: postgres://postgres:postgres@db:5432/amcs?sslmode=disable + AMCS_LITELLM_BASE_URL: ${AMCS_LITELLM_BASE_URL:-http://host.containers.internal:4000/v1} + AMCS_LITELLM_API_KEY: ${AMCS_LITELLM_API_KEY:-replace-me} + AMCS_SERVER_PORT: 8080 ports: - "8080:8080" volumes: postgres_data: + +networks: + default: + name: amcs diff --git a/internal/config/loader.go b/internal/config/loader.go index 1b86d7d..000e23d 100644 --- a/internal/config/loader.go +++ b/internal/config/loader.go @@ -36,7 +36,7 @@ func ResolvePath(explicitPath string) string { return explicitPath } - if envPath := strings.TrimSpace(os.Getenv("OB1_CONFIG")); envPath != "" { + if envPath := strings.TrimSpace(os.Getenv("AMCS_CONFIG")); envPath != "" { return envPath } @@ -98,14 +98,14 @@ func defaultConfig() Config { } func applyEnvOverrides(cfg *Config) { - overrideString(&cfg.Database.URL, "OB1_DATABASE_URL") - overrideString(&cfg.AI.LiteLLM.BaseURL, "OB1_LITELLM_BASE_URL") - overrideString(&cfg.AI.LiteLLM.APIKey, "OB1_LITELLM_API_KEY") - overrideString(&cfg.AI.Ollama.BaseURL, "OB1_OLLAMA_BASE_URL") - overrideString(&cfg.AI.Ollama.APIKey, "OB1_OLLAMA_API_KEY") - overrideString(&cfg.AI.OpenRouter.APIKey, "OB1_OPENROUTER_API_KEY") + overrideString(&cfg.Database.URL, "AMCS_DATABASE_URL") + overrideString(&cfg.AI.LiteLLM.BaseURL, "AMCS_LITELLM_BASE_URL") + overrideString(&cfg.AI.LiteLLM.APIKey, "AMCS_LITELLM_API_KEY") + overrideString(&cfg.AI.Ollama.BaseURL, "AMCS_OLLAMA_BASE_URL") + overrideString(&cfg.AI.Ollama.APIKey, "AMCS_OLLAMA_API_KEY") + overrideString(&cfg.AI.OpenRouter.APIKey, "AMCS_OPENROUTER_API_KEY") - if value, ok := os.LookupEnv("OB1_SERVER_PORT"); ok { + if value, ok := os.LookupEnv("AMCS_SERVER_PORT"); ok { if port, err := strconv.Atoi(strings.TrimSpace(value)); err == nil { cfg.Server.Port = port } diff --git a/internal/config/loader_test.go b/internal/config/loader_test.go index 5863dcd..e10188e 100644 --- a/internal/config/loader_test.go +++ b/internal/config/loader_test.go @@ -7,7 +7,7 @@ import ( ) func TestResolvePathPrecedence(t *testing.T) { - t.Setenv("OB1_CONFIG", "/tmp/from-env.yaml") + t.Setenv("AMCS_CONFIG", "/tmp/from-env.yaml") if got := ResolvePath("/tmp/explicit.yaml"); got != "/tmp/explicit.yaml" { t.Fatalf("ResolvePath explicit = %q, want %q", got, "/tmp/explicit.yaml") @@ -47,9 +47,9 @@ logging: t.Fatalf("write config: %v", err) } - t.Setenv("OB1_DATABASE_URL", "postgres://from-env") - t.Setenv("OB1_LITELLM_API_KEY", "env-key") - t.Setenv("OB1_SERVER_PORT", "9090") + t.Setenv("AMCS_DATABASE_URL", "postgres://from-env") + t.Setenv("AMCS_LITELLM_API_KEY", "env-key") + t.Setenv("AMCS_SERVER_PORT", "9090") cfg, loadedFrom, err := Load(configPath) if err != nil { @@ -102,8 +102,8 @@ logging: t.Fatalf("write config: %v", err) } - t.Setenv("OB1_OLLAMA_BASE_URL", "https://ollama.example.com/v1") - t.Setenv("OB1_OLLAMA_API_KEY", "remote-key") + t.Setenv("AMCS_OLLAMA_BASE_URL", "https://ollama.example.com/v1") + t.Setenv("AMCS_OLLAMA_API_KEY", "remote-key") cfg, _, err := Load(configPath) if err != nil { diff --git a/llm/plan.md b/llm/plan.md index 8f8c942..4c8c404 100644 --- a/llm/plan.md +++ b/llm/plan.md @@ -515,16 +515,16 @@ type OpenRouterAIConfig struct { ### Order 1. `--config /path/to/file.yaml` -2. `OB1_CONFIG` +2. `AMCS_CONFIG` 3. default `./configs/dev.yaml` 4. environment overrides for specific fields ### Suggested env overrides -* `OB1_DATABASE_URL` -* `OB1_LITELLM_API_KEY` -* `OB1_OPENROUTER_API_KEY` -* `OB1_SERVER_PORT` +* `AMCS_DATABASE_URL` +* `AMCS_LITELLM_API_KEY` +* `AMCS_OPENROUTER_API_KEY` +* `AMCS_SERVER_PORT` --- diff --git a/scripts/migrate.sh b/scripts/migrate.sh index b4b7771..da6e695 100755 --- a/scripts/migrate.sh +++ b/scripts/migrate.sh @@ -2,10 +2,10 @@ set -euo pipefail -DATABASE_URL="${DATABASE_URL:-${OB1_DATABASE_URL:-}}" +DATABASE_URL="${DATABASE_URL:-${AMCS_DATABASE_URL:-}}" if [[ -z "${DATABASE_URL}" ]]; then - echo "DATABASE_URL or OB1_DATABASE_URL must be set" >&2 + echo "DATABASE_URL or AMCS_DATABASE_URL must be set" >&2 exit 1 fi