配置 STUN 以便浏览器 ICE 能够双向完成
在 SIP 层连接的双方浏览器呼叫,但没有 音频或方向。 语音信箱(单向Asterisk 浏览器)有效 因为Asterisk的对称-RTP倒置可以学习浏览器的 任何入境包的地址。 双方的桥梁需要双方的帮助 实际到达Asterisk的RTP,这意味着ICE必须聚合到一个 选择对 浏览器可以路由到 。 Asterisk有...
主机浏览器 SIP WSS on internal.kamocrm.com(真实证书)
浏览器拒绝与 QQ 的 WebSocket 连接 因为Traefik正在提供自签名的默认证书 用于主机名( 不包含在处理此程序的加密证书中 ) 其他 kamocrm.com 终点). 卷曲一直工作 只是因为我们测试 与-k. (中文(简体) ). 将浏览器的WSS端点移动到内部.kamocrm.com/voip-ws...
让 WebRTC 配置幸存 pock 重新启动
先前的方法(http custom.conf with [general] overtion)没有使用 因为Asterisk的 INI 解析器不尊重多个 横跨的[通 部分包括文件的含义: 启用=无 在 http custom.conf 中, http additional.conf 赢得了启用=是。 可靠的解决方案...
在 :8089 为 WebRTC /ws 启用 Asterisk 内置的 HTTP 服务器
搭乘在res http websocket上 这反过来又需要Asterisk的内置HTTP服务器运行. 这个 默认 FreePBX 17 安装有服务器被禁用的船只, 因此 SIP- over- WS 请求没有落地,特拉菲克返回了502个. 启用于 0.0: 8089 (Apache已经拥有了8088),并禁用Aster...
直接在集群IP服务上曝光端口 8088
服务只有港口80-8088绘图。 内部服务 **************** (例如VOIPService API 令牌) 由于第8088号端口没有收听器, (原始内容存档于2018-09-21). ClusterIP.
添加 k1m1 的失败2ban 配置
部署引用失败2ban- configMap(监狱.local +) 星号安全(start-security.conf),但并不存在,封锁了舱位. 华山. 设置并阻止 FreePBX 启动 .
允许 CORS 主题的域/ 路径前缀
在主题.kamocrm.com/domain/.的主题配置没有被匹配 已有的路由规则(只允许/public/和/内部/),因此Traefik 返回一个没有 CORS 头的 503, 导致浏览器拒绝获取 。 在 HTTP 和 HTTPs 入侵规则中添加路径前缀( “/ domain/ ” ) 应用了 Cors 中间软件,...
将 Coqui TTS 替换为 Piper TTS (en US- Norman- 中型)
Coqui VCTK 模型没有命名的扬声器——取而代之的是 Piper TTS ,它有 确切的诺曼的声音。 管道二进制 (~3 MB) 和模型 (~60 MB) 由init 容器在第一次运行时下载,并在 /var/lib/piper/{bin, models}在k1m1上。 AGI 脚本存储为 ConfigMap 密...
为分拆 DNS / 局域网客户端 RTP 修正添加本地 net
与 k1m1 相同的局域网电话通过分割 DNS 连接(域解析为 192.168.4.22 内部。 没有本地网,Asterisk仍发布广告 SDP中的外域到LAN客户端,通过公共IP进行RTP的路由. 当地网=192.168.4.0/24 制作 Asterisk 在 SDP 中使用本地绑定地址 网络上的客户端 所以音频从...
持久魔法接触=元件修补并屏蔽SIP扫描仪启动.sh
- 在Asterisk开始前将[res pjsip] contact=memory输入巫术.conf; 默认的巫术- astdb SQLite 后端静悄悄地放下所有的 REGISTER 联系人 - 屏蔽已知的SIP扫描仪
将主机Path 从 MinIO( rclone FUSE) 移动到本地 / var/ lib/ pbx
MinIO通过rclone FUSE不支持 POSIX chmod 或 symlink () ——两者 FreePBX的模块系统要求。 更改全部 FreePBX 和 MariaDB 从/mnt/shared-files/pbx/到/var/lib/pbx/的hostPath卷,每卷 节点本地磁盘. FreePBX 数据...
通过php为 MinIO FUSE 主机Path 包装 fwconole/ AMportal
/var/lib/asteric 由 MinIO 支持,通过rclone FUSE 不支持 POSIX chmod,因此fwconsole脚本不能在该卷上被执行. startup.sh 现在在 ephemeral /usr/ local/bin 中创建收尾脚本 直接引用php,再将同音链接/usr/sbin/fwcon...
添加预停钩并终止 GracePeriodseconds
集装箱因背景Asterisk被困在"终结"中 apache2ctl( PID 1) 退出后, 进程继续运行 。 预停钩子发送 在Kubernetes杀死容器之前将SIGTERM送往Asterisk,允许清洁 端口释放并阻止下个吊舱撞击端口使用错误 重新启动时.
添加 poostrap.php 需要重生 /etc/ freepbx.conf
安装者写出 freepbx.conf 有数据源=' 和 request once freepBX 类。 我们的再生成版本都缺失了——导致"Class FreePBX没有找到". 每次启动500个错误 .
重新启动时重生 /etc/freepbx.conf
/etc是平面(不是主机Path),所以/etc/freepbx.conf由The 每次启动时安装器都会丢失 。 添加了其它分支来再生 当靴子被困时,它已经存在,所以管理员UI可以 连接所有后续靴子上的 MariaDB .
绕行开始 ASTErisk, 等待控制套接字代替
启动 asterisk 使用“ pidof 星号 ” , 该星号在 pock 上返回一个假正数 重启,导致等待-Asterisk循环被挂起. 现在启动.sh开始 直接通过 safety asterisk (在清除 soldale socket/pid 文件后) 进行突触 并等待控制套接字文件出现,而不是依赖pidof...
在背景中启动 Asterisk, 等待它, 然后运行安装器
入口.sh 不运行 FreePBX 安装器—— 它只开始 服务。 startup.sh 现在复制入口设置步骤,开始 Asterisk 在背景中, 等待它的套接字准备好, 然后运行 php 安装如果它是第一个靴子,然后在前缘开始Apache. 这可以修复安装时“ 错误与 Asterisk 通讯” 崩溃 .
让入口处理安装,而不是启动.sh
FreePBX 安装器( php s安装 -n) 要求 Asterisk 已经是 运行中。 我们的启动者.sh在Asterisk开始前就打电话了,导致 "与Asterisk的不良通讯"相撞. 现在启动.sh只等待 MariaDB 和补丁 Apache 端口,然后执行图像输入点 首先启动Asterisk,然后在第一个启动...
仅挂载/etc/astrisk, 而非/etc, 以修正 PHP simplexml 错误
将 /etc 全文上载为主机Path 卷正在腐蚀 PHP 扩展 甚至在从图像种子后加载 – simplexml load file 未定义 安装时间。 现在只有/etc/asterisk存在;/etc来自 图像并保持 PHP 配置完整。 第一启动探测器从 /etc/freepbx.conf(ephemeral)至 ...
将CPU限制降低到 2: 1 比例以消除过度承诺
文件 4–1 核心, jibri 4–2 核心, 自由转换 2–1 核心, 贝加莫特2~1核,相接1~0.5核. 将~7.5核从节点限制中省出.
切换到 es 计算机/ freepbx: 17 并带有正确的架构
freepbx没有FreepBX 17图像(自2022年起被放弃). es计算机/freepbx:17(2026年4月更新,Asterisk 21 + FreePBX 17)要求 一个单独的 MariaDB 舱和一个一次性 php 安装步骤。 变化 : - 添加freepbx-mariadb StatefulSet(...
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...
在 nginx 级别重新定向外观, 修复 RSC 有效载荷出逃
- 通过nginx 302重定向服务favicon,而不是试图重写 HTML/RSC 有效载荷href字符串(清除器,总是工作) - 将RSC标题替换为文字的正则双逃道 在 nginx 配置中反斜向引用 - 增加代理缓冲器,以处理完整的应对机构
使用纯子过滤器替换而非突变观察员
突变观察员造成无限循环(DOM变化 -- -- > 观察者火灾 -- -- > (DOM更改). 切换到直接的 nginx 子 filter 字符串替换 瞄准静态 HTML 和 Next.js RSC 有效载荷字符串作为标题, 法维孔和标志 只有CSS注射器仍用于仪表板头.
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...
将 bergamot 缩放到 0, 将图像更新到 mozilla/ 翻译服务
谷歌云存储模式下载桶(bergamot-models-sandbox) 返回所有文件的 404, Firefox- translations-models 重出炉 存档于2025年12月, 没有所需的语言对 。 贝加莫特不能 开始直到找到工作模型来源。 关键更改 : - 复制品:0(与集群现实同步) - 图像:moz...
缩放 bergamot 返回到 1 个复制件—— 丢失的 pock 导致翻译失败
Bergamot在0号复制品,其服务仍在注册。 提供者鲁特 在TranslateService中,没有断路器,所以每个请求es/fr/de/pt/it/ pl/ru/uk/tr/ro/id/vi/ar用反复连接敲击已死亡的集群IP 尝试,将 CI 翻译步骤和背景翻译任务定出时间 。 节点有 97+ GB 免费,所以资源...
从 Libre Translate 中删除 -- 仅装入限制
所有需要的语言包都预先安装在主机Path卷上. -- load - only 阻止了一些包件装入 。 没有旗帜 LibreTranslate 启动时装入所有已安装的软件包.
Use startupProbe for LibreTranslate to handle long model downloads
startupProbe with 60 attempts x 30s = 30min startup window for initial model downloads. After startup completes, normal liveness and readiness probes take over ...
Restrict LibreTranslate to only load supported language models
Use --load-only with the 22 supported language codes instead of downloading all available models (~hundreds of GB). Removes --update-models flag which would dow...
Remove invalid --load-awesome-ai-models flag from LibreTranslate
Flag does not exist in current libretranslate image. Replace with --update-models to ensure language packs are downloaded on startup.
Add LibreTranslate permission init container, scale Bergamot to 0
LibreTranslate was crashing with PermissionError on packages subdir. Added busybox init container to mkdir + chmod 777 the mounted hostPath before the main cont...
JVB_ADVERTISE_IPS must be public IP, not Wireguard IP
Was 10.8.1.1 (Wireguard private) — guests' browsers can't reach this. Changed to 75.83.113.11 (public IP). This is why guests kept getting ICE restarts every ~1...