On this page
Owner: Origo Engineering
Last updated: 2026-04-09
Slice/version reference: S10 + S32 + S40 (platform deploy contract + env-drift fix + observability day-zero)
Purpose and scope
User-facing reference for how Origo server deployments are applied after code merges.
Trigger: merge to main.
Output:
fresh API/control-plane images for merged commit
migration-first apply
running server stack with updated services
Data definitions (fields, types, units, timezone, nullability)
Deployment image tag format:
ghcr.io/vaquum/origo-api:<commit-sha>
ghcr.io/vaquum/origo-control-plane:<commit-sha>
Runtime services after successful deploy:
api
dagster-webserver
dagster-daemon
clickhouse
grafana
loki
tempo
prometheus
Source/provenance and freshness semantics
Deploy provenance is tied to GitHub Actions run id + commit SHA.
Runtime image verification is done during deploy and surfaced in workflow logs.
Failure modes, warnings, and error semantics
Missing deploy secrets/env contracts fail deployment immediately.
Missing/invalid ORIGO_AUDIT_LOG_RETENTION_DAYS fails deployment before compose service startup.
Missing/invalid observability env contracts or observability bundle sync fail deployment before compose service startup.
Migration failure fails deploy and prevents partial silent rollout.
Service image mismatch after apply fails deployment.
Determinism/replay notes
Same-commit deploy reruns are validated by comparing runtime verified service-image fingerprints.
Canonical slice reference:
spec/slices/slice-10-image-based-server-deploy.md
Environment variables and required config
Deploy is controlled by repository secrets and server env contract.
ORIGO_AUDIT_LOG_RETENTION_DAYS is sourced from root .env.example and synchronized into /opt/origo/deploy/.env on deploy.
ORIGO_DOCKER_GRAFANA_PORT, ORIGO_OBSERVABILITY_ENABLED, ORIGO_OTEL_SERVICE_NAMESPACE, and ORIGO_OBSERVABILITY_LOKI_TIMEOUT_SECONDS are sourced from root .env.example and synchronized into /opt/origo/deploy/.env on deploy.
The deploy workflow synchronizes deploy/observability/ into /opt/origo/config/observability before compose apply.
No deployment-specific runtime values are hard-coded in code paths.
Minimal examples
Verify live API endpoint after deploy:
curl -sS http://origo.vaquum.fi/health
Query one dataset after deploy:
curl -sS -X POST 'http://origo.vaquum.fi/v1/raw/query' -H 'Content-Type: application/json' -H 'X-API-Key: <internal-key>' --data '{"mode":"native","sources":["binance_spot_trades"],"time_range":["2017-08-17T12:00:00Z","2017-08-17T13:00:00Z"],"strict":false}'