Бросай непризнанный - рабочие рушатся
Либретранслятор CLI не принимает — рабочие, только оружейник Процесс внутри него есть. Пройдя его, стручка провалилась. Загрузка и CrashLoopBackOff (1384 переза...
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...
Настройте STUN, чтобы ICE браузера мог выполняться двунаправленно
Двусторонние вызовы браузер-браузер, подключенные на уровне SIP, но не имеющие аудио в любом направлении. Работала голосовая почта (one-way Asterisk → браузер) ...
Хостинг браузера SIP WSS на internal.kamocrm.com (реальный сертификат)
Браузеры отказались от подключения к WebSocket **************** с близким кодом 1006, потому что Traefik обслуживал свою самоподписанную сертификацию по умолчан...
WebRTC выживет после перезапуска
Предыдущий подход (http custom.conf с [общим] override) не На самом деле вступает в силу, потому что INI-парсер Asterisk не чтит множественные [Общие] разделы в...
Включить встроенный HTTP-сервер Asterisk на :8089 для WebRTC /ws
Транспортный маршрут Chan pjsip 'protocol=ws' поверх res http websocket Что, в свою очередь, требует запуска встроенного HTTP-сервера Asterisk. The FreePBX 17 п...
Экспозиция порта 8088 непосредственно в сервисе ClusterIP
Сервис имел только порт 80→8088 отображения. Внутренние службы используют **************************** (например, токен VOIPService API) Запросы были отсрочены,...
Добавить недостающий отказ2ban-config ConfigMap для k1m1
Ссылки на развертывание fail2ban-config ConfigMap (jail.local +) asterisk-security.conf) но его не существовало, заблокировав подставку на МаунтВолуме. Настройк...
Разрешить префикс /domain/ path на тему IngressRoute для CORS
Конфигурация темы на theme.kamocrm.com/domain/... не соответствовала Существующие правила маршрута (разрешены только /публичные / и /внутренние /) Вернулся 503 ...
Заменить Coqui TTS на Piper TTS (en US-norman-medium)
Модель Coqui VCTK не имеет названных динамиков — замените Piper TTS, который имеет динамики. Точный нормальный [средний] голос. Пипер двоичный (~3 МБ) и модель ...
Добавить local net для сплит-DNS/LAN клиента RTP
Телефоны в той же локальной сети, что и k1m1, подключаются через разделенный DNS (домен решается на 192.168.4.22 Внутренне. Без локальной сети Asterisk по-прежн...
Настойчивый контакт с магией = исправление памяти и блокировка SIP-сканера в startup.sh
Введите [res pjsip] contact=memory в sorcery.conf перед началом Asterisk; бэкэнд по умолчанию sorcery-astdb SQLite бесшумно отбрасывает все контакты REGISTER - ...
Переместить hostPath из MinIO (клон FUSE) в локальный /var/lib/pbx
MinIO через клон FUSE не поддерживает POSIX chmod или symlink() Требуется модульной системой FreePBX. Изменились все FreePBX и MariaDB Объемы hostPath от /mnt/s...
Wrap fwconsole/amportal via php for MinIO FUSE hostPath
/var/lib/asterisk поддерживается MinIO через клон FUSE. POSIX chmod, поэтому скрипты fwconsole не могут быть выполнены на этом томе. Startup.sh создает оберточн...
Добавить preStop hook и terminationGracePeriodSeconds
Контейнеры застряли в терминации из-за фона Asterisk Процессы продолжали работать после выхода apache2ctl (PID 1). Престоп-хук посылает SIGTERM до Asterisk, пре...
Добавить bootstrap.php требуется регенерировать /etc/freepbx.conf
Установщик пишет freepbx.conf с datasource='' и require once для bootstrap.php, от которого зависит загрузка класса FreePBX. Наша регенерированная версия отсутс...
Регенерировать /etc/freepbx.conf для перезапуска
/etc является эфемерным (не хост-Пат), поэтому /etc/freepbx.conf написан Установщик теряется при каждом перезапуске. Добавлена ветвь для регенерации это от env ...
Bypass start asterisk, дождитесь розетки управления
start asterisk использует «pidof asterisk», который возвращает ложный положительный результат на под Перезапускается, в результате чего петля ожидания звездочки...
Запустите Asterisk в фоновом режиме, подождите его, затем запустите установщик
Начальная точка.sh не запускает установщик FreePBX — он только запускается. услуг. Startup.sh теперь повторяет этапы настройки точки входа и запускает Asterisk ...
Пусть точка входа обрабатывает установку, а не start.sh
Установщик FreePBX (php install -n) требует наличия Asterisk. бегать. Наш стартап.sh называл его до того, как началась Asterisk. "Ошибка в общении со звездочкой...
Маунт /etc/asterisk, а не /etc для исправления ошибки simplexml
Установка полного /etc в качестве тома hostPath портит расширение PHP Загрузка даже после посева из изображения — simplexml load file не определен во время уста...
Уменьшите пределы процессора до соотношения 2:1, чтобы устранить чрезмерную приверженность
Док 4→1 ядро, джибри 4→2 ядра, либретранслировать 2→1 ядро, ядро бергамота 2→1, ядро поворота 1→0,5. Сохраняет ~7,5 ядер от пределов узлов.
Переход на escomputers/freepbx:17 с правильной архитектурой
у уставшего / freepbx нет изображения FreePBX 17 (заброшен с 2022 года). escomputers/freepbx:17 (обновленный Apr 2026, Asterisk 21 + FreePBX 17) отдельный модул...
Tls Имя импорта, путь экспорта fqdn; почтовый маршрут использует TLSStore по умолчанию
Один сертификат / секрет на FQDN, поэтому лист CN соответствует 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 to 0, update image to mozilla/translation-service
The Google Cloud Storage model download bucket (bergamot-models-sandbox) returns 404 for all files and the firefox-translations-models repo was archived Dec 202...
Шкала бергамота вернулась к 1 реплике — сбои в переводе, вызванные отсутствием капсулы
Bergamot был на 0 копий с его сервисом, все еще зарегистрированным. Поставщик маршрутов В TranslateService не было выключателя, поэтому каждый запрос на es/fr/d...
Удалить ограничение только для загрузки из LibreTranslate
Все необходимые языковые пакеты предварительно установлены на томе hostPath. Только загрузка мешала некоторым упаковкам загружаться. Без флага, LibreTranslate з...
Используйте StartupProbe для LibreTranslate для обработки загрузок длинных моделей
стартапProbe с 60 попытками x 30 = 30 мин окно для запуска Начальная загрузка модели. После завершения запуска нормальная жизнь И зонды готовности берут верх бе...
Ограничьте LibreTranslate только для загрузки поддерживаемых языковых моделей
Используйте -load-only с 22 поддерживаемыми языковыми кодами Загрузка всех доступных моделей (~сотни ГБ). удалять Флаг обновленных моделей, который будет загруж...
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.
Как вы видите судоходство?
Каждое из этих обновлений автоматически попадает в ваше рабочее пространство. Начните бесплатно и смотрите, как он растет неделю за неделей.