Skip to main content

Artifacts — Generic HTTPS static file repository for firmware/device artifacts, flags and OTA images. ⬆ índice

Artifacts

Generic HTTPS static file repository used by multiple external systems: TLS trust-store artifacts for firmware, OTA firmware images, and externally consumed JSON flags/config. v1 is nginx:alpine serving a read-only bind mount, no auth, no API.

Quick start

./infra up infrastructure/artifacts
./infra status infrastructure/artifacts
./infra logs infrastructure/artifacts

Model

Each top-level directory under infrastructure/artifacts/data/ is an independent endpoint/system:

  • data/truststore/ — TLS trust-store artifacts (e.g. .atcb bundles).
  • data/firmware/ — OTA firmware images.
  • data/flags/ — externally-consumed JSON flags/config.

Publishing a new artifact or adding a new endpoint is a filesystem operation (mkdir + copy) — it never requires a config or code change. See infrastructure/artifacts/README.md for the full model, cache-control rules, and the naming convention for publishing new versions without overwriting existing (immutably-cached) files.

Minimal configuration

  • No secrets. Service env: infrastructure/artifacts/.env.template -> generated infrastructure/artifacts/.env (only PORT).
  • No database, no other project dependency.

Traefik exposure

Registered as REMOTE_ENDPOINT_KEY=ARTIFACTS in infrastructure/artifacts/project.conf, wired in deployment/remote.env (REMOTE_ENDPOINT_KEYS, REMOTE_ENDPOINT_DOMAIN_ARTIFACTS, REMOTE_ENDPOINT_PORT_ARTIFACTS) and deployment/topology.env (ARTIFACTS_PUBLIC_PORT), same pattern as N8N/ESP_TOOLS/etc. Router/service entries in core/traefik/dynamic/routes.yml are generated by deployment/scripts/python/render_traefik_config.py (see docs/internal/operations/internal-service-path-mappings.md for when to use Traefik vs. the Portal proxy — this service intentionally uses Traefik because it must be reachable by unauthenticated external devices, not through Portal/Zitadel session auth).

  • Service README (data model, cache rules, extension path): infrastructure/artifacts/README.md
  • Project standard: docs/internal/operations/project-standard.md
  • Internal service path mappings (Traefik vs Portal proxy): docs/internal/operations/internal-service-path-mappings.md