ブラウザソフトフォン用のWSS WebRTCトランスポートを追加
Asterisk の chan pjsip は 0.0.0.0:8089 で普通の WebSocket の輸送を結合しました ************************でTLSを終了 (ポート 443) そのため、kamo-internalは、既存のワイルドカードの上にブラウザのソフトフォンを登録することができま...
ClusterIPサービスで直接露出ポート8088
ポート 80→8088 マッピングのみをサービスにしました。 内部サービスの利用 メニュー (例:VOIPService APIトークン リクエスト) ポート8088がリスナーがなかったため、タイミングアウト クラスタIP.
K1m1 の ConfigMap の 行方不明の追加
デプロイメントの参照は2ban-config ConfigMap (jail.local + asterisk-security.conf は存在せず、Podをブロックする マウントボリューム。 FreePBXの起動と防止.
/domain/ パスプレフィックスを CORS のテーマ IngressRoute で許可する
Theme.kamocrm.com/domain/ で設定したテーマは、 既存のルートルール(/public///internal/のみ)で、Trefik CORSヘッダなしで503を返し、ブラウザがフェッチを拒否する。 HTTP と HTTPS IngressRoute ルールの両方に PathPrefix('/do...
生産はPJSIPの刑務所およびpersistentの状態と2ban失敗します
- [asterisk] と [freepbx-web] の jails で、fail2ban-configmap.yaml を追加します。 増分禁止エスカレーション(1h→24h→30d天井)、LAN無視、およびa PJSIP SecurityEvent レコードをターゲットとするカスタム asterisk-secu...
Coqui TTSをPiper TTS(en US-norman-medium)に置き換える
Coqui VCTKモデルには、スピーカーの名前が付けられていないため、Piper TTSに置き換えられます。 正確にノーマン[中] 声。 パイパーバイナリ(〜3 MB)とモデル(〜60 MB) 最初に実行してキャッシュされた init コンテナによってダウンロードされます。 /var/lib/piper/{bin,m...
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 ...
Add LAN DNS pod for split-DNS on k1m1
Deploys a dnsmasq pod with hostNetwork on k1m1 that listens on 192.168.4.22:53. Overrides pbx.k1.kluster.kamocrm.com -> 192.168.4.22 so LAN phones reach the PBX...
Split-DNS/LANクライアント RTP 修正用に local net を追加
K1m1と同じLAN上の電話は、分割されたDNSを介して接続します(ドメインが解決する) 192.168.4.22 内部で。 local net がなければ、Asterisk はまだ広告しています SDP の外部ドメインを LAN クライアントにルーティングし、パブリック IP 経由で RTP をルーティングします。 ...
Persist の sorcery contact=memory の苦境およびブロック SIP の走査器 の start.sh
- Asteriskが始まる前に、 [res pjsip] contact=memory を sorcery.conf に注入します。 デフォルト sorcery-astdb SQLite バックエンドは、すべての REGISTER コンタクトを静かにドロップします。 - 既知のSIPスキャナー87.246.54.22...
MinIO (rclone FUSE) からローカル /var/lib/pbx に移動する
Rclone FUSE による MinIO は POSIX chmod や symlink() をサポートしていません。 FreePBXのモジュールシステムが必要です。 すべてのFreePBXとMariaDBを変更 hostPath は /mnt/shared-files/pbx/ から /var/lib/pbx/ ま...
MinIO FUSE hostPath 用の PHP 経由で fwconsole/amportal をラップ
/var/lib/asterisk は、サポートしていない rclone FUSE 経由で MinIO がバックアップされます。 POSIX chmod なので fwconsole スクリプトは、そのボリュームで実行可能にすることはできません。 boot.sh は ephemeral /usr/local/bin で ...
プレストップホックと終了GracePeriodSecondsを追加
コンテナは、バックグラウンドAsteriskのために用語集に立ち往生していた apache2ctl (PID 1) が終了した後に実行されるプロセス。 preStopのホックは送ります Kubernetesが容器を殺す前にAsteriskにSIGTERMはきれいにすることを可能にします ポートのリリースと、次のPodが...
Boottrap.php を追加して /etc/freepbx.conf を再生成する必要があります
インストーラは、datasource='' と require once で freepbx.conf を記述します。 boottrap.php では、config.php は FreePBX のクラスを読み込みます。 「Class FreePBXが見つからなかった」という2つのバージョンがリリースされました。 すべて...
再起動時に /etc/freepbx.conf を再生する
/etc は ephemeral ( hostPath ではなく) なので /etc/freepbx.conf は インストーラは、すべてのPodの再起動で失われます。 再生するブランチを追加 boottrap.php が既に存在しているときに env vars から、admin UI は 続いているすべてのブーツでM...
Start asterisk をバイパスし、代わりに制御ソケットを待ちます
start asterisk は `pidof asterisk` を使って、 Pod で false 正を返します。 再起動すると、待ち合わせループが掛かるようになります。 スタートアップ.shが始まります Safe asterisk 経由で直接アスタリスク(階段ソケット/ピッドファイルをクリアした後) 制御ソケット...
バックグラウンドでAsteriskを起動し、それを待って、インストーラを実行します
Entrypoint.sh は FreePBX インストーラーを実行していません。 サービス。 boot.sh は、エントリーポイントのセットアップ手順を再現しました。 バックグラウンドでAsterisk、そのソケットが準備されるのを待ってから、実行します php は最初の起動時にインストールします。その後、Apach...
エントリーポイント ハンドル インストール, 起動しません.sh
FreePBX インストーラー (php install -n) は、Asterisk が必要です。 ランニング。 スタートアップ.sh は、Asterisk が起動する前に呼び出されました。 「Asteriskで通信するエラー」クラッシュ。 スタートアップ.sh は待ち合わせのみ MariaDB と Apache の...
/etc/asterisk を /etc だけマウントし、PHP の単純なxml エラーを修正
HostPath のボリュームとして /etc をマウントすると、PHP の拡張子が破損していた 画像から参照した後でも読み込み — easyxml load file undefined インストール時間 今だけ/etc/asteriskは主張されます;/etcはから来ます PHP の config の intact...
CPUの限界を2:1の比率に減らして下さい過コミットを除去して下さい
Docs 4→1 コア、ジブリ 4→2 コア、libretranslate 2→1 コア、 ベルガモット2→1コア、コターン1→0.5コア。 ノードの制限を離れた~7.5コアを保存します.
正しいアーキテクチャでescomputers/freepbx:17に切り替える
疲労/freepbx に FreePBX 17 イメージがありません(2022 年以来の放棄)。 escomputers/freepbx:17 (updated Apr 2026, Asterisk 21 + FreePBX 17) 必要 別の MariaDB pod と 1 回 php のインストール手順。 変更点...
パブリック管理者の進行をドロップします。 http://k[12]m1:8088 経由でアクセス
ポート8088(FreePBX's)にLAN/WireGuardを経由して、管理者UIが内部でのみ nginx はホストネットワークに直接バインドします。 いいえ Traefik ルート、Let's Encrypt なし PBX 自体のパブリックポート 80/443 転送は必要ありません.
FreePBX 17 + jigasi SIP ブリッジを k1m1 と k2m1 にデプロイする
FreePBX (tiredofit/freepbx:17-latest) は hostNetwork で実行されるため、SIP/RTP 実際のクライアント IP を保存し、nodeSelector 経由で 1 ノードをピン留めします。 SIPについて 5060 UDP/TCP (5061 TLS)、Janusを避ける...
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...
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...