version: '3' services: coturn: image: woahbase/alpine-coturn volumes: - "./turnserver.conf:/var/lib/coturn/turnserver.conf" network_mode: host restart: always profiles: ["coturn"] prometheus: image: prom/prometheus:latest volumes: - ./prometheus/:/etc/prometheus/ - prometheus_data:/prometheus command: - '--config.file=/etc/prometheus/prometheus.yml' - '--storage.tsdb.path=/prometheus' - '--web.console.libraries=/usr/share/prometheus/console_libraries' - '--web.console.templates=/usr/share/prometheus/consoles' - '--storage.tsdb.retention.time=1y' restart: always profiles: [ "metrics" ] grafana: image: grafana/grafana user: "472" depends_on: - prometheus volumes: - grafana_data:/var/lib/grafana - ./grafana/provisioning/:/etc/grafana/provisioning/ environment: GF_SECURITY_ADMIN_PASSWORD: "${GRAFANA_ADMIN_PASSWORD}" GF_USERS_ALLOW_SIGN_UP: "false" GF_SERVER_ROOT_URL: "https://${JAM_HOST}/_/grafana" GF_SERVER_SERVE_FROM_SUB_PATH: "true" restart: always labels: - traefik.http.routers.grafana.rule=(Host(`${JAM_HOST}`) && PathPrefix(`/_/grafana`)) - traefik.http.routers.grafana.tls=true - traefik.http.routers.grafana.tls.certresolver=letsencrypt - traefik.enable=true profiles: [ "metrics" ] postgres: image: postgres:12 restart: always environment: POSTGRES_USER: jam POSTGRES_PASSWORD: jam volumes: - ../data/postgres:/var/lib/postgresql/data ui: image: registry.gitlab.com/jam-systems/jam/ui:${CHANNEL} restart: always environment: - JAM_HOST - JAM_STUN_SERVER - JAM_TURN_SERVER - JAM_TURN_SERVER_USERNAME - JAM_TURN_SERVER_CREDENTIAL - JAM_RESTRICT_ROOM_CREATION - SLACK_CLIENT_ID - SLACK_CLIENT_SECRET - SLACK_API_URL labels: - traefik.http.routers.${COMPOSE_PROJECT_NAME}_ui.rule=Host(`${JAM_HOST}`) - traefik.http.routers.${COMPOSE_PROJECT_NAME}_ui.tls=true - traefik.http.routers.${COMPOSE_PROJECT_NAME}_ui.tls.certresolver=letsencrypt - traefik.enable=true volumes: - "../jam-config:/jam-config" pantryredis: image: library/redis volumes: - "../data/pantryredis:/data" command: "redis-server --appendonly yes" pantry: image: registry.gitlab.com/jam-systems/jam/pantry:${CHANNEL} restart: always environment: - JAM_HOST - JAM_RESTRICT_ROOM_CREATION labels: - traefik.http.routers.${COMPOSE_PROJECT_NAME}_pantry.rule=(Host(`${JAM_HOST}`) && PathPrefix(`/_/pantry`)) - traefik.http.routers.${COMPOSE_PROJECT_NAME}_pantry.middlewares=${COMPOSE_PROJECT_NAME}_pantry_stripprefix - traefik.http.middlewares.${COMPOSE_PROJECT_NAME}_pantry_stripprefix.stripprefix.prefixes=/_/pantry - traefik.http.routers.${COMPOSE_PROJECT_NAME}_pantry.tls=true - traefik.http.routers.${COMPOSE_PROJECT_NAME}_pantry.tls.certresolver=letsencrypt - traefik.enable=true volumes: - "../jam-config:/jam-config" traefik: hostname: traefik image: traefik restart: always command: - "--entryPoints.web.address=:80" - "--entryPoints.websecure.address=:443" - "--entryPoints.metrics.address=:8080" - "--certificatesResolvers.letsencrypt.acme.email=admin@${JAM_HOST}" - "--certificatesResolvers.letsencrypt.acme.storage=/acme/acme.json" - "--certificatesResolvers.letsencrypt.acme.httpChallenge.entryPoint=web" - "--providers.docker=true" - "--providers.docker.exposedByDefault=false" - "--metrics.prometheus.entryPoint=metrics" - "--metrics.prometheus=true" - "--metrics.prometheus.addEntryPointsLabels=true" - "--metrics.prometheus.addServicesLabels=true" labels: - traefik.http.routers.http-catchall.rule=hostregexp(`{host:.+}`) - traefik.http.routers.http-catchall.entrypoints=web - traefik.http.routers.http-catchall.middlewares=redirect-to-https@docker - traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https - traefik.enable=true ports: - "80:80" - "443:443" volumes: - /var/run/docker.sock:/var/run/docker.sock - ../data/traefik/acme:/acme profiles: [ "web" ] volumes: prometheus_data: {} grafana_data: {}