Replace the ad-hoc tables/procedures install layout with versioned, ordered SQL migrations tracked in broker_schema_migrations. Add optional least-privilege role provisioning (--with-roles), multi-tenant row-level security, lease-based job claiming with stale-lease recovery, and job dependencies -- both by job id and by fan-in job group. Add Docker/Compose support for running the broker and its test suite.
51 lines
1.6 KiB
YAML
51 lines
1.6 KiB
YAML
services:
|
|
postgres:
|
|
image: docker.io/library/postgres:16-alpine
|
|
environment:
|
|
POSTGRES_DB: broker
|
|
POSTGRES_USER: postgres
|
|
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:?set POSTGRES_PASSWORD in .env}
|
|
volumes:
|
|
- postgres-data:/var/lib/postgresql/data
|
|
healthcheck:
|
|
test: ["CMD-SHELL", "pg_isready -U postgres -d broker"]
|
|
interval: 2s
|
|
timeout: 3s
|
|
retries: 30
|
|
restart: unless-stopped
|
|
|
|
# One-shot: applies migrations and creates/rotates the least-privilege
|
|
# broker_admin/broker_runtime/broker_enqueue roles, then exits. The
|
|
# broker service below only starts once this completes successfully.
|
|
migrate:
|
|
build:
|
|
context: .
|
|
dockerfile: Dockerfile
|
|
depends_on:
|
|
postgres:
|
|
condition: service_healthy
|
|
volumes:
|
|
- ./broker.docker.yaml:/etc/pgsql-broker/broker.yaml:ro
|
|
environment:
|
|
PGUSER: postgres
|
|
PGPASSWORD: ${POSTGRES_PASSWORD:?set POSTGRES_PASSWORD in .env}
|
|
BROKER_ADMIN_PASSWORD: ${BROKER_ADMIN_PASSWORD:?set BROKER_ADMIN_PASSWORD in .env}
|
|
BROKER_RUNTIME_PASSWORD: ${BROKER_RUNTIME_PASSWORD:?set BROKER_RUNTIME_PASSWORD in .env}
|
|
BROKER_ENQUEUE_PASSWORD: ${BROKER_ENQUEUE_PASSWORD:?set BROKER_ENQUEUE_PASSWORD in .env}
|
|
command: ["install", "--with-roles"]
|
|
restart: "no"
|
|
|
|
broker:
|
|
build:
|
|
context: .
|
|
dockerfile: Dockerfile
|
|
depends_on:
|
|
migrate:
|
|
condition: service_completed_successfully
|
|
volumes:
|
|
- ./broker.docker.yaml:/etc/pgsql-broker/broker.yaml:ro
|
|
restart: unless-stopped
|
|
|
|
volumes:
|
|
postgres-data:
|