Listory/docker-compose.yml
Julian Tölle 515c80a6e3 fix(dev): broken traces with latest OTEL libraries
OTEL changed the Trace HTTP API, which broke the integration with tempo.

In the referenced nightly build of tempo, the new api is implemented.

This should be replaced by an actual tempo release, once a new one is available.
2022-09-28 10:11:37 +02:00

212 lines
5.1 KiB
YAML

version: "3.9"
# Required for promtail scraping
x-logging: &default-logging
driver: "journald"
options:
tag: "{{.Name}}"
services:
#####
## Required services for listory
#####
db:
image: postgres:14.5
environment:
POSTGRES_PASSWORD: listory
POSTGRES_USER: listory
POSTGRES_DB: listory
networks:
- db
api:
build:
context: .
target: build-api
command: ["npm", "run", "start:dev"]
environment:
DB_HOST: db
DB_USERNAME: listory
DB_PASSWORD: listory
DB_DATABASE: listory
JWT_SECRET: listory
APP_URL: "http://localhost:3000"
NODE_ENV: local # pretty logs
OTEL_EXPORTER_OTLP_ENDPOINT: http://tempo:4318
env_file: .env
volumes:
- ./src:/app/src
ports:
- 3000 # API
- "9464:9464" # Metrics
labels:
- "traefik.enable=true" # Enable reverse-proxy for this service
- "traefik.http.routers.api.rule=PathPrefix(`/api`)"
- "traefik.http.routers.api.entrypoints=web"
networks:
- web
- db
logging: *default-logging
frontend:
build:
context: .
target: build-frontend
command: ["npm", "run", "start"]
volumes:
- ./frontend/postcss.config.js:/app/frontend/postcss.config.js:ro
- ./frontend/tailwind.config.js:/app/frontend/tailwind.config.js:ro
- ./frontend/src:/app/frontend/src:ro
- ./frontend/public:/app/frontend/public:ro
ports:
- 3000
labels:
- "traefik.enable=true" # Enable reverse-proxy for this service
- "traefik.http.routers.frontend.rule=PathPrefix(`/`)"
- "traefik.http.routers.frontend.entrypoints=web"
networks:
- web
proxy:
image: traefik:v2.8.7
command:
#- --log.level=debug
#- --accesslog=true
- --api # Enables the web UI
- --api.insecure=true
- --providers.docker=true
- --providers.docker.exposedbydefault=false
- --providers.docker.network=listory_web
- --entrypoints.web.address=:3000
ports:
- "3000:3000" # The HTTP port
- "8080:8080" # The web UI
networks:
- web
volumes:
- /var/run/docker.sock:/var/run/docker.sock # So that Traefik can listen to the Docker events
#####
## console REPL
#####
console:
profiles:
- console
build:
context: .
target: build-api
command: ["npm", "run", "start:console"]
stdin_open: true
tty: true
environment:
DB_HOST: db
DB_USERNAME: listory
DB_PASSWORD: listory
DB_DATABASE: listory
JWT_SECRET: listory
APP_URL: "http://localhost:3000"
NODE_ENV: local # pretty logs
OTEL_EXPORTER_OTLP_ENDPOINT: http://tempo:4318
env_file: .env
volumes:
- ./src:/app/src
ports:
- "9464:9464" # Metrics
networks:
- db
logging: *default-logging
#####
## Observability
## Adopted from https://github.com/stefanprodan/dockprom/blob/master/docker-compose.yml
#####
prometheus:
profiles: ["observability"]
image: prom/prometheus:v2.38.0
volumes:
- ./observability/prometheus:/etc/prometheus
- prometheus_data:/prometheus
command:
- "--config.file=/etc/prometheus/prometheus.yml"
- "--storage.tsdb.path=/prometheus"
- "--storage.tsdb.retention.time=200h"
- "--web.enable-lifecycle"
ports:
- 9090:9090
networks:
- observability
- web
loki:
profiles: ["observability"]
image: grafana/loki:2.6.1
command: ["-config.file=/etc/loki/loki.yaml"]
ports:
- "3100" # loki needs to be exposed so it receives logs
volumes:
- ./observability/loki/loki.yaml:/etc/loki/loki.yaml
networks:
- observability
promtail:
profiles: ["observability"]
image: grafana/promtail:2.6.1
command: ["-config.file=/etc/promtail.yaml"]
volumes:
- ./observability/promtail/promtail.yaml:/etc/promtail.yaml
- /var/lib/docker/containers:/var/lib/docker/containers:ro
- /var/log/journal/:/var/log/journal/
- /run/log/journal/:/run/log/journal/
- /etc/machine-id:/etc/machine-id
ports:
- "3102"
networks:
- observability
depends_on:
- loki
tempo:
profiles: ["observability"]
image: grafana/tempo:main-53d34ee-amd64
command: ["-config.file=/etc/tempo.yaml"]
volumes:
- ./observability/tempo/tempo.yaml:/etc/tempo.yaml
- tempo_data:/tmp/tempo
ports:
- "3101" # tempo
- "4318" # OpenTelemetry HTTP
networks:
- observability
- web
grafana:
profiles: ["observability"]
image: grafana/grafana-oss:9.1.6
volumes:
- ./observability/grafana/provisioning:/etc/grafana/provisioning
environment:
- GF_SECURITY_ADMIN_USER=listory
- GF_SECURITY_ADMIN_PASSWORD=listory
- GF_AUTH_ANONYMOUS_ENABLED=true
- GF_AUTH_ANONYMOUS_ORG_ROLE=Admin
- GF_USERS_ALLOW_SIGN_UP=false
- GF_SERVER_HTTP_PORT=2345
ports:
- 2345:2345
networks:
- observability
volumes:
prometheus_data: {}
tempo_data: {}
networks:
db: {}
web: {}
observability: {}