Skip to main content

Architecture

System Overview

Subscriber


Traefik (TLS termination, forwardAuth, routing)

├── /rpm/ → nginx (RPM repodata + packages)
├── /deb/ → nginx → Aptly (signed DEB snapshots)
├── /oci/ → Zot (OCI registry, cosign signatures)
├── /gpg/ → nginx (public keys — unauthenticated)
└── /api/ → auth service (admin API, internal :8088)

└── auth service (forwardAuth + key management)

└── SQLite (subscription key store)

Promotion pipeline (GitHub Actions):
RustFS (staging) → sign → publish → rpm/deb/zot

Services

ServiceImageRole
traefiktraefik:3.6.12TLS, routing, forwardAuth middleware
authbuilt from ./authSubscription key validation, admin API, Prometheus metrics
rpmbuilt from ./rpmnginx serving signed RPM repos
debnginx:alpinenginx serving Aptly-published DEB repos
zotghcr.io/project-zot/zot-linux-amd64:v2.1.2OCI registry with cosign signatures
aptlyghcr.io/no42-org/packyard-aptly:1.6.2DEB repo management and signing (multi-arch: amd64 + arm64)
rustfsrustfs/rustfs:latestS3-compatible staging storage for promotion pipeline
staticnginx:alpinePublic GPG/cosign key hosting
backupkeinos/sqlite3:latestDaily SQLite backup of the key store

Repository Layout

auth/ Go service — subscription key auth + admin API
aptly/ Aptly configuration and DEB repo scripts
deb/ nginx configuration for DEB serving
rpm/ nginx + createrepo_c for RPM serving
zot/ Zot OCI registry configuration
traefik/ Traefik static and dynamic configuration
rustfs/ RustFS staging storage configuration
static/ Public static files (GPG/cosign keys)
scripts/ Operator scripts (backup, stage-artifact, health-check)
docs/ops/ Operational runbooks
tests/e2e/ End-to-end subscriber tests (RPM, DEB, OCI, observability)
tests/load/ k6 load tests for NFR validation
.github/workflows/ Promotion pipeline (RPM, DEB, OCI)