在 :8089 为 WebRTC /ws 启用 Asterisk 内置的 HTTP 服务器
搭乘在res http websocket上 这反过来又需要Asterisk的内置HTTP服务器运行. 这个 默认 FreePBX 17 安装有服务器被禁用的船只, 因此 SIP- over- WS 请求没有落地,特拉菲克返回了502个. 启用于 0.0: 8089 (Apache已经拥有了8088),并禁用Aster...
为浏览器软手机添加 WSS WebRTC 传输
Asterisk 的 chan pjsip 现在在 0.0:8089 上绑定一个普通的 WebSocket 运输 和特拉菲克终止 TLS at QQ(第443端口) 因此, Kamo- 内部可以在已有通配符上注册浏览器软手机 不管理舱内证书的 cert. - 配置map- k1m1. yaml: startup.sh...
直接在集群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 中间软件,...
与PJSIP监狱和持续状态的禁产2
- 增加dauf2ban-configmap.yaml 与[asterisk]和[frepbx-web]监狱, 递增禁令升级(1h-24h-30d上限)、局域网忽略和a 用于 PJSIP 安全Event 记录的自定义星号安全.conf 过滤器 - Mount dauf2ban-configMap和主机Path/var/...
将 Coqui TTS 替换为 Piper TTS (en US- Norman- 中型)
Coqui VCTK 模型没有命名的扬声器——取而代之的是 Piper TTS ,它有 确切的诺曼的声音。 管道二进制 (~3 MB) 和模型 (~60 MB) 由init 容器在第一次运行时下载,并在 /var/lib/piper/{bin, models}在k1m1上。 AGI 脚本存储为 ConfigMap 密...
Integrate Coqui TTS with norman voice (VCTK p267)
- Deploy coqui-tts server (VCTK VITS model, CPU-only) as ClusterIP service on port 5002 with model cache at /var/lib/coqui-tts on k1m1 - Inject coqui_tts.agi ...
在 k1m1 上为分拆 DNS 添加 LAN DNS 显示器
在 k1m1 上部署带有主机的 dnsmasq 显示器 192.168.4.22:53. overrides pbx.k1.kluster.kamocrm.com - > 192.168.4.22 (中文(简体) ). 因此局域网的电话直接到达PBX,没有NAT发夹. 所有其他 询问转至8.8.8.8/8.8.4。 ...
为分拆 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(...
放弃公共管理;通过http://k[12]m1:8088访问
8088号港口的局域网/WireGuard(FreePBX)现在只有内部管理。 nginx 直接绑在主机Network上). 没有Traefik路线, 没有让我们加密 cert,没有PBX本身需要的公用端口80/443转发.
在 k1m1 和 k2m1 上部署 FreePBX 17 + Jigasi SIP桥
FreePBX(已退休/freepbx:17-latest)使用主机Network运行,所以SIP/RTP 保存真实的客户端IP,通过节点Selector被绑定为一号节点. SIP 打开 5060 UDP/TCP (5061 TLS), RTP 范围 18000-18999 为避开Janus所选 (20000年-209...
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.
Add weekly image prune and journal vacuum CronJob for k1m1
CronJob runs every Sunday 3am, privileged, pinned to k1m1. - crictl rmi --prune removes unused container images - nsenter journal vacuum enforces 500MB cap - CI...
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 ...
Add geo-database-url to analytics-secret for CockroachDB geolite lookup
Kamo Analytics uses this URL to look up visitor IP→country/region/city from the **************** tables. Uses kamo user with password auth and sslmode=require (...
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.
Add iframe-compatible middleware chain for kamo-analytics
Add security-headers-allow-iframe (no X-Frame-Options) and kamo-middlewares-allow-iframe chain so analytics can be embedded in iframes from internal.kamocrm.com...
Move kamo-analytics to own repo, keep only postgres in KlusterServices
- Remove analytics deployment, service, and nginx-configmap (now owned by kamo-analytics project with its own CI/CD pipeline) - Remove analytics-ingressroute ...
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...