servers/services/cojedzie/stack.yml
Kacper Donat 9d67ea9bd2 cojedzie: Shorten ClickHouse config checksum to fit Swarm name limit
Swarm config names are limited to 64 characters; the full SHA1 pushed
cojedzie-next_clickhouse_config_<sha> to 72.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-01 20:17:15 +01:00

131 lines
3.8 KiB
YAML

version: "{{ compose_version }}"
x-defaults:
worker: &worker
image: {{ cojedzie_image_base }}/worker:{{ cojedzie_worker_version }}
env_file:
- ./api.env
- ./sentry.env
volumes:
- db_data:/var/db
depends_on:
- api
services:
api:
image: {{ cojedzie_image_base }}/api:{{ cojedzie_api_version }}
networks:
- "{{ ingress_network }}"
- default
volumes:
- db_data:/var/db
environment:
- TRUSTED_PROXIES=10.0.0.0/8
env_file:
- ./api.env
- ./sentry.env
deploy:
mode: replicated
replicas: 1
update_config:
parallelism: 1
order: start-first
labels:
- traefik.enable=true
- traefik.http.routers.{{ service }}-api.rule=({{ traefik_routing_rule }}) && (PathPrefix(`/api/`) || PathPrefix(`/bundles/`))
- traefik.http.routers.{{ service }}-api.priority=100
- traefik.http.routers.{{ service }}-api.tls=true
- traefik.http.routers.{{ service }}-api.tls.certresolver=lets-encrypt
- traefik.http.services.{{ service }}-api.loadbalancer.server.port=8080
schedule:
<<: *worker
environment:
COJEDZIE_WORKER_OPTS: '-vv'
COJEDZIE_WORKER_QUEUES: 'scheduler_default scheduler_hub scheduler_recorder'
worker:
<<: *worker
# departure history (cojedzie ADR 0020); reached only inside the stack
clickhouse:
image: clickhouse/clickhouse-server:{{ cojedzie_clickhouse_version|default('25.8') }}
environment:
CLICKHOUSE_DB: cojedzie
CLICKHOUSE_USER: cojedzie
CLICKHOUSE_PASSWORD: "{{ cojedzie_clickhouse_password }}"
CLICKHOUSE_DEFAULT_ACCESS_MANAGEMENT: 1
ulimits:
nofile:
soft: 262144
hard: 262144
volumes:
- clickhouse_data:/var/lib/clickhouse
configs:
- source: clickhouse_config_{{ clickhouse_config.checksum[:8] }}
target: /etc/clickhouse-server/config.d/low-memory.xml
mode: 0444
deploy:
mode: replicated
replicas: 1
resources:
limits:
memory: 2G
mercure:
image: dunglas/mercure:{{ cojedzie_mercure_version|default('latest') }}
networks:
- "{{ ingress_network }}"
- default
environment:
SERVER_NAME: ":80"
USE_FORWARDED_HEADERS: 1
MERCURE_PUBLISHER_JWT_KEY: "{{ cojedzie_mercure_jwt_key }}"
MERCURE_SUBSCRIBER_JWT_KEY: "{{ cojedzie_mercure_jwt_key }}"
volumes:
- mercure_data:/data
- mercure_config:/config
deploy:
mode: replicated
replicas: 1
labels:
- traefik.enable=true
- traefik.http.routers.{{ service }}-mercure.rule=({{ traefik_routing_rule }}) && PathPrefix(`/.well-known/mercure`)
- traefik.http.routers.{{ service }}-mercure.tls=true
- traefik.http.routers.{{ service }}-mercure.tls.certresolver=lets-encrypt
- traefik.http.services.{{ service }}-mercure.loadbalancer.server.port=80
front:
image: {{ cojedzie_image_base }}/front:{{ cojedzie_front_version }}
networks:
- "{{ ingress_network }}"
- default
depends_on:
- api
env_file:
- ./front.env
- ./sentry.env
deploy:
mode: replicated
replicas: 1
update_config:
parallelism: 1
order: start-first
labels:
- traefik.enable=true
- traefik.http.routers.{{ service }}-front.rule={{ traefik_routing_rule }}
- traefik.http.routers.{{ service }}-front.tls=true
- traefik.http.routers.{{ service }}-front.tls.certresolver=lets-encrypt
- traefik.http.routers.{{ service }}-front.middlewares=gzip@file
- traefik.http.services.{{ service }}-front.loadbalancer.server.port=3000
configs:
clickhouse_config_{{ clickhouse_config.checksum[:8] }}:
file: ./config/clickhouse.xml
volumes:
db_data: ~
clickhouse_data: ~
mercure_data: ~
mercure_config: ~