# Full acrate stack, running on a single machine for experimental purposes x-config: ingress_config_dir: &ingress_config_dir "./config/caddy" name: "acrate" volumes: ingress_data: ingress_config: postgres_data: services: # Public ingress node ingress: image: "caddy" restart: "unless-stopped" cap_add: - "NET_ADMIN" ports: - protocol: "tcp" target: 80 published: 80 - protocol: "tcp" target: 443 published: 443 - protocol: "udp" target: 443 published: 443 volumes: - type: "volume" source: "ingress_data" target: "/data" - type: "volume" source: "ingress_config" target: "/config" - type: "bind" source: *ingress_config_dir target: "/etc/caddy" # Main database database: image: "postgres" restart: "unless-stopped" environment: # Make sure the password is the same for both client and server tools POSTGRES_PASSWORD: &postgres_password "acrate" PGUSER: "postgres" PGPASS: *postgres_password volumes: - type: "volume" source: "postgres_data" target: "/var/lib/postgresql/data" ports: # FIXME: for development purposes only - protocol: "tcp" host_ip: "127.0.0.1" target: 5432 published: 5432 expose: - 5432 healthcheck: test: ["CMD-SHELL", "pg_isready"] # Migrations migrate: build: dockerfile: "./Dockerfile" additional_contexts: - "source=.." target: "migrate" environment: ACRATE_DATABASE_DATABASE_URL: &database_url "postgres:///postgres?host=database&user=postgres&password=acrate" # TODO: Split parameters off to their own envvars depends_on: database: condition: "service_healthy" # Resource descriptor server rdserver: build: dockerfile: "./Dockerfile" additional_contexts: - "source=.." target: "rdserver" restart: "unless-stopped" environment: ACRATE_WEBFINGER_BIND_ADDRESS: "0.0.0.0:80" ACRATE_WEBFINGER_DATABASE_URL: *database_url expose: - 80 depends_on: database: condition: "service_healthy" migrate: condition: "service_completed_successfully"