generated from coop-cloud/example
151 lines
5.0 KiB
YAML
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:
|