Skip to content

Commit 3fcc9f2

Browse files
Feat : Add Fonoster template -#45 (#509)
* feat: Add Fonoster template - open source Twilio alternative * fixed the build issue * fixed the service log issue
1 parent 1c16dee commit 3fcc9f2

File tree

4 files changed

+568
-0
lines changed

4 files changed

+568
-0
lines changed
Lines changed: 206 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,206 @@
1+
services:
2+
dashboard:
3+
image: fonoster/dashboard:0.15.15
4+
restart: unless-stopped
5+
ports:
6+
- 3030
7+
environment:
8+
- SERVER_DASHBOARD_SESSION_SECRET=${SERVER_DASHBOARD_SESSION_SECRET}
9+
10+
apiserver:
11+
image: fonoster/apiserver:0.15.15
12+
restart: unless-stopped
13+
depends_on:
14+
postgres:
15+
condition: service_healthy
16+
environment:
17+
- APISERVER_APP_URL=${APISERVER_APP_URL}
18+
- APISERVER_ASTERISK_ARI_PROXY_URL=${APISERVER_ASTERISK_ARI_PROXY_URL}
19+
- APISERVER_ASTERISK_ARI_SECRET=${APISERVER_ASTERISK_ARI_SECRET}
20+
- APISERVER_ASTERISK_ARI_USERNAME=${APISERVER_ASTERISK_ARI_USERNAME}
21+
- APISERVER_AUTHZ_SERVICE_ENABLED=${APISERVER_AUTHZ_SERVICE_ENABLED}
22+
- APISERVER_AUTHZ_SERVICE_HOST=${APISERVER_AUTHZ_SERVICE_HOST}
23+
- APISERVER_AUTHZ_SERVICE_METHODS=${APISERVER_AUTHZ_SERVICE_METHODS}
24+
- APISERVER_AUTHZ_SERVICE_PORT=${APISERVER_AUTHZ_SERVICE_PORT}
25+
- APISERVER_CLOAK_ENCRYPTION_KEY=${APISERVER_CLOAK_ENCRYPTION_KEY}
26+
- APISERVER_DATABASE_URL=${APISERVER_DATABASE_URL}
27+
- APISERVER_IDENTITY_DATABASE_URL=${APISERVER_IDENTITY_DATABASE_URL}
28+
- APISERVER_IDENTITY_ISSUER=${APISERVER_IDENTITY_ISSUER}
29+
- APISERVER_IDENTITY_CONTACT_VERIFICATION_REQUIRED=${APISERVER_IDENTITY_CONTACT_VERIFICATION_REQUIRED}
30+
- APISERVER_IDENTITY_TWO_FACTOR_AUTHENTICATION_REQUIRED=${APISERVER_IDENTITY_TWO_FACTOR_AUTHENTICATION_REQUIRED}
31+
- APISERVER_IDENTITY_WORKSPACE_INVITE_EXPIRATION=${APISERVER_IDENTITY_WORKSPACE_INVITE_EXPIRATION}
32+
- APISERVER_IDENTITY_WORKSPACE_INVITE_FAIL_URL=${APISERVER_IDENTITY_WORKSPACE_INVITE_FAIL_URL}
33+
- APISERVER_IDENTITY_WORKSPACE_INVITE_URL=${APISERVER_IDENTITY_WORKSPACE_INVITE_URL}
34+
- APISERVER_IDENTITY_OAUTH2_GITHUB_CLIENT_ID=${APISERVER_IDENTITY_OAUTH2_GITHUB_CLIENT_ID}
35+
- APISERVER_IDENTITY_OAUTH2_GITHUB_CLIENT_SECRET=${APISERVER_IDENTITY_OAUTH2_GITHUB_CLIENT_SECRET}
36+
- APISERVER_IDENTITY_OAUTH2_GITHUB_ENABLED=${APISERVER_IDENTITY_OAUTH2_GITHUB_ENABLED}
37+
- APISERVER_INFLUXDB_INIT_ORG=${APISERVER_INFLUXDB_INIT_ORG}
38+
- APISERVER_INFLUXDB_INIT_PASSWORD=${APISERVER_INFLUXDB_INIT_PASSWORD}
39+
- APISERVER_INFLUXDB_INIT_TOKEN=${APISERVER_INFLUXDB_INIT_TOKEN}
40+
- APISERVER_INFLUXDB_INIT_USERNAME=${APISERVER_INFLUXDB_INIT_USERNAME}
41+
- APISERVER_INFLUXDB_URL=${APISERVER_INFLUXDB_URL}
42+
- APISERVER_LOGS_FORMAT=${APISERVER_LOGS_FORMAT}
43+
- APISERVER_LOGS_LEVEL=${APISERVER_LOGS_LEVEL}
44+
- APISERVER_LOGS_TRANSPORT=${APISERVER_LOGS_TRANSPORT}
45+
- APISERVER_NATS_URL=${APISERVER_NATS_URL}
46+
- APISERVER_OWNER_EMAIL=${APISERVER_OWNER_EMAIL}
47+
- APISERVER_OWNER_NAME=${APISERVER_OWNER_NAME}
48+
- APISERVER_OWNER_PASSWORD=${APISERVER_OWNER_PASSWORD}
49+
- APISERVER_ROOT_DOMAIN=${APISERVER_ROOT_DOMAIN}
50+
- APISERVER_SMTP_AUTH_PASS=${APISERVER_SMTP_AUTH_PASS}
51+
- APISERVER_SMTP_AUTH_USER=${APISERVER_SMTP_AUTH_USER}
52+
- APISERVER_SMTP_HOST=${APISERVER_SMTP_HOST}
53+
- APISERVER_SMTP_PORT=${APISERVER_SMTP_PORT}
54+
- APISERVER_SMTP_SECURE=${APISERVER_SMTP_SECURE}
55+
- APISERVER_SMTP_SENDER=${APISERVER_SMTP_SENDER}
56+
- APISERVER_SIGNALING_SERVER=${APISERVER_SIGNALING_SERVER}
57+
- APISERVER_TWILIO_ACCOUNT_SID=${APISERVER_TWILIO_ACCOUNT_SID}
58+
- APISERVER_TWILIO_AUTH_TOKEN=${APISERVER_TWILIO_AUTH_TOKEN}
59+
- APISERVER_TWILIO_PHONE_NUMBER=${APISERVER_TWILIO_PHONE_NUMBER}
60+
expose:
61+
- 50051
62+
volumes:
63+
- ../files/config/keys:/opt/fonoster/keys:ro
64+
- ../files/config/integrations.json:/opt/fonoster/integrations.json:ro
65+
66+
autopilot:
67+
image: fonoster/autopilot:0.15.15
68+
restart: unless-stopped
69+
expose:
70+
- 50061
71+
environment:
72+
- AUTOPILOT_AWS_S3_ACCESS_KEY_ID=${AUTOPILOT_AWS_S3_ACCESS_KEY_ID}
73+
- AUTOPILOT_AWS_S3_ENDPOINT=${AUTOPILOT_AWS_S3_ENDPOINT}
74+
- AUTOPILOT_AWS_S3_REGION=${AUTOPILOT_AWS_S3_REGION}
75+
- AUTOPILOT_AWS_S3_SECRET_ACCESS_KEY=${AUTOPILOT_AWS_S3_SECRET_ACCESS_KEY}
76+
- AUTOPILOT_CONVERSATION_PROVIDER=${AUTOPILOT_CONVERSATION_PROVIDER}
77+
- AUTOPILOT_KNOWLEDGE_BASE_ENABLED=${AUTOPILOT_KNOWLEDGE_BASE_ENABLED}
78+
- AUTOPILOT_LOGS_FORMAT=${AUTOPILOT_LOGS_FORMAT}
79+
- AUTOPILOT_LOGS_LEVEL=${AUTOPILOT_LOGS_LEVEL}
80+
- AUTOPILOT_LOGS_TRANSPORT=${AUTOPILOT_LOGS_TRANSPORT}
81+
- AUTOPILOT_OPENAI_API_KEY=${AUTOPILOT_OPENAI_API_KEY}
82+
- AUTOPILOT_UNSTRUCTURED_API_KEY=${AUTOPILOT_UNSTRUCTURED_API_KEY}
83+
- AUTOPILOT_UNSTRUCTURED_API_URL=${AUTOPILOT_UNSTRUCTURED_API_URL}
84+
volumes:
85+
- ../files/config/integrations.json:/opt/fonoster/integrations.json:ro
86+
87+
routr:
88+
image: fonoster/routr-one:2.13.13
89+
restart: unless-stopped
90+
depends_on:
91+
postgres:
92+
condition: service_healthy
93+
environment:
94+
DATABASE_URL: ${ROUTR_DATABASE_URL}
95+
EXTERNAL_ADDRS: ${ROUTR_EXTERNAL_ADDRS}
96+
LOGS_FORMAT: ${ROUTR_LOGS_FORMAT}
97+
LOGS_LEVEL: ${ROUTR_LOGS_LEVEL}
98+
LOGS_TRANSPORT: ${ROUTR_LOGS_TRANSPORT}
99+
NATS_PUBLISHER_ENABLED: "true"
100+
NATS_PUBLISHER_URL: ${ROUTR_NATS_PUBLISHER_URL}
101+
RTPENGINE_HOST: ${ROUTR_RTPENGINE_HOST}
102+
START_INTERNAL_DB: "false"
103+
CONNECT_VERIFIER_PUBLIC_KEY_PATH: /etc/routr/keys/public.pem
104+
expose:
105+
- 51907
106+
- 51908
107+
ports:
108+
- 5060:5060/udp
109+
- 5060-5063:5060-5063
110+
volumes:
111+
- ../files/config/keys/public.pem:/etc/routr/keys/public.pem
112+
113+
# RTPEngine uses a range of ports to handle RTP traffic. Because exposing a large range of ports
114+
# is not possible in Docker, we need to use network_mode: host.
115+
#
116+
# Unfortunately, network_mode: host is not supported for Windows or Mac.
117+
# In those cases, we need to use a different approach.
118+
#
119+
# By default we are opening a small range of ports (10000-10100) to handle RTP traffic.
120+
# However, this is not enough for production environments.
121+
#
122+
# We recommend that when using Linux you use network_mode: host and remove the ports section.
123+
rtpengine:
124+
image: fonoster/rtpengine:0.3.17
125+
restart: unless-stopped
126+
platform: linux/x86_64
127+
ports:
128+
- 10000-10100:10000-10100/udp
129+
- 8080:8080
130+
environment:
131+
PORT_MAX: ${RTPENGINE_PORT_MAX}
132+
PORT_MIN: ${RTPENGINE_PORT_MIN}
133+
PUBLIC_IP: ${RTPENGINE_PUBLIC_IP}
134+
135+
asterisk:
136+
image: fonoster/asterisk:20
137+
restart: unless-stopped
138+
environment:
139+
ARI_PROXY_URL: ${ASTERISK_ARI_PROXY_URL}
140+
ARI_SECRET: ${ASTERISK_ARI_SECRET}
141+
ARI_USERNAME: ${ASTERISK_ARI_USERNAME}
142+
CODECS: ${ASTERISK_CODECS}
143+
DTMF_MODE: ${ASTERISK_DTMF_MODE}
144+
RTP_PORT_END: ${ASTERISK_RTP_PORT_END}
145+
RTP_PORT_START: ${ASTERISK_RTP_PORT_START}
146+
SIPPROXY_HOST: ${ASTERISK_SIPPROXY_HOST}
147+
SIPPROXY_PORT: ${ASTERISK_SIPPROXY_PORT}
148+
SIPPROXY_SECRET: ${ASTERISK_SIPPROXY_SECRET}
149+
SIPPROXY_USERNAME: ${ASTERISK_SIPPROXY_USERNAME}
150+
expose:
151+
- 6060
152+
153+
postgres:
154+
image: postgres:16.10-alpine3.22
155+
restart: unless-stopped
156+
environment:
157+
PGTZ: UTC
158+
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
159+
POSTGRES_USER: ${POSTGRES_USER}
160+
POSTGRES_DB: ${POSTGRES_DB}
161+
TZ: UTC
162+
expose:
163+
- 5432
164+
volumes:
165+
- db:/var/lib/postgresql/data
166+
- ../files/config/init-db.sh:/docker-entrypoint-initdb.d/init-db.sh:ro
167+
healthcheck:
168+
test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DB}"]
169+
interval: 5s
170+
timeout: 5s
171+
retries: 10
172+
173+
influxdb:
174+
image: influxdb:2.7
175+
restart: unless-stopped
176+
expose:
177+
- 8086
178+
environment:
179+
DOCKER_INFLUXDB_INIT_ADMIN_TOKEN: ${INFLUXDB_INIT_TOKEN}
180+
DOCKER_INFLUXDB_INIT_BUCKET: calls
181+
DOCKER_INFLUXDB_INIT_MODE: setup
182+
DOCKER_INFLUXDB_INIT_ORG: ${INFLUXDB_INIT_ORG}
183+
DOCKER_INFLUXDB_INIT_PASSWORD: ${INFLUXDB_INIT_PASSWORD}
184+
DOCKER_INFLUXDB_INIT_USERNAME: ${INFLUXDB_INIT_USERNAME}
185+
volumes:
186+
- influxdb:/var/lib/influxdb2
187+
188+
nats:
189+
image: nats:2.11.8
190+
restart: unless-stopped
191+
expose:
192+
- 4222
193+
194+
envoy:
195+
image: envoyproxy/envoy:v1.35.0
196+
restart: unless-stopped
197+
command: ["/usr/local/bin/envoy", "-c", "/etc/envoy/envoy.yaml"]
198+
volumes:
199+
- ../files/config:/etc/envoy:ro
200+
ports:
201+
- 8449:8449
202+
203+
volumes:
204+
db:
205+
influxdb:
206+

blueprints/fonoster/fonoster.svg

Lines changed: 11 additions & 0 deletions
Loading

0 commit comments

Comments
 (0)