Skip to content

Services

What docker-compose.yml version 6.4 starts, generated from the file itself — the comments below are the file's own. arcsecond status lists the same services with their state; arcsecond logs <service> shows one's log.

ServiceContainerImagePorts on the machineDepends onOptional
dbarcsecond-dbpostgres:16noneno
brokerarcsecond-brokerredis:7.4noneno
backendarcsecond-apighcr.io/arcsecond-io/arcsecond-api:latest8800:8800db, brokerno
workerarcsecond-workerghcr.io/arcsecond-io/arcsecond-api:latestnonebackendno
beatarcsecond-beatghcr.io/arcsecond-io/arcsecond-api:latestnonebackendno
platesolverarcsecond-platesolverghcr.io/arcsecond-io/arcsecond-service-platesolver-astrometry:latest8900:8900no
webarcsecond-webghcr.io/arcsecond-io/arcsecond-web:latest5555:5555backendno
alertsarcsecond-alertsghcr.io/arcsecond-io/arcsecond-api:latestnonebackendyes (alerts)

db

Database (PostgresQL)

  • Container: arcsecond-db
  • Image: postgres:16
  • Ports published on the machine: none — reachable from the other containers only
  • Restart policy: unless-stopped — comes back with Docker after a reboot unless stopped on purpose
  • Storage: arcsecond_postgres_data:/var/lib/postgresql/data

From the file:

No host port. The backend reaches the DB over the internal Docker network (hostname arcsecond-db), and every CLI command that needs the DB (backups, restore, password rotation) goes through docker exec into this container. Publishing 5432 on the host bought nothing and failed the whole stack whenever another Postgres already held it. You must have a .env file with database credentials beside this yml file.

broker

Broker (Redis) - Shared messaging service between different services.

  • Container: arcsecond-broker
  • Image: redis:7.4
  • Ports published on the machine: none — reachable from the other containers only
  • Restart policy: unless-stopped — comes back with Docker after a reboot unless stopped on purpose

From the file:

No host port either: Redis with no auth must never be reachable from outside the stack, and the backend reaches it over the Docker network.

backend

Arcsecond backend (REST APIs). Can be used for API calls and external pipelines, scripts etc.

  • Container: arcsecond-api
  • Image: ghcr.io/arcsecond-io/arcsecond-api:latest
  • Ports published on the machine: 8800:8800
  • Starts after: db, broker
  • Restart policy: unless-stopped — comes back with Docker after a reboot unless stopped on purpose
  • Healthcheck: yes — arcsecond start waits for it
  • Time allowed to stop cleanly: 60s
  • Storage: ${SHARED_DATA_PATH} → /data
  • Reads from .env: SHARED_DATA_PATH

From the file:

Allows the backend to reach the host machine via host.docker.internal. Required on Linux; Docker Desktop on Windows/macOS adds this automatically. You must have a .env file with secret keys beside this yml file. Leave /data as is, it's a path inside the container, not in the host machine. SHARED_DATA_PATH must be a path of your host machine, specified in the .env file.

worker

Arcsecond worker, for offloading background work.

  • Container: arcsecond-worker
  • Image: ghcr.io/arcsecond-io/arcsecond-api:latest
  • Ports published on the machine: none — reachable from the other containers only
  • Starts after: backend
  • Restart policy: unless-stopped — comes back with Docker after a reboot unless stopped on purpose
  • Time allowed to stop cleanly: 120s
  • Storage: ${SHARED_DATA_PATH} → /data
  • Reads from .env: SHARED_DATA_PATH

From the file:

Leave /data as is, it's a path inside the container, not in the host machine. SHARED_DATA_PATH must be a path of your host machine, specified in the .env file.

beat

Arcsecond beat, to launch specific background tasks at specific times.

  • Container: arcsecond-beat
  • Image: ghcr.io/arcsecond-io/arcsecond-api:latest
  • Ports published on the machine: none — reachable from the other containers only
  • Starts after: backend
  • Restart policy: unless-stopped — comes back with Docker after a reboot unless stopped on purpose
  • Time allowed to stop cleanly: 30s

platesolver

Arcsecond plate solver service, for solving coordinates from raw images.

  • Container: arcsecond-platesolver
  • Image: ghcr.io/arcsecond-io/arcsecond-service-platesolver-astrometry:latest
  • Ports published on the machine: 8900:8900
  • Restart policy: unless-stopped — comes back with Docker after a reboot unless stopped on purpose

web

Arcsecond webapp. Served on 5555 only: a self-hosted install is organisation-based and therefore always a portal, so the second port that used to be here (5577) served the very same app.

  • Container: arcsecond-web
  • Image: ghcr.io/arcsecond-io/arcsecond-web:latest
  • Ports published on the machine: 5555:5555
  • Starts after: backend
  • Restart policy: unless-stopped — comes back with Docker after a reboot unless stopped on purpose

alerts

Arcsecond transient-alerts consumer (optional). Long-lived Kafka client for NASA GCN. Outbound TLS to kafka.gcn.nasa.gov and auth.gcn.nasa.gov only — nothing listens. Requires GCN_CONSUMER_CLIENT_ID / GCN_CONSUMER_CLIENT_SECRET in .env; idles harmlessly when they are absent. Single instance only — do not scale it.

  • Container: arcsecond-alerts
  • Image: ghcr.io/arcsecond-io/arcsecond-api:latest
  • Ports published on the machine: none — reachable from the other containers only
  • Starts after: backend
  • Restart policy: unless-stopped — comes back with Docker after a reboot unless stopped on purpose
  • Time allowed to stop cleanly: 30s
  • Optional: added with arcsecond setup --with-alerts, removed with --without-alerts

MIT Licensed