Files
git.stella-ops.org/docs/21_INSTALL_GUIDE.md
master 7b5bdcf4d3 feat(docs): Add comprehensive documentation for Vexer, Vulnerability Explorer, and Zastava modules
- Introduced AGENTS.md, README.md, TASKS.md, and implementation_plan.md for Vexer, detailing mission, responsibilities, key components, and operational notes.
- Established similar documentation structure for Vulnerability Explorer and Zastava modules, including their respective workflows, integrations, and observability notes.
- Created risk scoring profiles documentation outlining the core workflow, factor model, governance, and deliverables.
- Ensured all modules adhere to the Aggregation-Only Contract and maintain determinism and provenance in outputs.
2025-10-30 00:09:39 +02:00

7.4 KiB
Executable File
Raw Blame History

StellaOps — Installation Guide (Docker &AirGap)

Status — public α not yet published.
The commands below will work as soon as the first image is tagged
registry.stella-ops.org/stella-ops/stella-ops:0.1.0-alpha
(target date: late2025). Track progress on the
roadmap.


0·Prerequisites

Item Minimum Notes
Linux Ubuntu22.04 LTS / Alma9 x8664 or arm64
CPU / RAM 2 vCPU / 2GiB Laptop baseline
Disk 10GiB SSD SBOM + vuln DB cache
Docker Engine25 + Composev2 docker -v
TLS OpenSSL 1.1 Selfsigned cert generated at first run

1·Connectedhost install (Docker Compose)

# 1. Make a working directory
mkdir stella && cd stella

# 2. Download the signed Compose bundle + example .env
curl -LO https://get.stella-ops.org/releases/latest/.env.example
curl -LO https://get.stella-ops.org/releases/latest/.env.example.sig
curl -LO https://get.stella-ops.org/releases/latest/docker-compose.infrastructure.yml
curl -LO https://get.stella-ops.org/releases/latest/docker-compose.infrastructure.yml.sig
curl -LO https://get.stella-ops.org/releases/latest/docker-compose.stella-ops.yml
curl -LO https://get.stella-ops.org/releases/latest/docker-compose.stella-ops.yml.sig

# 3. Verify provenance (Cosign public key is stable)
cosign verify-blob \
  --key https://stella-ops.org/keys/cosign.pub \
  --signature .env.example.sig \
  .env.example

cosign verify-blob \
  --key https://stella-ops.org/keys/cosign.pub \
  --signature docker-compose.infrastructure.yml.sig \
  docker-compose.infrastructure.yml

cosign verify-blob \
  --key https://stella-ops.org/keys/cosign.pub \
  --signature docker-compose.stella-ops.yml.sig \
  docker-compose.stella-ops.yml

# 4. Copy .env.example → .env and edit secrets
cp .env.example .env
$EDITOR .env

# 5. Launch databases (MongoDB + Redis)
docker compose --env-file .env -f docker-compose.infrastructure.yml up -d

# 6. Launch Stella Ops (first run pulls ~50MB merged vuln DB)
docker compose --env-file .env -f docker-compose.stella-ops.yml up -d

Default login: admin / changeme UI: https://<host>:8443 (selfsigned certificate)

Pinning bestpractice in production environments replace stella-ops:latest with the immutable digest printed by docker images --digests.

Repo bundles Development, staging, and airgapped Compose profiles live under deploy/compose/, already tied to the release manifests in deploy/releases/. Helm users can pull the same channel overlays from deploy/helm/stellaops/values-*.yaml and validate everything with deploy/tools/validate-profiles.sh.

1.1·Concelier authority configuration

The Concelier container reads configuration from etc/concelier.yaml plus CONCELIER_ environment variables. To enable the new Authority integration:

  1. Add the following keys to .env (replace values for your environment):

    CONCELIER_AUTHORITY__ENABLED=true
    CONCELIER_AUTHORITY__ALLOWANONYMOUSFALLBACK=true   # temporary rollout only
    CONCELIER_AUTHORITY__ISSUER="https://authority.internal"
    CONCELIER_AUTHORITY__AUDIENCES__0="api://concelier"
    CONCELIER_AUTHORITY__REQUIREDSCOPES__0="concelier.jobs.trigger"
    CONCELIER_AUTHORITY__REQUIREDSCOPES__1="advisory:read"
    CONCELIER_AUTHORITY__REQUIREDSCOPES__2="advisory:ingest"
    CONCELIER_AUTHORITY__REQUIREDTENANTS__0="tenant-default"
    CONCELIER_AUTHORITY__CLIENTID="concelier-jobs"
    CONCELIER_AUTHORITY__CLIENTSCOPES__0="concelier.jobs.trigger"
    CONCELIER_AUTHORITY__CLIENTSCOPES__1="advisory:read"
    CONCELIER_AUTHORITY__CLIENTSCOPES__2="advisory:ingest"
    CONCELIER_AUTHORITY__CLIENTSECRETFILE="/run/secrets/concelier_authority_client"
    CONCELIER_AUTHORITY__BYPASSNETWORKS__0="127.0.0.1/32"
    CONCELIER_AUTHORITY__BYPASSNETWORKS__1="::1/128"
    CONCELIER_AUTHORITY__RESILIENCE__ENABLERETRIES=true
    CONCELIER_AUTHORITY__RESILIENCE__RETRYDELAYS__0="00:00:01"
    CONCELIER_AUTHORITY__RESILIENCE__RETRYDELAYS__1="00:00:02"
    CONCELIER_AUTHORITY__RESILIENCE__RETRYDELAYS__2="00:00:05"
    CONCELIER_AUTHORITY__RESILIENCE__ALLOWOFFLINECACHEFALLBACK=true
    CONCELIER_AUTHORITY__RESILIENCE__OFFLINECACHETOLERANCE="00:10:00"
    

    Store the client secret outside source control (Docker secrets, mounted file, or Kubernetes Secret). Concelier loads the secret during post-configuration, so the value never needs to appear in the YAML template.

    Connected sites can keep the retry ladder short (1s,2s,5s) so job triggers fail fast when Authority is down. For airgapped or intermittently connected deployments, extend RESILIENCE__OFFLINECACHETOLERANCE (e.g. 00:30:00) so cached discovery/JWKS data remains valid while the Offline Kit synchronises upstream changes.

  2. Redeploy Concelier:

    docker compose --env-file .env -f docker-compose.stella-ops.yml up -d concelier
    
  3. Tail the logs: docker compose logs -f concelier. Successful /jobs* calls now emit Concelier.Authorization.Audit entries with route, status, subject, clientId, scopes, bypass, and remote fields. 401 denials keep the same shape—watch for bypass=True, which indicates a bypass CIDR accepted an anonymous call. See docs/modules/concelier/operations/authority-audit-runbook.md for a full audit/alerting checklist.

Enforcement deadline keep CONCELIER_AUTHORITY__ALLOWANONYMOUSFALLBACK=true only while validating the rollout. Set it to false (and restart Concelier) before 2025-12-31 UTC to require tokens in production.


2·Optional: request a free quota token

Anonymous installs allow {{ quota_anon }} scans per UTC day. Email token@stella-ops.org to receive a signed JWT that raises the limit to {{ quota_token }} scans/day. Insert it into .env:

STELLA_JWT="pastetokenhere"
docker compose --env-file .env -f docker-compose.stella-ops.yml \
  exec stella-ops stella set-jwt "$STELLA_JWT"

The UI shows a reminder at 200 scans and throttles above the limit but will never block your pipeline.


3·Airgapped install (Offline Update Kit)

When running on an isolated network use the Offline Update Kit (OUK):

# Download & verify on a connected host
curl -LO https://get.stella-ops.org/ouk/stella-ops-offline-kit-v0.1a.tgz
curl -LO https://get.stella-ops.org/ouk/stella-ops-offline-kit-v0.1a.tgz.sig

cosign verify-blob \
  --key https://stella-ops.org/keys/cosign.pub \
  --signature stella-ops-offline-kit-v0.1a.tgz.sig \
  stella-ops-offline-kit-v0.1a.tgz

# Transfer → airgap → import
docker compose --env-file .env -f docker-compose.stella-ops.yml \
  exec stella admin import-offline-usage-kit stella-ops-offline-kit-v0.1a.tgz

Import is atomic; no service downtime.

For details see the dedicated Offline Kit guide.


4·Next steps

  • 5min QuickStart: /quickstart/
  • CI recipes: docs/ci/20_CI_RECIPES.md
  • Plugin SDK: /plugins/

Generated {{ "now" | date: "%Y%m%d" }} — build tags inserted at render time.