Open dinotheextinct opened 2 years ago
I recently got this working myself. It took a fair bit of trial and error. You may make use of this if you want, but I offer no warranties. In particular, the port configuration is probably doing more than it needs to - I just got this working and haven't verified everything I did was necessary.
It's also worth noting that Livekit's instructions say they want you to use host networking (for performance reasons). My host is Windows, so that wasn't an option. I got it working inside a container but haven't done a real-world video/audio test yet.
Also, I had to modify the init_script.sh from LiveKit.
I was using https://github.com/bekriebel/fvtt-module-avclient-livekit/wiki/Installing-LiveKit-on-an-Existing-Self-Hosted-Foundry-Server as a basis, but for the above-mentioned reasons, I had to deviate and not use host networking.
version: "3.8"
secrets:
config_json:
file: secrets.json
services:
foundry_lock_cleanup:
image: alpine
entrypoint: ["/bin/sh", "./shutdown_handler.sh"]
volumes:
- ./shutdown_handler.sh:/shutdown_handler.sh:ro
- /home/username/fvtt/foundrydata:/foundrydata
foundry:
image: felddy/foundryvtt:preinstall
depends_on:
foundry_lock_cleanup:
condition: service_started
swag:
condition: service_healthy
container_name: foundry
hostname: foundry
init: true
environment:
- FOUNDRY_HOSTNAME=foundry-vtt.mydomain.com
- FOUNDRY_MINIFY_STATIC_FILES=true
- FOUNDRY_PROXY_SSL=true
- FOUNDRY_PROXY_PORT=443
- FOUNDRY_UPNP=true
volumes:
- /home/username/fvtt/foundrydata:/data
restart: unless-stopped
ports:
- target: 30000
published: 30000
protocol: tcp
# expose:
# - 30000
secrets:
- source: config_json
target: config.json
networks:
- frontend
- backend
swag:
image: ghcr.io/linuxserver/swag
container_name: swag
cap_add:
- NET_ADMIN
environment:
- PUID=1000
- PGID=1000
- TZ=US/Pacific # Change to your timezone
- URL=mydomain.com # replace with your domain name
- SUBDOMAINS=wildcard
- CERTPROVIDER=zerossl
- DNSPLUGIN=google-domains
- VALIDATION=dns
- EMAIL=accounts@horkin.com # your email address here (optional)
volumes:
- ./swag/config:/config # replace with the correct path to your swag config dir
- ./livekit.mydomain.com/livekit:/var/log/nginx/livekit
- ./livekit.mydomain.com/livekit-turn:/var/log/nginx/livekit-turn
ports:
- 80:80
- 443:443
- 22:22
- 444:444
- 5349:5349
healthcheck:
test: ["CMD-SHELL", "wget -O /dev/null https://foundry-vtt.mydomain.com/health-check || exit 1"]
interval: "60s"
timeout: "3s"
start_period: "5s"
retries: 3
restart: unless-stopped
networks:
- frontend
- backend
livekit:
image: livekit/livekit-server:latest
entrypoint: /bin/sh
command: -c './init_script.sh && ./livekit-server --config /etc/livekit.yaml --bind 0.0.0.0'
restart: unless-stopped
# network_mode: "host"
volumes:
- ./livekit.mydomain.com/livekit.yaml:/etc/livekit.yaml
- ./livekit.mydomain.com/init_script.sh:/init_script.sh
- ./livekit.mydomain.com/livekit:/var/log/nginx/livekit
- ./livekit.mydomain.com/livekit-turn:/var/log/nginx/livekit-turn
ports:
- 7880:7880
- 7881:7881
- 7882:7882
depends_on:
swag:
condition: service_healthy
redis:
condition: service_healthy
networks:
- backend
redis:
image: redis:6-alpine
command: redis-server /etc/redis.conf
# network_mode: "host"
depends_on:
swag:
condition: service_healthy
ports:
- 6379:6379
volumes:
- ./livekit.mydomain.com/redis.conf:/etc/redis.conf
restart: unless-stopped
healthcheck:
test: [ "CMD", "redis-cli", "--raw", "incr", "ping" ]
networks:
- backend
networks:
frontend:
backend:
Thank you for posting it. I was just revisiting this yesterday and was getting a bit overwhelmed and distracted by all the flashy bits. I do want to put together a cookbook for things like this and this will be a good first step.
🚀 Feature Proposal
A clearcut way how to achieve running this docker container alongside this livekitav docker: https://github.com/livekit/livekit
Motivation
Livekit is the only AV module for foundry which works reliably and is also provided in a docker container, so getting this working together out of the box, would be perfect solution for most foundryvtt setups.
Example
https://github.com/bekriebel/fvtt-module-avclient-livekit this is the module for foundry which incoperates livekitav
Pitch
If I cant get foundry docker to run alongside the livekit docker, there is no use for me of foundry in docker. Because I could run foundry wthout the container. Also if you use foundry you probably are going to need some form of AV to communicate with our playinggroup. Jitsi has terrible performance and using Discord alongside for communication is very clunky. The livekit module makes it really smooth and useful.