11 Commits

Author SHA1 Message Date
19306a1f43 Merge pull request 'chore: upgrade to 0.4.1+v1.19.0' (#15) from upgrade-0.4.1+v1.19.0 into main
Reviewed-on: https://git.coopcloud.tech/coop-cloud/lasuite-meet/pulls/15
2026-06-15 18:41:33 +00:00
05cdafb5bb chore: upgrade to 0.4.1+v1.19.0
All checks were successful
cc-ci/testme cc-ci: success
2026-06-10 00:15:40 +01:00
4cab49caec Merge pull request 'chore: upgrade to 0.4.0+v1.19.0' (#12) from upgrade-0.4.0+v1.19.0 into main
Reviewed-on: https://git.coopcloud.tech/coop-cloud/lasuite-meet/pulls/12
2026-06-09 01:40:10 +00:00
e8776e967a chore: upgrade to 0.4.0+v1.19.0
All checks were successful
cc-ci/testme cc-ci: success
2026-06-09 01:32:30 +00:00
f3b81c5592 Merge pull request 'chore: Configure Renovate' (#1) from renovate/configure into main
Reviewed-on: https://git.coopcloud.tech/coop-cloud/lasuite-meet/pulls/1
2026-06-02 19:07:51 +00:00
b08dcf564c Merge pull request 'TURN fixes' (#6) from ineiti/lasuite-meet:fix_turn into main
Reviewed-on: https://git.coopcloud.tech/coop-cloud/lasuite-meet/pulls/6
2026-06-02 19:07:18 +00:00
c3b9909b51 Fix table 2026-05-29 11:14:54 +02:00
c7f56bf13a Mention chrome on mobile 2026-05-29 10:49:27 +02:00
802a96e849 docs: document host UDP buffer sysctl tuning
LiveKit's startup warning about UDP receive buffer being too small
(default 212992 bytes vs suggested 5000000) is easy to overlook, but
under load — especially when many clients are forced through the TURN
relay — it causes dtls timeouts on publisher transports and asymmetric
black-tile / no-media symptoms. The fix has to be on the host because
net.core.rmem_max / wmem_max are read when LiveKit opens its UDP sockets
and can't be raised from inside the container.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-29 10:45:27 +02:00
caf772f76c fix: resolve TURN_DOMAIN default at .env layer
docker-compose does not recursively expand nested `${...}` in `:-`
defaults, so `TURN_DOMAIN=${TURN_DOMAIN:-${LIVEKIT_DOMAIN}}` leaked the
literal string `${LIVEKIT_DOMAIN}` into the container, breaking TURN
and WebRTC connectivity. Set the default in .env.sample where abra
shell-expands it before docker-compose sees it.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-29 09:22:45 +02:00
09299c508b Add renovate.json 2026-03-10 17:51:15 +00:00
4 changed files with 55 additions and 14 deletions

View File

@ -82,7 +82,9 @@ LIVEKIT_NODE_IP=
#LIVEKIT_TURN_ENABLED=false #LIVEKIT_TURN_ENABLED=false
## TURN domain — must resolve to this server's IP. ## TURN domain — must resolve to this server's IP.
## Defaults to LIVEKIT_DOMAIN, which works for TURN/UDP setups. ## Defaults to LIVEKIT_DOMAIN, which works for TURN/UDP setups.
#TURN_DOMAIN=turn.example.com ## NOTE: must be set here, not as a compose-level `:-` default —
## docker-compose does not recursively expand nested `${...}` references.
TURN_DOMAIN=${LIVEKIT_DOMAIN}
## TURN/UDP port (default: 443). Recommended because UDP 443 is rarely ## TURN/UDP port (default: 443). Recommended because UDP 443 is rarely
## blocked and doesn't conflict with Traefik's TCP 443. ## blocked and doesn't conflict with Traefik's TCP 443.
#TURN_UDP_PORT=443 #TURN_UDP_PORT=443

View File

@ -89,20 +89,53 @@ Then redeploy the app, and automated e-mail sending should work:
* **One instance per server.** LiveKit requires host-published ports (7881, 7882, 443, 30000-30009) which can only be bound once per host. * **One instance per server.** LiveKit requires host-published ports (7881, 7882, 443, 30000-30009) which can only be bound once per host.
* **Server must have a direct public IP.** LiveKit's built-in TURN server does not work on servers behind a NAT gateway due to hairpin NAT issues. Configuring hairpin NAT on the gateway may be possible but has not been successfully tested yet. * **Server must have a direct public IP.** LiveKit's built-in TURN server does not work on servers behind a NAT gateway due to hairpin NAT issues. Configuring hairpin NAT on the gateway may be possible but has not been successfully tested yet.
* **Mobile browser must be Chrome** - there are various open issues wrt Firefox and WebRTC, so on mobile you have
to use a chromium based browser, else the connections fail!
## Network ports ## Network ports
This recipe publishes ports directly on the host for WebRTC media transport. These carry raw RTP media packets and are not routed through Traefik. The WebSocket signaling endpoint (`wss://LIVEKIT_DOMAIN`) is routed through Traefik as normal. This recipe publishes ports directly on the host for WebRTC media transport. These carry raw RTP media packets and are not routed through Traefik. The WebSocket signaling endpoint (`wss://LIVEKIT_DOMAIN`) is routed through Traefik as normal.
| Port | Protocol | Purpose | - **7881/TCP** — WebRTC ICE over TCP (fallback when UDP is blocked)
|------|----------|---------| - **7882/UDP** — WebRTC ICE over UDP (primary media transport)
| 7881 | TCP | WebRTC ICE over TCP (fallback when UDP is blocked) | - **443/UDP** — TURN relay (enabled by default via `compose.turn.yml`)
| 7882 | UDP | WebRTC ICE over UDP (primary media transport) | - **30000-30009/UDP** — TURN relay allocation ports
| 443 | UDP | TURN relay (enabled by default via `compose.turn.yml`) |
| 30000-30009 | UDP | TURN relay allocation ports |
Your firewall must allow inbound traffic on these ports. Your firewall must allow inbound traffic on these ports.
### Host kernel tuning
LiveKit logs a warning at startup if the kernel's UDP socket buffers are too small:
```
WARN livekit rtcconfig/rtc_unix.go:31 UDP receive buffer is too small for a production set-up {"current": 425984, "suggested": 5000000}
```
The Linux default (`net.core.rmem_max = 212992`) is well under what LiveKit needs once
several participants are forced through the TURN relay path. The resulting packet
loss shows up as `dtls timeout: read/write timeout: context deadline exceeded` on
publisher transports, intermittent media stalls, or one peer seeing a black tile
while the other sees video.
These sysctls are read by LiveKit when it opens its UDP sockets, so they must be
set on the **host** (not in the container) before the LiveKit container starts.
On the host, create `/etc/sysctl.d/99-livekit.conf`:
```
net.core.rmem_max = 7500000
net.core.wmem_max = 7500000
```
Then apply and restart the service:
```
sudo sysctl --system
docker service update --force <stack>_livekit
```
The warning should be gone from the LiveKit boot log.
### TURN server ### TURN server
TURN is enabled by default and helps users behind CGNAT/symmetric NAT connect to video calls. To disable it, remove `compose.turn.yml` from `COMPOSE_FILE` in your app config and set `LIVEKIT_TURN_ENABLED=false`. TURN is enabled by default and helps users behind CGNAT/symmetric NAT connect to video calls. To disable it, remove `compose.turn.yml` from `COMPOSE_FILE` in your app config and set `LIVEKIT_TURN_ENABLED=false`.

View File

@ -64,14 +64,14 @@ x-postgres-env: &postgres-env
services: services:
app: app:
image: lasuite/meet-frontend:v1.16.0 image: lasuite/meet-frontend:v1.19.0
networks: networks:
- backend - backend
deploy: deploy:
labels: labels:
- "traefik.enable=false" - "traefik.enable=false"
- "coop-cloud.${STACK_NAME}.timeout=${TIMEOUT:-120}" - "coop-cloud.${STACK_NAME}.timeout=${TIMEOUT:-120}"
- "coop-cloud.${STACK_NAME}.version=0.3.0+v1.16.0" - "coop-cloud.${STACK_NAME}.version=0.4.1+v1.19.0"
user: "${DOCKER_USER:-1000}" user: "${DOCKER_USER:-1000}"
entrypoint: entrypoint:
- /docker-entrypoint.sh - /docker-entrypoint.sh
@ -87,7 +87,7 @@ services:
start_period: 10s start_period: 10s
backend: backend:
image: lasuite/meet-backend:v1.16.0 image: lasuite/meet-backend:v1.19.0
networks: networks:
- backend - backend
environment: environment:
@ -119,7 +119,7 @@ services:
- email_pass - email_pass
celery: celery:
image: lasuite/meet-backend:v1.16.0 image: lasuite/meet-backend:v1.19.0
networks: networks:
- backend - backend
healthcheck: healthcheck:
@ -173,7 +173,7 @@ services:
- postgres_p - postgres_p
redis: redis:
image: redis:8.6.3 image: redis:8.8.0
healthcheck: healthcheck:
test: ["CMD", "redis-cli", "ping"] test: ["CMD", "redis-cli", "ping"]
interval: 15s interval: 15s
@ -183,7 +183,7 @@ services:
- backend - backend
livekit: livekit:
image: livekit/livekit-server:v1.12.0 image: livekit/livekit-server:v1.13.1
command: --config /livekit-server.yaml command: --config /livekit-server.yaml
environment: environment:
- STACK_NAME - STACK_NAME
@ -191,7 +191,7 @@ services:
- LIVEKIT_NODE_IP - LIVEKIT_NODE_IP
- LIVEKIT_FORCE_TCP=${LIVEKIT_FORCE_TCP:-false} - LIVEKIT_FORCE_TCP=${LIVEKIT_FORCE_TCP:-false}
- LIVEKIT_TURN_ENABLED=${LIVEKIT_TURN_ENABLED:-true} - LIVEKIT_TURN_ENABLED=${LIVEKIT_TURN_ENABLED:-true}
- TURN_DOMAIN=${TURN_DOMAIN:-${LIVEKIT_DOMAIN}} - TURN_DOMAIN=${TURN_DOMAIN}
- TURN_UDP_PORT=${TURN_UDP_PORT:-443} - TURN_UDP_PORT=${TURN_UDP_PORT:-443}
# WebRTC ICE ports must be published directly on the host. # WebRTC ICE ports must be published directly on the host.
# These carry raw RTP media, not HTTP — cannot be proxied through Traefik without extra traefik compose. # These carry raw RTP media, not HTTP — cannot be proxied through Traefik without extra traefik compose.

6
renovate.json Normal file
View File

@ -0,0 +1,6 @@
{
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
"extends": [
"config:recommended"
]
}