Skip to content

ops: deploy the LiveKit SFU and TURN server to dev2 - #132

Merged
ralyodio merged 1 commit into
masterfrom
ops/sfu-turn-dev2
Oct 6, 2026
Merged

ralyodio merged 1 commit into
masterfrom
ops/sfu-turn-dev2

Conversation

@ralyodio

@ralyodio ralyodio commented Oct 6, 2026

Copy link
Copy Markdown
Contributor

What

sfu.pairux.com (LiveKit + egress) and turn.pairux.com (coturn) moved off their DigitalOcean droplets onto dev2 on 2026-10-06. This repoints their CI.

  • deploy-livekit.yml / deploy-turn.yml: copy apps/{livekit,turn}/dev2/docker-compose.yml to /home/anthony/www/{sfu,turn}.pairux.com/ with the existing DEV2_* secrets and run the box-side deploy.sh.
  • deploy.sh validates the compose file, swaps it in (previous kept as .prev), compose up -d (no-op when unchanged, so unrelated pushes don't drop calls), health-checks, rolls back on failure.
  • Secrets (livekit.yaml, egress.yaml, turnserver.conf) live only on the box in conf/.
  • sfu-diag.yml now inspects dev2.
  • Images pinned to the digests the droplets ran (livekit-server 1.13.7, egress, coturn 4.13.1).

Ports on dev2

LiveKit: 7881/tcp, 7882/udp, 61100-61300/udp, embedded TURN 3480/udp; signalling 7880 is local behind nginx. coturn: 3478 + 5349 tcp/udp, relay 61400-61500. coturn runs as uid 3478 and ufw confines its relays to dev2's own IP to LiveKit's ports; private ranges are denied-peer-ip.

Verified

External lk load-test (2 video + 2 audio publishers, 2 subscribers) 8/8 tracks 0% loss before the DNS flip and 4/4 after; TURN allocations over UDP/TCP with 0% loss, TLS on 5349 verifies; relay to 127.0.0.1 is 403, relay to dev2's Postgres port is rejected. Box deploy.sh dry-run as CI would: no-op, no restarts.

The droplet-era setup-*-server.sh / deploy-droplet.sh / fly.toml are left in place and no longer run by CI. Pre-commit hook bypassed (turbo OOM on this box); the change is YAML + shell only, checked with bash -n, a YAML parse and the live dry run.

🤖 Generated with Claude Code

sfu.pairux.com and turn.pairux.com moved off their DigitalOcean droplets
onto dev2 on 2026-10-06. deploy-livekit.yml and deploy-turn.yml now copy
apps/{livekit,turn}/dev2/docker-compose.yml to the box with the existing
DEV2_* secrets and run the box-side deploy.sh, which validates the file,
swaps it in, runs compose up -d (a no-op when nothing changed, so a push
does not drop live calls), health-checks and rolls back on failure.
Secrets stay on the box in conf/. sfu-diag.yml now inspects dev2.

Images are pinned to the digests the droplets were running
(livekit-server 1.13.7, egress, coturn 4.13.1).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@github-actions

github-actions Bot commented Oct 6, 2026

Copy link
Copy Markdown

ThreatCrush Security Scan

47 finding(s)

HIGH/CRITICAL: 4 | MEDIUM: 27 | LOW: 16

Severity Rule Location
HIGH sh-eval-expansion .githooks/pre-commit:33
HIGH js-electron-node-integration apps/desktop/src/main/window.ts:49
HIGH sh-unquoted-expansion-destructive apps/installer/scripts/install.sh:715
HIGH sh-unquoted-expansion-destructive apps/installer/scripts/install.sh:917
MEDIUM sh-remote-script-execution apps/installer/scripts/install.sh:691
MEDIUM sh-remote-script-execution apps/installer/scripts/install.sh:820
MEDIUM sh-remote-script-execution apps/installer/scripts/install.sh:822
MEDIUM sh-remote-script-execution apps/installer/scripts/install.sh:1078
MEDIUM sh-remote-script-execution apps/installer/scripts/install.sh:1080
MEDIUM sh-remote-script-execution apps/livekit/setup-livekit-server.sh:93
MEDIUM sh-remote-script-execution apps/turn/deploy-droplet.sh:62
MEDIUM js-unescaped-html-sink apps/web/src/app/blog/[slug]/page.tsx:48
MEDIUM js-unescaped-html-sink apps/web/src/app/blog/[slug]/page.tsx:73
MEDIUM js-unescaped-html-sink apps/web/src/app/c/[handle]/page.tsx:196
MEDIUM js-open-redirect apps/web/src/app/cli/authorize/consent.tsx:66
MEDIUM js-unescaped-html-sink apps/web/src/app/l/[joinCode]/page.tsx:129
MEDIUM js-unescaped-html-sink apps/web/src/app/l/[joinCode]/page.tsx:213
MEDIUM js-unescaped-html-sink apps/web/src/app/layout.tsx:141
MEDIUM js-unescaped-html-sink apps/web/src/app/live/page.tsx:145
MEDIUM js-unescaped-html-sink apps/web/src/app/page.tsx:123
MEDIUM js-unescaped-html-sink apps/web/src/app/pricing/page.tsx:286
MEDIUM js-open-redirect apps/web/src/app/pricing/UpgradeButton.tsx:50
MEDIUM js-unescaped-html-sink apps/web/src/app/u/[username]/page.tsx:282
MEDIUM js-open-redirect apps/web/src/hooks/useDesktopHandoff.ts:24
MEDIUM redos-nested-quantifier apps/web/src/lib/deliverable.ts:11
MEDIUM js-unescaped-html-sink apps/web/src/lib/player/player.ts:124
MEDIUM js-unescaped-html-sink apps/web/src/lib/player/player.ts:393
MEDIUM js-unescaped-html-sink apps/web/src/lib/player/player.ts:396
MEDIUM js-unescaped-html-sink apps/web/src/lib/player/player.ts:405
MEDIUM js-unescaped-html-sink apps/web/src/lib/player/player.ts:608
MEDIUM sql-template-interpolation packages/ai-core/src/prompts.ts:36
LOW secret-generic-credential apps/desktop/src/main/agent-cli/commands.test.ts:138
LOW secret-generic-credential apps/desktop/src/main/agent-cli/commands.test.ts:139
LOW secret-generic-credential apps/desktop/src/main/agent-cli/commands.test.ts:340
LOW secret-generic-credential apps/desktop/src/main/agent-cli/commands.test.ts:341
LOW secret-generic-credential apps/desktop/src/main/agent-cli/commands.test.ts:371
LOW secret-generic-credential apps/desktop/src/main/agent-cli/commands.test.ts:372
LOW secret-generic-credential apps/desktop/src/main/agent-cli/commands.test.ts:383
LOW secret-generic-credential apps/desktop/src/main/agent-cli/commands.test.ts:397
LOW secret-generic-credential apps/desktop/src/main/agent-cli/commands.test.ts:398
LOW secret-generic-credential apps/desktop/src/main/agent-cli/commands.test.ts:405
LOW secret-generic-credential apps/desktop/src/main/agent-cli/commands.test.ts:415
LOW secret-generic-credential apps/desktop/src/main/agent-cli/commands.test.ts:416
LOW secret-generic-credential apps/livekit/fly.toml:12
LOW secret-generic-credential apps/turn/fly.toml:11
LOW secret-generic-credential docs/API.md:747
LOW secret-generic-credential docs/API.md:753

Snippets are redacted; ThreatCrush never prints matched credential material.

@ralyodio
ralyodio merged commit 7f484b5 into master Oct 6, 2026
13 checks passed
@ralyodio
ralyodio deleted the ops/sfu-turn-dev2 branch October 6, 2026 02:22
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant