compose.yaml•6.33 kB
services:
dashboard:
image: fonoster/dashboard:0.15.15
restart: unless-stopped
expose:
- 3030:3030
environment:
- SERVER_DASHBOARD_SESSION_SECRET
apiserver:
image: fonoster/apiserver:0.15.15
restart: unless-stopped
environment:
- APISERVER_APP_URL
- APISERVER_ASTERISK_ARI_PROXY_URL
- APISERVER_ASTERISK_ARI_SECRET
- APISERVER_ASTERISK_ARI_USERNAME
- APISERVER_AUTHZ_SERVICE_ENABLED
- APISERVER_AUTHZ_SERVICE_HOST
- APISERVER_AUTHZ_SERVICE_METHODS
- APISERVER_AUTHZ_SERVICE_PORT
- APISERVER_CLOAK_ENCRYPTION_KEY
- APISERVER_DATABASE_URL
- APISERVER_IDENTITY_DATABASE_URL
- APISERVER_IDENTITY_ISSUER
- APISERVER_IDENTITY_CONTACT_VERIFICATION_REQUIRED
- APISERVER_IDENTITY_TWO_FACTOR_AUTHENTICATION_REQUIRED
- APISERVER_IDENTITY_WORKSPACE_INVITE_EXPIRATION
- APISERVER_IDENTITY_WORKSPACE_INVITE_FAIL_URL
- APISERVER_IDENTITY_WORKSPACE_INVITE_URL
- APISERVER_IDENTITY_OAUTH2_GITHUB_CLIENT_ID
- APISERVER_IDENTITY_OAUTH2_GITHUB_CLIENT_SECRET
- APISERVER_IDENTITY_OAUTH2_GITHUB_ENABLED
- APISERVER_INFLUXDB_INIT_ORG
- APISERVER_INFLUXDB_INIT_PASSWORD
- APISERVER_INFLUXDB_INIT_TOKEN
- APISERVER_INFLUXDB_INIT_USERNAME
- APISERVER_INFLUXDB_URL
- APISERVER_LOGS_FORMAT
- APISERVER_LOGS_LEVEL
- APISERVER_LOGS_TRANSPORT
- APISERVER_NATS_URL
- APISERVER_OWNER_EMAIL
- APISERVER_OWNER_NAME
- APISERVER_OWNER_PASSWORD
- APISERVER_ROOT_DOMAIN
- APISERVER_SMTP_AUTH_PASS
- APISERVER_SMTP_AUTH_USER
- APISERVER_SMTP_HOST
- APISERVER_SMTP_PORT
- APISERVER_SMTP_SECURE
- APISERVER_SMTP_SENDER
- APISERVER_SIGNALING_SERVER
- APISERVER_TWILIO_ACCOUNT_SID
- APISERVER_TWILIO_AUTH_TOKEN
- APISERVER_TWILIO_PHONE_NUMBER
expose:
- 50051:50051
volumes:
- ./config/keys:/opt/fonoster/keys:ro
- ./config/integrations.json:/opt/fonoster/integrations.json:ro
autopilot:
image: fonoster/autopilot:0.15.15
restart: unless-stopped
expose:
- 50061
environment:
- AUTOPILOT_AWS_S3_ACCESS_KEY_ID
- AUTOPILOT_AWS_S3_ENDPOINT
- AUTOPILOT_AWS_S3_REGION
- AUTOPILOT_AWS_S3_SECRET_ACCESS_KEY
- AUTOPILOT_CONVERSATION_PROVIDER
- AUTOPILOT_KNOWLEDGE_BASE_ENABLED
- AUTOPILOT_LOGS_FORMAT
- AUTOPILOT_LOGS_LEVEL
- AUTOPILOT_LOGS_TRANSPORT
- AUTOPILOT_OPENAI_API_KEY
- AUTOPILOT_UNSTRUCTURED_API_KEY
- AUTOPILOT_UNSTRUCTURED_API_URL
volumes:
- ./config/integrations.json:/opt/fonoster/integrations.json:ro
routr:
image: fonoster/routr-one:2.13.13
restart: unless-stopped
environment:
DATABASE_URL: ${ROUTR_DATABASE_URL}
EXTERNAL_ADDRS: ${ROUTR_EXTERNAL_ADDRS}
LOGS_FORMAT: ${ROUTR_LOGS_FORMAT}
LOGS_LEVEL: ${ROUTR_LOGS_LEVEL}
LOGS_TRANSPORT: ${ROUTR_LOGS_TRANSPORT}
NATS_PUBLISHER_ENABLED: true
NATS_PUBLISHER_URL: ${ROUTR_NATS_PUBLISHER_URL}
RTPENGINE_HOST: ${ROUTR_RTPENGINE_HOST}
START_INTERNAL_DB: "false"
CONNECT_VERIFIER_PUBLIC_KEY_PATH: /etc/routr/keys/public.pem
expose:
- 51907
- 51908
ports:
- 5060:5060/udp
- 5060-5063:5060-5063
volumes:
- ./config/keys/public.pem:/etc/routr/keys/public.pem
# RTPEngine uses a range of ports to handle RTP traffic. Because exposing a large range of ports
# is not possible in Docker, we need to use network_mode: host.
#
# Unfortunately, network_mode: host is not supported for Windows or Mac.
# In those cases, we need to use a different approach.
#
# By default we are opening a small range of ports (10000-10100) to handle RTP traffic.
# However, this is not enough for production environments.
#
# We recommend that when using Linux you use network_mode: host and remove the ports section.
rtpengine:
image: fonoster/rtpengine:0.3.17
restart: unless-stopped
platform: linux/x86_64
ports:
- 10000-10100:10000-10100/udp
- 8080:8080
environment:
PORT_MAX: ${RTPENGINE_PORT_MAX}
PORT_MIN: ${RTPENGINE_PORT_MIN}
PUBLIC_IP: ${RTPENGINE_PUBLIC_IP}
asterisk:
image: fonoster/asterisk:20
restart: unless-stopped
environment:
ARI_PROXY_URL: ${ASTERISK_ARI_PROXY_URL}
ARI_SECRET: ${ASTERISK_ARI_SECRET}
ARI_USERNAME: ${ASTERISK_ARI_USERNAME}
CODECS: ${ASTERISK_CODECS}
DTMF_MODE: ${ASTERISK_DTMF_MODE}
RTP_PORT_END: ${ASTERISK_RTP_PORT_END}
RTP_PORT_START: ${ASTERISK_RTP_PORT_START}
SIPPROXY_HOST: ${ASTERISK_SIPPROXY_HOST}
SIPPROXY_PORT: ${ASTERISK_SIPPROXY_PORT}
SIPPROXY_SECRET: ${ASTERISK_SIPPROXY_SECRET}
SIPPROXY_USERNAME: ${ASTERISK_SIPPROXY_USERNAME}
expose:
- 6060
postgres:
image: postgres:16.10-alpine3.22
restart: unless-stopped
environment:
PGTZ: UTC
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
POSTGRES_USER: ${POSTGRES_USER}
TZ: UTC
expose:
- 5432
volumes:
- db:/var/lib/postgresql/data
influxdb:
image: influxdb:2.7
restart: unless-stopped
expose:
- 8086
environment:
DOCKER_INFLUXDB_INIT_ADMIN_TOKEN: ${INFLUXDB_INIT_TOKEN}
DOCKER_INFLUXDB_INIT_BUCKET: calls
DOCKER_INFLUXDB_INIT_MODE: setup
DOCKER_INFLUXDB_INIT_ORG: ${INFLUXDB_INIT_ORG}
DOCKER_INFLUXDB_INIT_PASSWORD: ${INFLUXDB_INIT_PASSWORD}
DOCKER_INFLUXDB_INIT_USERNAME: ${INFLUXDB_INIT_USERNAME}
volumes:
- influxdb:/var/lib/influxdb2
nats:
image: nats:2.11.8
restart: unless-stopped
expose:
- 4222
envoy:
image: envoyproxy/envoy:v1.35.0
restart: unless-stopped
volumes:
- ./config/envoy.yaml:/etc/envoy/envoy.yaml:ro
# If using letsencrypt, you need to mount the letsencrypt directory
# by uncommenting the following line and changing the domain name to match your domain.
#
# Symbolic links will not work here!!!
#
# - ./path/to/letsencrypt:/etc/letsencrypt:ro
ports:
- 8449:8449
# If using letsencrypt, you need to expose port 443 and remove the default HTTP port (8449)
# - 443:443
volumes:
db:
influxdb: