This project can be used to deploy a FreeSWITCH server inside a Docker container. The container currently uses the latest stable release version 1.6.x. An effort was made to build many modules so the container can be generic enough to serve many purposes.
The container now includes fail2ban but in order for fail2ban to update the rules in IPTables it must be run with the --privileged
flag.
The container exposes the following ports:
CID=$(sudo docker run --name freeswitch -p 5060:5060/tcp -p 5060:5060/udp -p 5080:5080/tcp -p 5080:5080/udp -p 8021:8021/tcp -p 7443:7443/tcp -p 60535-65535:60535-65535/udp -v /home/ubuntu/freeswitch/conf:/usr/local/freeswitch/conf bettervoice/freeswitch-container:1.6.6)
Keep in mind that freeswitch has to be able to read the mounted volume.
Because of an issue in docker, mapping a large port range like in -p 60535-65535:60535-65535/udp
can eat a lot of memory. Starting docker with --userland-proxy=false
solves this partially, but startup will still be slow. As a workaround you can remove this from the docker commandline and manually add the iptables
rules instead:
CIP=$(sudo docker inspect --format='{{.NetworkSettings.IPAddress}}' $CID)
sudo iptables -A DOCKER -t nat -p udp -m udp ! -i docker0 --dport 60535:65535 -j DNAT --to-destination $CIP:60535-65535
sudo iptables -A DOCKER -p udp -m udp -d $CIP/32 ! -i docker0 -o docker0 --dport 60535:65535 -j ACCEPT
sudo iptables -A POSTROUTING -t nat -p udp -m udp -s $CIP/32 -d $CIP/32 --dport 60535:65535 -j MASQUERADE
Follow the following steps in order to run start this docker instance via systemctl.
Customizations For customizing the startup settings look at the wiki documentation in GitHub which deals with running docker as a service in systemd.
sudo cp sysv/systemd/docker.freeswitch.service /lib/systemd/system/
sudo systemctl daemon-reload
sudo cp sysv/docker.freeswitch.py /usr/local/bin/
# Enable the service
sudo systemctl enable docker.freeswitch
# Start the service
sudo systemctl start docker.freeswitch
# Stop the service
sudo systemctl stop docker.freeswitch
Make sure you properly set rtp-start-port
and rtp-end-port
in autoload_configs/switch.conf.xml
. Also you need to set ext-rtp-ip
and ext-sip-ip
for every profile which is accessible from your public ip address. See the freeswitch documentation for further instructions.
sudo docker exec -it freeswitch /bin/bash
The following modules are available in the container and can be loaded at runtime by providing a modules.conf.xml
file with the desired module names uncommented.
mod_avmd
: Detects voicemail beeps using a generalized approach.mod_blacklist
: Blacklist module.mod_callcenter
: Call queuing application that can be used for call center needs.mod_cidlookup
: Provides a means (database, url) to lookup the callerid name from a number.mod_commands
: A mass plethora of API interface commands.mod_conference
: Conference room module.mod_curl
: Allows scripts to make HTTP requests as receive responses as plain text or JSON.mod_db
: Database key/value store functionality, group dialing, and limit backend.mod_directory
: Dial by Name directory.mod_distributor
: Simple round-robin style distributions.mod_dptools
: Dialplan Tools: provides a number of apps and utilities for the dialplan.mod_easyroute
: A simple DID routing engine that uses a database lookup to determine how to route an incoming call.mod_enum
: Route PSTN numbers over internet according to ENUM servers, such as e164.orgmod_esf
: Holds the multi cast paging application for SIP.mod_esl
: Allows to generate remote ESL commands.mod_expr
: Brian Allen Vanderburg's expression evaluation library.mod_fifo
: FIFO module.mod_fsk
: FSK (Frequency-Shift Keying) data transfermod_fsv
: FreeSWITCH Video application (Recording and playback)mod_hash
: Hashtable key/value store functionality and limit backendmod_httapi
: HT-TAPI Hypertext Telephony API (Twilio FreeSWITCH style)mod_http_cache
: HTTP GET with caching.mod_ladspa
: use Auto-tune on your call.mod_lcr
: Implements LCR (Least Cost Routing)mod_memcache
: API that integrates with memcached (a distributed key/value object store)mod_mongo
: http://www.mongodb.org/mod_mp4
: MP4 File Format support for video apps.mod_nibblebill
: Billing module ("nibbles" at credit/cash amounts during calls)mod_oreka
: Module for Media Recording with Orekamod_rad_auth
: use RADIUS for authenticationmod_redis
: supplies a limit back-end that uses Redis.mod_rss
: Reads RSS feeds via a TTS engine.mod_sms
: Apps for chat messagesmod_snapshot
: Records a sliding window of audio and can take snapshots to disk.mod_snom
: Controlling softkeys on Snom phones (button function, led state, label etc.)mod_spandsp
: Spandsp tone and DTMF detectors. A combination of mod_fax and mod_voipcodecs and mod_t38gateway.mod_spy
: User spy module.mod_stress
: Module for detecting voice stress.mod_tone_detect
: Tone detection module.mod_translate
: Format numbers into a specified format.mod_valet_parking
: Allows calls to be parked and picked up easily.mod_vmd
: Voicemail beep detection module.mod_voicemail
: Full-featured voicemail module.mod_voicemail_ivr
: VoiceMail IVR Interface.mod_xml_odbc
: Allows user directory to be accessed from a database in realtime.mod_flite
- Free open source Text to Speech.mod_pocketsphinx
- Free open source Speech Recognition.mod_tts_commandline
- Run a command line and play the outputted file.mod_unimrcp
- Module for an open MRCP implementationmod_amr
: GSM-AMR (Adaptive Multi-Rate) codec.mod_amrwb
: GSM-AMRWB (ARM Wide Band) codec.mod_bv
: BroadVoice16 and BroadVoice32 audio codecs (Broadcom codecs).mod_celt
: CELT ultra-low delay audio codec.mod_codec2
: FreeSWITCH CODEC2 Module.mod_dahdi_codec
- DAHDI Codecs (G729A 8.0kbit, G723.1 5.3kbit).mod_g723_1
: G.723.1 codec.mod_g729
: G.729 codec.mod_h26x
: H26X signed linear codec.mod_ilbc
: ILBC codec.mod_isac
: Internet Speech Audio Codec open sourced by Google, used in WebRTCmod_mp4v
: MPEG4 video codecmod_opus
: The OPUS ultra-low delay audio codec (http://opus-codec.org/)mod_siren
: G.722.1 (Siren7) and G.722.1 Annex C (Siren14) Polycom codecs.mod_speex
: Speex codec.mod_theora
: Theora video codecmod_voipcodecs
: VoIP Codecs (G.711, G.722, G.726, GSM-FR, IMA_ADPCM, LPC10)mod_vp8
: VP8 video codecmod_dialplan_asterisk
: Allows you to create dialplans the old-fashioned way.mod_dialplan_directory
: Allows you to obtain a dialplan from a directory resourcemod_dialplan_xml
: Allows you to program dialplans in XML format.mod_yaml
: Allows you to program dialplans in YAML format.mod_ldap
: LDAP module made to obtain dialplans, user accounts, etc.mod_alsa
: Sound card endpoint.mod_dingaling
: Jabber/Google Talk integration module; note XMPP access to Google Voice ended 2014.05.15mod_loopback
: Loopback endpoint module - A loopback channel driver to make an outbound call as an inbound call.mod_portaudio
: Voice through a local soundcard.mod_rtmp
: "Real time media protocol" endpoint for FreeSWITCH.mod_skinny
: SCCP modulemod_skypopen
: Skype compatible module.mod_sofia
: SIP module.mod_cdr_csv
: CSV call detail record handler.mod_cdr_mongodb
: MongoDB CDR modulemod_cdr_pg_csv
: Asterisk Compatible CDR Module with PostgreSQL interfacemod_cdr_sqlite
: SQLite CDR Modulemod_erlang_event
: Module to send/receive events/commands in Erlang's binary format.mod_event_multicast
: Broadcasts events to netmask.mod_event_socket
: Sends events via a single socket.mod_event_zmq
: http://www.zeromq.org/mod_json_cdr
: JSON CDR Module to files or curlmod_radius_cdr
: RADIUS CDR Module.mod_rayo
: 3PCC over XMPP - http://rayo.org/xepmod_snmp
: SNMP AgentX modulemod_xml_cdr
- XML-based call detail record handler.mod_local_stream
: Multiple channels connected to same looped file stream.mod_native_file
: File interface for codec specific file formats.mod_portaudio_stream
: Stream from an external audio source for Music on Holdmod_shell_stream
: Stream audio from an arbitrary shell command. Read audio from a database, from a soundcard, etc.mod_shout
: MP3 files and shoutcast streams.mod_sndfile
: Multi-format file format transcoder (WAV, etc)mod_ssml
: Speech Synthesis Markup Language parsermod_tone_stream
: Tone Generation Stream.mod_vlc
: Stream audio from VLC media player using libvlc.mod_lua
- Lua support.mod_perl
- Perl support.mod_python
- Python Support.mod_v8
- Google V8 JavaScript (ECMAScript) engine.mod_console
- Console logger.mod_logfile
- File logger.mod_syslog
- Syslog logger.mod_say_de
- German language text-to-speech enginemod_say_en
- English language text-to-speech enginemod_say_es
- Spanish language text-to-speech enginemod_say_fa
- Persian language text-to-speech enginemod_say_fr
- French language text-to-speech enginemod_say_he
- Hebrew language text-to-speech enginemod_say_hr
- Croatian language text-to-speech enginemod_say_hu
- Hungarian language text-to-speech enginemod_say_it
- Italian language text-to-speech enginemod_say_ja
- Japanese language text-to-speech enginemod_say_nl
- Dutch language text-to-speech enginemod_say_pl
- Polish language text-to-speech enginemod_say_pt
- Portuguese language text-to-speech enginemod_say_ru
- Russian language text-to-speech enginemod_say_th
- Thai language text-to-speech enginemod_say_zh
- Chinese, Mandarin, Cantonese language text-to-speech enginemod_xml_curl
- XML Gateway Code. Configure FreeSWITCH™ from a web server on boot and on the fly.mod_xml_ldap
- LDAP XML Gateway.mod_xml_radius
- RADIUS authentication gateway.mod_xml_rpc
- XML Remote Procedure Calls. Issue commands from your web application.mod_xml_scgi
- Simple Common Gateway Interface.