Files
B2BCall-dialer/infrastructure/freeswitch/Dockerfile
Matheus 60e9f6838e feat: add Event Socket integration (b2bcall-fs-events)
- packages/telephony: TelephonyProvider interface (agente.md secao 25) and
  FreeSwitchTelephonyProvider implementation over the 'esl' library
  (actively maintained, TypeScript-native, built-in reconnect-with-backoff
  satisfying secao 195); normalizeEslEvent() translates raw ESL events into
  the internal vocabulary (secao 24)
- apps/freeswitch-events (b2bcall-fs-events): permanent ESL connection,
  resubscribes on every reconnect, publishes normalized events to the
  'b2bcall:events' Redis pub/sub channel; containerized (Dockerfile +
  docker-compose service) since its whole job is reaching the freeswitch
  container by internal hostname
- packages/shared: reusable createLogger() (structured JSON per secao 189),
  fixed a BigInt serialization crash surfaced by the esl library's error
  stats
- found and fixed a real FreeSWITCH 1.11 default: without an explicit
  apply-inbound-acl, mod_event_socket silently rejects any non-loopback
  connection ('Access Denied, go away.') even with the correct password —
  added a dedicated ACL (loopback + the Docker Compose network range, never
  0.0.0.0/0) in infrastructure/freeswitch/overrides/autoload_configs/
- verified end-to-end with a local loopback test call: CALL_CREATED ->
  CALL_ANSWERED -> CALL_ENDED observed on the Redis channel with the
  correct callUuid and hangup cause
- docs/EVENT_SOCKET.md
2026-08-28 06:47:28 -03:00

55 lines
2.6 KiB
Docker
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# syntax=docker/dockerfile:1.7
#
# Imagem própria/controlada do FreeSWITCH (agente.md secao 19), usando os
# pacotes pré-compilados do SignalWire em vez de compilar da fonte — build
# de C/C++ e´ pesado demais pra VM de laboratorio (1.9GB RAM).
FROM debian:trixie-slim
ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get update \
&& apt-get install -y --no-install-recommends ca-certificates gnupg curl \
&& rm -rf /var/lib/apt/lists/*
# FREESWITCH_PAT só existe durante este RUN (BuildKit secret, nunca vira
# camada da imagem) e o arquivo de credenciais do apt é apagado antes do fim
# do MESMO RUN — agente.md secao 11: "a credencial nao devera permanecer na
# imagem runtime".
RUN --mount=type=secret,id=freeswitch_pat,required=true \
set -eu; \
FS_PAT="$(cat /run/secrets/freeswitch_pat)"; \
curl -fsSL -u "signalwire:${FS_PAT}" \
https://freeswitch.signalwire.com/repo/deb/debian-release/signalwire-freeswitch-repo.gpg \
-o /usr/share/keyrings/signalwire-freeswitch-repo.gpg; \
install -d -m 700 /etc/apt/auth.conf.d; \
printf 'machine freeswitch.signalwire.com\nlogin signalwire\npassword %s\n' "${FS_PAT}" \
> /etc/apt/auth.conf.d/freeswitch.conf; \
chmod 600 /etc/apt/auth.conf.d/freeswitch.conf; \
echo "deb [signed-by=/usr/share/keyrings/signalwire-freeswitch-repo.gpg] https://freeswitch.signalwire.com/repo/deb/debian-release/ trixie main" \
> /etc/apt/sources.list.d/freeswitch.list; \
apt-get update; \
apt-get install -y --no-install-recommends \
freeswitch-meta-vanilla \
freeswitch-conf-vanilla \
freeswitch-mod-xml-curl \
freeswitch-mod-callcenter \
freeswitch-mod-avmd \
freeswitch-mod-curl; \
rm -f /etc/apt/auth.conf.d/freeswitch.conf /etc/apt/sources.list.d/freeswitch.list; \
rm -rf /var/lib/apt/lists/*
# Overrides mínimos por cima da config vanilla (agente.md secao 15: "carregar
# somente o necessário"). Directory/dialplan/sip_profiles ficam na config
# vanilla padrão por enquanto — serão substituídos por mod_xml_curl na fase
# "Extensions/Trunks/Dialplan" (ver docs/FREESWITCH.md).
COPY overrides/autoload_configs/modules.conf.xml /etc/freeswitch/autoload_configs/modules.conf.xml
COPY overrides/autoload_configs/event_socket.conf.xml /etc/freeswitch/autoload_configs/event_socket.conf.xml
COPY overrides/autoload_configs/acl.conf.xml /etc/freeswitch/autoload_configs/acl.conf.xml
COPY entrypoint.sh /usr/local/bin/entrypoint.sh
RUN chmod +x /usr/local/bin/entrypoint.sh
EXPOSE 8021
ENTRYPOINT ["/usr/local/bin/entrypoint.sh"]
CMD ["/usr/bin/freeswitch", "-nonat"]