Files
workadventure/compose.livekit.yml
2026-06-10 03:35:15 +00:00

151 lines
5.0 KiB
YAML

services:
livekit:
image: livekit/livekit-server:v1.12.0
command: --config /etc/livekit/config.yaml
ports:
- target: 7881
published: 7881
protocol: udp
mode: host
labels:
# TODO: Make livekit domain configurable
# TODO: Add STACK_NAME
- "traefik.enable=true"
- "traefik.http.routers.livekit.rule=Host(`livekit.${DOMAIN}`)"
- "traefik.http.routers.livekit.entryPoints=web"
- "traefik.http.services.livekit.loadbalancer.server.port=7880"
# TODO: Traefik UDP?
# - "traefik.udp.routers.livekit-udp.entrypoints=udp"
# - "traefik.udp.routers.livekit-udp.service=livekit-udp"
# - "traefik.udp.services.livekit-udp.loadbalancer.server.port=7881"
- "caddy_0=livekit.${DOMAIN}"
- "caddy_0.reverse_proxy={{upstreams 7880}}"
- "caddy_0.tls.on_demand="
# TODO: Caddy UDP?
configs:
- source: livekit_config
target: /etc/livekit/config.yaml
networks:
- proxy
- internal
egress:
image: livekit/egress:v1.13.0
labels:
# TODO: Make egress domain configurable
# TODO: Add STACK_NAME
- "traefik.enable=true"
- "traefik.http.routers.egress.rule=Host(`egress.${DOMAIN}`)"
- "traefik.http.routers.egress.entryPoints=web"
- "traefik.http.services.egress.loadbalancer.server.port=8080"
- "caddy_1=egress.${DOMAIN}"
- "caddy_1.reverse_proxy={{upstreams 8080}}"
- "caddy_1.tls.on_demand="
environment:
EGRESS_CONFIG_FILE: /etc/egress/config.yaml
DISABLE_CUDA: "true"
DISABLE_NVENC: "true"
EGRESS_OUTPUT_DIR: "/out"
configs:
- source: egress_config
target: /etc/egress/config.yaml
extra_hosts:
- "host.docker.internal:host-gateway"
cap_add:
- SYS_ADMIN
privileged: true
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8081/health"]
interval: 5s
timeout: 3s
retries: 3
networks:
- proxy
rustfs:
image: rustfs/rustfs:1.0.0-alpha.83
command: ["/data"]
labels:
- "traefik.enable=true"
# TODO: Make rustfs domain configurable
# TODO: Add STACK_NAME
- "traefik.http.routers.rustfs-livekit.rule=Host(`rustfs-livekit.${DOMAIN}`)"
- "traefik.http.routers.rustfs-livekit.entryPoints=web"
- "traefik.http.services.rustfs-livekit.loadbalancer.server.port=9001"
- "traefik.http.routers.rustfs-livekit.service=rustfs-livekit"
- "caddy_2=rustfs.${DOMAIN}"
- "caddy_2.reverse_proxy={{upstreams 9001}}"
- "caddy_2.tls.on_demand="
# TODO: Make rustfs CDN domain configurable
- "traefik.http.routers.cdn-livekit.rule=Host(`cdn-livekit.${DOMAIN}`)"
- "traefik.http.routers.cdn-livekit.entryPoints=web"
- "traefik.http.services.cdn-livekit.loadbalancer.server.port=9000"
- "traefik.http.routers.cdn-livekit.service=cdn-livekit"
- "caddy_3=rustfs-cdn.${DOMAIN}"
- "caddy_3.reverse_proxy={{upstreams 9000}}"
- "caddy_3.tls.on_demand="
environment:
RUSTFS_ACCESS_KEY:
RUSTFS_SECRET_KEY:
RUSTFS_CONSOLE_ENABLE: "true"
networks:
- proxy
- internal
volumes:
- rustfs:/data
rustfs-init:
image: amazon/aws-cli:2.34.56
entrypoint: ["/bin/sh", "-ec"]
command:
- |
until aws --endpoint-url http://rustfs:9000 s3api list-buckets >/dev/null 2>&1; do
sleep 1
done
aws --endpoint-url http://rustfs:9000 s3api head-bucket --bucket livekit-recording >/dev/null 2>&1 \
|| aws --endpoint-url http://rustfs:9000 s3api create-bucket \
--bucket livekit-recording \
--create-bucket-configuration LocationConstraint=eu-west-1
environment:
AWS_ACCESS_KEY_ID:
AWS_SECRET_ACCESS_KEY:
AWS_DEFAULT_REGION: "eu-west-1"
networks:
- internal
back:
environment:
LIVEKIT_HOST: "https://livekit.${DOMAIN}"
LIVEKIT_API_KEY:
LIVEKIT_API_SECRET:
MAX_USERS_FOR_WEBRTC:
LIVEKIT_RECORDING_S3_ENDPOINT: "http://rustfs:9000"
LIVEKIT_RECORDING_S3_ACCESS_KEY:
LIVEKIT_RECORDING_S3_SECRET_KEY:
LIVEKIT_RECORDING_S3_REGION: "eu-west-1"
LIVEKIT_RECORDING_S3_BUCKET: "livekit-recording"
LIVEKIT_RECORDING_S3_CDN_ENDPOINT: "https://rustfs-cdn.$DOMAIN"
app:
environment:
LIVEKIT_RECORDING_S3_ENDPOINT: "http://rustfs:9000"
LIVEKIT_RECORDING_S3_ACCESS_KEY:
LIVEKIT_RECORDING_S3_SECRET_KEY:
LIVEKIT_RECORDING_S3_REGION: "eu-west-1"
LIVEKIT_RECORDING_S3_BUCKET: "livekit-recording"
LIVEKIT_RECORDING_S3_CDN_ENDPOINT: "https://rustfs-cdn.$DOMAIN"
LIVEKIT_PIXEL_DENSITY: "${LIVEKIT_PIXEL_DENSITY:-}"
configs:
livekit_config:
name: ${STACK_NAME}_livekit_config_${LIVEKIT_CONFIG_VERSION}
file: livekit-config.yaml.tmpl
template_driver: golang
egress_config:
name: ${STACK_NAME}_egress_config_${EGRESS_CONFIG_VERSION}
file: egress-config.yaml.tmpl
template_driver: golang
volumes:
rustfs: