Split port ranges to avoid conflicts
- Coturn relay: 52000-65535 (13,536 ports) - Avoids: Janus RTP (10000-49151) and WireGuard (51820-51821) - No overlap between services
Adjust relay port range to avoid WireGuard/VPN ports
- Changed max-port from 65535 to 51800 to avoid conflicts - Avoids WireGuard on UDP 51820 and other VPN services on 51821 - Provides 2,649 ports (49152-51800) f...
Resolve CrashLoopBackOff by fixing probes and config
- Replace netstat-based health probes with TCP socket checks (netstat not available in coturn/coturn:latest Alpine image) - Remove conflicting no-stdout-log dir...
Use full Kubernetes CRD provider name for ServersTransport reference
Traefik requires the @kubernetescrd suffix when referencing CRD resources like ServersTransport.
Simplify MediaService WebSocket IngressRoute configuration
Remove media-websocket-upgrade middleware that was forcing headers and causing WebSocket handshake issues. Traefik automatically handles WebSocket upgrade when ...
Skip WebSocket transport in SockJS to avoid HTTP/2 issues
- Use xhr-streaming and xhr-polling transports instead of websocket - These transports work with both HTTP/1.1 and HTTP/2 without requiring WebSocket upgrades -...
Add end anchor to WebSocket path regex pattern
- Add $ to end of PathRegexp to ensure exact match - Fixes regex parsing error in Traefik - /ws/info is now working (200 OK) but WebSocket upgrade route needs p...
Only apply WebSocket upgrade middleware to actual WebSocket paths
- Change route match from PathPrefix(/ws/) to **************** - /ws/info is a regular HTTP request, not a WebSocket upgrade - Adding Upgrade header to /ws/info...
Add Connection: Upgrade header to WebSocket upgrade middleware
- Add Connection: Upgrade header along with Upgrade: websocket - Both headers are required for proper WebSocket upgrade handshake - This ensures HTTP/2 Extended...
Add separate route for WebSocket paths with upgrade middleware
- Create separate route matching /ws/** paths with media-websocket-upgrade middleware - This ensures Upgrade: websocket header is added for WebSocket upgrade re...
Use ServersTransport to disable HTTP/2 for WebSocket connections
- Create ServersTransport resource with disableHTTP2: true - Reference ServersTransport in IngressRoute service configuration - Remove invalid disableHTTP2 fiel...
Disable HTTP/2 for MediaService backend connection
- Add disableHTTP2: true to force HTTP/1.1 for backend connections - HTTP/2 Extended CONNECT is not properly converting Upgrade header - WebSocket upgrades requ...
Configure IngressRoute service scheme for WebSocket support
- Set scheme: http to ensure proper HTTP/1.1 handling for WebSocket upgrades - HTTP/2 Extended CONNECT needs proper conversion to HTTP/1.1 Upgrade header - This...
Remove invalid handshake handler and fix SockJS configuration
- Remove invalid DefaultHandshakeHandler override (method doesn't exist) - Remove invalid setSupressCors call (method doesn't exist) - Keep HttpSessionHandshake...
Add WebSocket handshake logging and SockJS configuration
- Add handshake handler and interceptor logging to diagnose WebSocket connection issues - Configure SockJS to suppress CORS (handled by Spring Security) and dis...
Configure SockJS transports to handle HTTP/2 WebSocket upgrade issues
- Explicitly configure SockJS transport order to prefer WebSocket, then fallback to xhr-streaming/xhr-polling - HTTP/2 WebSocket upgrades may fail, so SockJS wi...
Remove media-cors middleware from IngressRoute to allow WebSocket connections
- media-cors middleware was clearing CORS headers which interfered with WebSocket upgrades - WebSocket connections require direct pass-through without header mo...
Remove invalid Spring Security pattern /ws/**/info
- PatternParseException: No more pattern data allowed after {*...} or ** - /ws/** already covers all paths under /ws including /ws/info - This was causing 500 e...
Apply media-cors middleware to MediaService IngressRoute
- Apply media-cors middleware to allow CORS headers for WebSocket connections - Matches the pattern used for theme domains
Explicitly permit OPTIONS requests for CORS preflight
- Add explicit permit for OPTIONS method on all paths - Add explicit permit for /ws/info endpoint (SockJS handshake) - This ensures CORS preflight requests reac...
Make CORS configuration more permissive for WebSocket connections
- Explicitly handle '*' wildcard for origins, methods, and headers - Add WebSocket-related headers to exposed headers - Add logging to verify CORS configuration...
Add logging and configure SockJS heartbeat/disconnect settings
- Add logging to verify WebSocket endpoint registration - Configure SockJS heartbeat and disconnect delay - This should help diagnose why SockJS handshake isn't...
Revert IngressRoute changes - Traefik handles WebSocket automatically
Ensure messages route is recognized by Next.js
- Added logging to verify route is being hit - Route file exists and structure is correct for Next.js 15
Remove non-existent 'active' property from STOMP Client logging
- STOMP Client doesn't have an 'active' property - Only check 'connected' property which is the correct state indicator
Remove unsupported onWebSocketError handler from STOMP client
- onWebSocketError is not a valid property in ClientOptions - SockJS error handlers (onerror, onclose) already provide error handling
Add comprehensive WebSocket error handling and logging
- Added SockJS error handlers (onopen, onerror, onclose) to catch connection failures - Added connection timeout detection (10 seconds) to identify silent failu...
Remove duplicate WebSocket endpoint registration and improve logging
- Removed duplicate /ws endpoint registration (SockJS already handles native WebSocket) - Added null check for payload in subscribeToSession - This may fix WebS...
Remove invalid Spring Security path pattern /ws/**/websocket
- Spring Security does not allow path segments after /** pattern - /ws/** already matches all paths under /ws including websocket endpoints - This fixes Pattern...
Remove incorrect HTTPS agent workaround
- Reverted changes that bypassed certificate validation - Certificates are issued by auto-cert service (Let's Encrypt), not self-signed - Need to investigate wh...
Use HTTPS with agent that accepts self-signed certificates
- Reverted to always use HTTPS (not HTTP) - Added HTTPS agent with rejectUnauthorized: false for self-signed certs - This allows server-side Next.js routes to c...
Use Kubernetes service name for MediaService to avoid SSL cert issues
- Server-side Next.js routes now use **************** - This avoids self-signed certificate errors when connecting to https://media.kamocrm.com - Client-side re...
Remove old /api/security/media/ routes that were intercepting requests
- Old routes were forwarding to APIService which no longer has media endpoints - All media requests should go through /api/media/ routes directly to MediaServic...
Revert to actions/checkout@v4 to match other Next.js projects
- Remove complex manual checkout logic that was causing hangs - Use standard actions/checkout@v4 like kamo-login and kamo-register - Simplify Docker build conte...
Use shallow clone with timeout to prevent hanging
- Use --depth 1 for faster cloning - Add timeout (120s for shallow, 300s for full) - Fallback to full clone if shallow fails - Fetch specific commit if needed a...
Change to valid directory before git clone to avoid working directory error
- Change to /tmp or / before removing/cloning workspace - Only remove directory if it exists but is not a git repo - Prevents 'Unable to read current working di...
Use hardcoded repository URL and set GITHUB_WORKSPACE env var
- Use direct repository URL to avoid DNS/hostname resolution issues - Set GITHUB_WORKSPACE environment variable for subsequent steps - Use env var in Docker bui...
Use git clone directly instead of relying on empty workspace
- Clone repository using git directly with repository URL - Handle both fresh clone and existing repository cases - Use working-directory for Docker build actio...
Simplify all checkout steps - remove git operations that hang
- Remove git fetch/reset/clean from deploy jobs - Forgejo runner already has code checked out - Just verify GITHUB_WORKSPACE is valid
Simplify checkout step - remove git clone that was hanging
- Remove git clone logic that was causing 20+ minute hangs - Forgejo runner already has code checked out, just verify directory - Remove unnecessary git fetch/r...
Improve checkout and Docker build context handling
- Add proper repository cloning if not already checked out - Verify Dockerfile exists before building - Use absolute paths for Docker build context - Fix workin...
Replace actions/checkout with manual git checkout to avoid DNS issues
- Replace actions/checkout@v4 with manual git checkout commands - Forgejo runner already has code checked out, just need to ensure clean state - Fixes DNS looku...
Explicitly permit WebSocket endpoints in Spring Security
- Added explicit permitAll for /ws/** endpoints - WebSocket upgrade requests need explicit permission even in development mode - Fixes issue where WebSocket con...
Search for existing chat sessions by participant membership, not just session owner
- Changed findOrCreateChatSession to search MediaSessionMember records instead of MediaSession.member - Now searches sessions where creator is a participant (me...
Add detailed logging for message member ID retrieval
- Added logging to trace member ID for each message being returned - Logs member class name to detect proxy/stub issues - Logs distinct member IDs in response t...
Add JOIN FETCH to eagerly load member in message queries
- Added JOIN FETCH m.member to both findBySessionAndIsRemovedFalse queries - Ensures member entity is eagerly loaded to avoid lazy loading issues - Fixes issue ...
Automatically create NATS JetStream stream if it doesn't exist
- Added createStreamIfNotExists method to check and create the CHAT_MESSAGES stream - Stream is created with subjects from configuration (chat.>) - Fixes 'No ma...
Extract large IDs from raw JSON to prevent JavaScript precision loss
- Extract memberID, userID, orgID, and securityOrgId from raw JSON string before parsing - Prevents precision loss for IDs > Number.MAX_SAFE_INTEGER (9007199254...
Like what you see shipping?
All of it arrives in your workspace on its own. Start on the free plan and read this page again in a month.
