Goccia non riconosciuta --lavoratori arg causa crashloop
Il libretranslate CLI non accetta --lavoratori, solo il gunicorn processo dentro di esso. Passandolo ha causato il pod a fallire argparse su boot e CrashLoopBac...
Probe timeout 10s and 2 gunicorn workers
LibreTranslate's /languages probe blocks on the gunicorn worker event loop. With a single worker translating a long chat message, the probe times out at the def...
Rewrite /etc/odbc.ini to point at $MARIADB_HOST on every boot
The escomputers/freepbx:17 image bakes /etc/odbc.ini with Server=db (the docker-compose link target). On this Kubernetes deployment MariaDB lives at \$MARIADB_H...
Configurare STUN in modo che il browser ICE possa completare bidirezionale
Due parti browser-a-browser chiamate connesse allo strato SIP ma non aveva audio o direzione. Voicemail (one-way Asterisk → browser) ha lavorato perché Asterisk...
Host browser SIP WSS su internal.kamocrm.com (vera cert)
I browser hanno rifiutato il collegamento di WebSocket a... con il codice vicino 1006 perché Traefik stava servendo il suo cert di default auto-firmato per quel...
Rendere WebRTC configurazione sopravvivere pod riavvio
L'approccio precedente (http custom.conf con [general] override) non è stato effettivamente prendere effetto perché il parser INI di Asterisk non onora più [gen...
Attivare il server HTTP integrato Asterisk su:8089 per WebRTC /ws
Un chan pjsip `protocol=ws` trasporta gite in cima a res http websocket, che a sua volta richiede che il server HTTP integrato di Asterisk sia in esecuzione. Th...
Esposizione porto 8088 direttamente sul servizio ClusterIP
Il servizio aveva solo il porto 80→8088 mappatura. Servizi interni Non e' vero. (ad es. token API VOIPService richieste) erano tempi out perché porto 8088 non a...
Aggiungi fail2ban-config ConfigMap mancante per k1m1
Riferimenti di distribuzione fail2ban-config ConfigMap (jail.local + asterisk-security.conf) ma non esisteva, bloccando la capsula MountVolume. Impostare e impe...
Consentire /domain/ percorso prefisso sul tema IngressRoute per CORS
Il tema config a tema.kamocrm.com/domain/... non è stato abbinato dal regole di rotta esistenti (solo /pubblico/ e /internal/ sono stati autorizzati), quindi Tr...
Sostituire Coqui TTS con Piper TTS (en US-norman-medium)
Il modello Coqui VCTK non ha altoparlanti di nome — sostituire con Piper TTS che ha l'esatta voce norman[medium]. Piper binario (~3 MB) e modello (~60 MB) vengo...
Aggiungi local net per split-DNS / LAN client RTP fix
I telefoni sulla stessa LAN di k1m1 collegano tramite DNS diviso (il dominio si risolve 192.168.4.22 internamente). Senza local net, Asterisk ancora pubblicizza...
Persist stregoneria contatto=memory fix e bloccare lo scanner SIP in startup.sh
- Inject [res pjsip] contact=memory in sorcery.conf prima che Asterisk inizi; il backup predefinito strery-astdb SQLite scende silenziosamente tutti i contatti ...
Spostare hostPath da MinIO (rclone FUSE) a locale /var/lib/pbx
MinIO via rclone FUSE non supporta POSIX chmod o symlink() — entrambi richiesto dal sistema modulo di FreePBX. Cambiato tutti FreePBX e MariaDB volumi hostPath ...
Wrap fwconsole/amportal tramite php per MinIO FUSE hostPath
/var/lib/asterisk è supportato da MinIO tramite rclone FUSE che non supporta POSIX chmod, quindi gli script fwconsole non possono essere eseguibili su quel volu...
Aggiungi PreStop gancio e terminazioneGracePeriodSeconds
I container si bloccavano a Terminating perché lo sfondo Asterisk processi continuati in esecuzione dopo l'uscita di apache2ctl (PID 1). PreStop hook invia SIGT...
Aggiungere bootstrap.php richiedono rigenerazione /etc/freepbx.conf
L'installatore scrive freepbx.conf con datasource=''' e un request once per bootstrap.php, che config.php dipende da caricare la classe FreePBX. La nostra versi...
Rigenerare /etc/freepbx.conf in riavvio
/etc è ephemeral (non un hostPath), quindi /etc/freepbx.conf scritto da installatore è perso su ogni pod riavvio. Aggiunto altro ramo per rigenerare esso da env...
Bypass start asterisk, attendere la presa di controllo
start asterisk utilizza `pidof asterisk` che restituisce un falso positivo sul pod riavvia, causando il ciclo di attesa-per-Asterisk per appendere. Ora startup....
Avviare Asterisk in background, attendere per esso, quindi eseguire installer
Il entrypoint.sh non esegue il programma di installazione FreePBX: inizia solo servizi. startup.sh ora replica i passaggi di impostazione del punto di entrata, ...
Lascia installare la maniglia entrypoint, non startup.sh
FreePBX installer (php install -n) richiede Asterisk di essere già Correre. La nostra startup.sh lo chiamava prima che Asterisk iniziasse, causando "Errore comu...
Mount /etc/asterisk only, not /etc, per correggere l'errore PHP simplexml
Montaggio completo /etc come un volume hostPath stava corrompendo l'estensione PHP caricamento anche dopo la semina dall'immagine — simplexml load file non defi...
Ridurre i limiti della CPU al rapporto 2:1 per eliminare il sovraimpegno
Docs 4→1 core, jibri 4→2 core, libretranslate 2→1 core, bergamotto 2→1 core, coturn 1→0.5 core. Risparmia ~7.5 core dai limiti del nodo.
Passare a escomputers/freepbx:17 con architettura corretta
stanchezza/freepbx non ha immagine FreePBX 17 (abbandonata dal 2022). escomputers/freepbx:17 (aggiornamento apr 2026, Asterisk 21 + FreePBX 17) richiede un pod ...
Tls importazione denominazione, esportazione fqdn percorso; mail route utilizza default TLSStore
Un certificato/segreto per FQDN così la foglia CN corrisponde a SNI (Safari)
Remove nonexistent postfix-lmdb package, install lmdb library instead
postfix-lmdb is not a valid Alpine package; lmdb support is built into the base postfix package. The pod was CrashLoopBackOff due to apk failure.
Fix Docs image registry, add Recreate strategy to coturn/postfix, increase qdrant memory
- Docs: fix wrong image registry (redis.kamo.svc... → **************** add Recreate strategy - coturn: add Recreate strategy to prevent rolling update port conf...
Switch Postfix sasl_passwd from hash to lmdb format
Alpine postfix build does not include hash support — postmap and smtp_sasl_password_maps were silently failing, deferring every outbound relay attempt through s...
Set Traefik externalTrafficPolicy=Local to preserve client IP
With the default "Cluster" policy, kube-proxy SNATs external traffic to the node IP before forwarding to Traefik. That caused Traefik to see the node IP as the ...
Clean up legacy analytics deployment on each CI run
Delete old analytics deployment, service, and ingressroute that conflict with the kamo-analytics deployment managed by its own CI/CD pipeline.
Strip X-Frame-Options header in iframe-compatible middleware
Set X-Frame-Options to empty string to remove the SAMEORIGIN value that was being inherited, allowing CSP frame-ancestors to control iframe embedding instead.
Reset document.title in rebrand() when React overwrites it
React re-applies RSC payload after hydration, resetting the title to "analytics". Add a title check inside the MutationObserver callback so it gets corrected ev...
Replace "analytics" text nodes with "Kamo Analytics" instead of clearing
Use TreeWalker to remove all "analytics" text nodes from rendered DOM
The workspace nav title "analytics" comes from JS bundles loaded after auth, rendered as a text node next to the logo SVG. Uses TreeWalker to find and clear all...
Add guarded MutationObserver for client-side rendered logo/text
Login page and dashboard content is rendered by Next.js JS bundles, not in the HTML body, so sub_filter can't reach it. Adds a script with a busy-flag-guarded M...
Redirect favicons at nginx level, fix RSC payload escaping
- Serve favicon via nginx 302 redirect instead of trying to rewrite HTML/RSC payload href strings (cleaner, always works) - Fix RSC title replacement with pro...
Use pure sub_filter replacements instead of MutationObserver
MutationObserver caused infinite loop (DOM change -> observer fires -> DOM change). Switch to direct nginx sub_filter string replacements targeting both static ...
Comprehensive analytics rebranding for login page and dashboard
- Replace title dynamically (handles "Login | analytics", "Dashboard | analytics" etc.) - Replace "analytics" h2 text on login page with Kamo logo image - Repla...
Use MutationObserver to rebrand analytics client-side rendered UI
analytics is a Next.js app that sets title/logo via JavaScript after initial HTML load. Replaces static sub_filter approach with injected script that uses Mutat...
Purge incomplete model directories in init container
The service crashes on startup if it finds a directory in /models that has missing or partial model files. Add a sweep at init start that removes any directory ...
Remove GitHub LFS downloads, use only data.statmt.org models
GitHub raw URLs return LFS pointer files, not actual binaries. Drop enru/enar downloads entirely — LibreTranslate handles those locales. Only download the 4 pai...
Scale bergamot a 0, aggiornare l'immagine a mozilla/translation-service
Il secchio di download del modello Google Cloud Storage (bergamot-models-sandbox) restituisce 404 per tutti i file e il firefox-traduzioni-models repo è stato a...
Scale bergamot torna a 1 replica — guasti di traduzione causati da pod mancante
Bergamot era a 0 repliche con il suo servizio ancora registrato. Il FornitoreRouter in TranslateService non ha avuto interruttore, quindi ogni richiesta di es/f...
Rimuovere --carico-solo restrizione da LibreTranslate
Tutti i pacchetti linguistici necessari sono preinstallati sul volume hostPath. --carica-solo stava impedendo alcuni pacchetti di carico. Senza la bandiera, Lib...
Utilizzare startupProbe per LibreTranslate per gestire download di modelli lunghi
startupProbe con 60 tentativi x 30s = 30min finestra di avvio per download del modello iniziale. Dopo l'avvio completa, la normalità e sonde di prontezza prendo...
Limitare LibreTranslate a caricare solo modelli di lingua supportati
Utilizzare --load-solo con i 22 codici di lingua supportati invece di scaricare tutti i modelli disponibili (~hundreds di GB). Rimuovi --update-models bandiera ...
Rimuovere la bandiera non valida --load-awesome-ai-models da LibreTranslate
La bandiera non esiste nell'immagine corrente libretranslate. Sostituire con --update-modelli per garantire che i pacchetti di lingua vengano scaricati all'avvi...
Come quello che vedi la spedizione?
Ognuno di questi aggiornamenti atterra automaticamente nello spazio di lavoro. Inizia gratis e guardalo crescere settimana dopo settimana.