Fix Mattermost Calls, add Authelia to Asterisk web admin

Mattermost Calls:
- Add 8443/udp to compose ports for the Calls plugin RTC server (WebRTC
  direct path; coturn relay is only the fallback, not the sole path)
- Add 8443/udp to UFW rules and router port-forward table
- Warn that WebRTC requires HTTPS — calls silently fail over HTTP
- Prompt for Caddy domain and update MATTERMOST_SITE_URL in .env to match
  the HTTPS URL before Caddy is wired (previously SITEURL was written before
  the domain was known, leaving it as http://localhost:8065)
- Update README with RTC server address field and corrected port table

Asterisk web admin:
- No built-in auth: add Authelia SSO check matching CLAUDE.md pattern
- Set WEB_ADMIN_AUTH_DISABLED=true in .env when Authelia handles auth
  (prevents double-login prompts)

https://claude.ai/code/session_014CCYqVwW6d6f5dw1qRokYt
This commit is contained in:
Claude
2026-06-08 18:41:46 +00:00
parent dc1552f5d3
commit ab778868df
2 changed files with 85 additions and 21 deletions
+14 -2
View File
@@ -396,8 +396,20 @@ ENV
chown -R "$ACTUAL_USER:$ACTUAL_USER" "$EA_DIR"
# ── Caddy for web admin ───────────────────────────────────────────────────
configure_caddy_for_service "Asterisk Web Admin" "localhost:8080" "asterisk"
# ── Caddy for web admin (with optional Authelia SSO) ──────────────────────
# The web admin has no built-in auth; let Authelia gate it if available.
local EA_EXTRA_BLOCK=""
if [ -d "$DOCKER_DIR/authelia" ]; then
local _use_auth=""
prompt_yn "Protect Asterisk web admin with Authelia SSO? (y/n):" "y" _use_auth
if [[ "$_use_auth" =~ ^[Yy]$ ]]; then
EA_EXTRA_BLOCK=" import authelia"
# Tell Asterisk's web admin to skip its own auth — Authelia handles it
sed -i "s/^WEB_ADMIN_AUTH_DISABLED=.*/WEB_ADMIN_AUTH_DISABLED=true/" "$EA_DIR/.env"
log_info "WEB_ADMIN_AUTH_DISABLED=true set (Authelia will handle authentication)"
fi
fi
configure_caddy_for_service "Asterisk Web Admin" "localhost:8080" "asterisk" "$EA_EXTRA_BLOCK"
# ── README ────────────────────────────────────────────────────────────────
write_readme "$EA_DIR" << MD
+71 -19
View File
@@ -232,6 +232,7 @@ services:
condition: service_healthy
ports:
- "8065:8065"
- "8443:8443/udp" # Calls plugin RTC server (WebRTC direct path)
volumes:
- ./data:/mattermost/data
- ./logs:/mattermost/logs
@@ -312,16 +313,17 @@ ENV
echo ""
log_info "Firewall — Mattermost coturn uses port 3479 (avoiding conflict with Easy Asterisk on 3478)."
if command -v ufw >/dev/null 2>&1 && ufw status 2>/dev/null | grep -q "Status: active"; then
log_info "Opening UFW ports for Mattermost coturn..."
ufw allow 3479/udp comment "Mattermost coturn STUN/TURN"
ufw allow 3479/tcp comment "Mattermost coturn STUN/TURN TCP"
ufw allow 49153:49352/udp comment "Mattermost coturn relay"
log_info "Opening UFW ports for Mattermost..."
ufw allow 8443/udp comment "Mattermost Calls RTC server" >/dev/null
ufw allow 3479/udp comment "Mattermost coturn STUN/TURN" >/dev/null
ufw allow 3479/tcp comment "Mattermost coturn STUN/TURN" >/dev/null
ufw allow 49153:49352/udp comment "Mattermost coturn relay" >/dev/null
log_success "UFW rules added"
else
log_info "UFW not active — add these rules manually if needed:"
echo " ufw allow 3479/udp comment \"Mattermost coturn STUN/TURN\""
echo " ufw allow 3479/tcp comment \"Mattermost coturn STUN/TURN TCP\""
echo " ufw allow 49153:49352/udp comment \"Mattermost coturn relay\""
echo " ufw allow 8443/udp # Mattermost Calls RTC"
echo " ufw allow 3479/udp && ufw allow 3479/tcp # coturn STUN/TURN"
echo " ufw allow 49153:49352/udp # coturn relay"
fi
# ── Router port-forward instructions ──────────────────────────────────────
@@ -331,15 +333,62 @@ ENV
echo " ├──────────────────┬──────────┬──────────────────────────────────┤"
echo " │ Port(s) │ Protocol │ Service │"
echo " ├──────────────────┼──────────┼──────────────────────────────────┤"
echo " │ 8443 │ UDP │ Calls plugin RTC (direct WebRTC) │"
echo " │ 3479 │ UDP+TCP │ coturn STUN/TURN │"
echo " │ 4915349352 │ UDP │ coturn relay range │"
echo " └──────────────────┴──────────┴──────────────────────────────────┘"
echo ""
echo " ⚠ WebRTC (Calls) requires HTTPS. Calls will not work if Mattermost"
echo " is accessed over plain HTTP. Configure Caddy with a domain below."
echo ""
ensure_docker_dir_ownership "$DIR"
# ── Caddy reverse proxy ───────────────────────────────────────────────────
configure_caddy_for_service "Mattermost" "mattermost:8065" "chat"
# Mattermost's SITEURL must match the public URL for WebRTC (Calls) to work.
# If the user configures a Caddy domain here, update SITEURL in .env to match.
if [ -d "$DOCKER_DIR/caddy" ]; then
local _mm_domain=""
prompt_text "Caddy domain for Mattermost (e.g. chat.${SITE_DOMAIN:-example.com}) [skip]:" "" _mm_domain
if [[ -n "$_mm_domain" ]]; then
# Update SITEURL before wiring Caddy so the running container gets the right value
sed -i "s|^MATTERMOST_SITE_URL=.*|MATTERMOST_SITE_URL=https://$_mm_domain|" "$DIR/.env"
log_info "SITEURL updated → https://$_mm_domain (WebRTC requires HTTPS)"
# Write Caddyfile block directly (configure_caddy_for_service would prompt again)
local _caddyfile="$DOCKER_DIR/caddy/Caddyfile"
local _bk="$DOCKER_DIR/caddy/Caddyfile.backup.$(date +%Y%m%d-%H%M%S)"
[[ -f "$_caddyfile" ]] && cp "$_caddyfile" "$_bk" && log_info "Backed up Caddyfile"
if grep -q "^${_mm_domain}" "$_caddyfile" 2>/dev/null; then
log_warning "$_mm_domain already in Caddyfile — skipping block write"
else
cat >> "$_caddyfile" << MMCADDY
# Mattermost
$_mm_domain {
reverse_proxy mattermost:8065
header {
Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
X-Content-Type-Options "nosniff"
X-Frame-Options "SAMEORIGIN"
Referrer-Policy "strict-origin-when-cross-origin"
}
log {
output file /var/log/caddy/${_mm_domain}.log
format json
}
}
MMCADDY
docker exec caddy caddy fmt --overwrite /etc/caddy/Caddyfile 2>/dev/null || true
if docker exec caddy caddy reload --config /etc/caddy/Caddyfile 2>/dev/null; then
log_success "Mattermost accessible at: https://$_mm_domain"
else
log_warning "Caddy reload failed — check: docker logs caddy"
fi
fi
fi
fi
# ── README ────────────────────────────────────────────────────────────────
write_readme "$DIR" << MD
@@ -358,26 +407,29 @@ The first user to sign up becomes the System Admin.
## Calls plugin (voice/video)
The Mattermost Calls plugin provides voice/video channels.
**WebRTC requires HTTPS** — calls will not work over plain HTTP.
### Enable the plugin
1. Go to **System Console → Plugins → Plugin Management**
2. Enable the **Calls** plugin (pre-installed in Team Edition)
### Configure TURN server
### Configure ICE / TURN server
1. Go to **System Console → Plugins → Calls**
2. Set **TURN server URL**: \`turn:<your-server-ip>:3479\`
3. Set **TURN credentials type**: Static credentials (auth secret)
4. Set **TURN static auth secret**: (see TURN_SECRET in \`$DIR/.env\`)
5. Save and test a call
2. Set **RTC Server Address**: your server's public IP or domain
3. Set **TURN server URL**: \`turn:<your-server-or-ip>:3479\`
4. Set **TURN credentials type**: Static credentials (auth secret)
5. Set **TURN static auth secret**: (see \`TURN_SECRET\` in \`$DIR/.env\`)
6. Save and test a call in a channel
Clients outside your LAN need the TURN server to relay media. The coturn
container listens on port 3479 (UDP+TCP) with relay range 4915349352/UDP.
Direct WebRTC (port 8443/UDP) is tried first; coturn relay is the fallback
for clients behind strict NAT (cellular, hotel WiFi, Proton VPN, etc.).
## Router port-forwards (for external calls)
| Port(s) | Protocol | Service |
|--------------|----------|--------------------|
| 3479 | UDP+TCP | coturn STUN/TURN |
| 4915349352 | UDP | coturn relay range |
| Port(s) | Protocol | Service |
|--------------|-----------|---------------------------------|
| 8443 | UDP | Calls plugin RTC (direct path) |
| 3479 | UDP+TCP | coturn STUN/TURN |
| 4915349352 | UDP | coturn relay range |
## Manage
\`\`\`bash