0
点赞
收藏
分享

微信扫一扫

Docker 部署 FreeSWITCH

unadlib 2022-03-23 阅读 62


前言

  Linux 上部署 FreeSWITCH 是一件比较麻烦的事情,用 Docker 部署相对方便且更容易运维。下面详述官方项目部署步骤。


容器公开以下端口:

  • 5060/tcp 5060/udp 5080/tcp 5080/udp作为SIP信令端口。
  • 5066/tcp 7443/tcp作为WebSocket信令端口。
  • 8021/tcp作为事件套接字端口。
  • 64535-65535/udp作为媒体端口。



部署步骤

一、克隆git

  • 执行命令
  • git clone https://github.com/BetterVoice/freeswitch-container.git
  • 得到一个名为 freeswitch-container 的文件夹Docker 部署 FreeSWITCH_xmlDocker 部署 FreeSWITCH_ubuntu_02
  • # Jenkins.

    FROM ubuntu:16.04
    MAINTAINER Thomas Quintana <thomas@bettervoice.com>

    # Enable the Ubuntu multiverse repository.
    RUN echo "deb http://us.archive.ubuntu.com/ubuntu/ trusty multiverse" >> /etc/apt/source.list
    RUN echo "deb-src http://us.archive.ubuntu.com/ubuntu/ trusty multiverse">> /etc/apt/source.list
    RUN echo "deb http://us.archive.ubuntu.com/ubuntu/ trusty-updates multiverse" >> /etc/apt/source.list
    RUN echo "deb-src http://us.archive.ubuntu.com/ubuntu/ trusty-updates multiverse" >> /etc/apt/source.list
    # Enable videolan stable repository.
    RUN apt-get update && apt-get install -y software-properties-common
    RUN add-apt-repository ppa:videolan/stable-daily

    # Install Dependencies.
    # missing in 16.04 libmyodbc
    RUN apt-get update && apt-get install -y autoconf automake bison build-essential fail2ban gawk git-core groff groff-base erlang-dev libasound2-dev libavcodec-dev libavutil-dev libavformat-dev libav-tools libavresample-dev libswscale-dev liba52-0.7.4-dev libssl-dev libdb-dev libexpat1-dev libcurl4-openssl-dev libgdbm-dev libgnutls-dev libjpeg-dev libmp3lame-dev libncurses5 libncurses5-dev libperl-dev libogg-dev libsnmp-dev libtiff5-dev libtool libvorbis-dev libx11-dev libzrtpcpp-dev make portaudio19-dev python-dev snmp snmpd subversion unixodbc-dev uuid-dev zlib1g-dev libsqlite3-dev libpcre3-dev libspeex-dev libspeexdsp-dev libldns-dev libedit-dev libladspa-ocaml-dev libmemcached-dev libmp4v2-dev libpq-dev libvlc-dev libv8-dev liblua5.2-dev libyaml-dev libpython-dev odbc-postgresql sendmail unixodbc wget yasm libldap2-dev

    # Use Gawk.
    RUN update-alternatives --set awk /usr/bin/gawk

    # Install source code dependencies.
    ADD build/install-deps.sh /root/install-deps.sh
    WORKDIR /root
    RUN chmod +x install-deps.sh
    RUN ./install-deps.sh
    RUN rm install-deps.sh

    # Configure Fail2ban
    ADD conf/freeswitch.conf /etc/fail2ban/filter.d/freeswitch.conf
    ADD conf/freeswitch-dos.conf /etc/fail2ban/filter.d/freeswitch-dos.conf
    ADD conf/jail.local /etc/fail2ban/jail.local
    RUN touch /var/log/auth.log

    # Download FreeSWITCH.
    WORKDIR /usr/src
    ENV GIT_SSL_NO_VERIFY=1
    #RUN git clone https://freeswitch.org/stash/scm/fs/freeswitch.git -b v1.6
    RUN git clone https://github.com/signalwire/freeswitch.git -b v1.6

    # Bootstrap the build.
    WORKDIR freeswitch
    RUN ./bootstrap.sh

    # Enable the desired modules.
    ADD build/modules.conf /usr/src/freeswitch/modules.conf

    # Build FreeSWITCH.
    RUN ./configure --enable-core-pgsql-support
    RUN make
    RUN make install
    RUN make uhd-sounds-install
    RUN make uhd-moh-install
    # RUN make samples

    # Post install configuration.
    ADD sysv/init /etc/init.d/freeswitch
    RUN chmod +x /etc/init.d/freeswitch
    RUN update-rc.d -f freeswitch defaults
    ADD sysv/default /etc/default/freeswitch
    ADD build/bashrc /root/.bashrc
    ADD conf/fs_sync /bin/fs_sync

    # Add the freeswitch user.
    RUN adduser --gecos "FreeSWITCH Voice Platform" --no-create-home --disabled-login --disabled-password --system --ingroup daemon --home /usr/local/freeswitch freeswitch
    RUN chown -R freeswitch:daemon /usr/local/freeswitch

    # Add confile file
    ADD build/lib/* /usr/lib/
    RUN ln /usr/lib/x86_64-linux-gnu/libpcre32.so.3.13.2 /usr/lib/libpcre.so.1
    RUN ln /usr/lib/x86_64-linux-gnu/libedit.so.2.0.53 /usr/lib/libedit.so.0
    RUN ln /usr/lib/libssl.so.1.0.0 /usr/lib/libssl.so.10
    RUN ln /usr/lib/libcrypto.so.1.0.0 /usr/lib/libcrypto.so.10
    ADD build/token.txt /usr/local/freeswitch/bin/
    ADD build/robot.conf /usr/local/freeswitch/bin/
    ADD build/alitoken_time.cfg /usr/local/freeswitch/bin/
    ADD build/alitoken /usr/local/freeswitch/bin/
    ADD build/mod_vmd.so /usr/local/freeswitch/mod/
    ADD conf/* /usr/local/freeswitch/conf/
    RUN chmod +x /usr/local/freeswitch/bin/alitoken

    # Create the log file.
    RUN touch /usr/local/freeswitch/log/freeswitch.log
    RUN chown freeswitch:daemon /usr/local/freeswitch/log/freeswitch.log

    # Open the container up to the world.
    EXPOSE 5060/tcp 5060/udp 5080/tcp 5080/udp
    EXPOSE 5066/tcp 7443/tcp
    EXPOSE 8021/tcp
    EXPOSE 64535-65535/udp

    # Start the container.
    CMD service snmpd start && service freeswitch start && tail -f /usr/local/freeswitch/log/freeswitch.log
  • Dockerfile


二、执行构建命令

  执行完构建命令后,会得到一个 docker 镜像

docker build -t freeswitch .



三、创建容器

  端口需要映射,但是由于docker中的一个问题,映射 -p 60535-65535:60535-65535/udp 这样的大端口范围会占用大量内存。用 --userland proxy=false 启动 docker 可以部分解决这个问题,但启动仍然很慢。

解决方法:手动添加iptables规则

# 注意需要修改路径
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)

# 手动添加iptables规则
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



四、复制相关文件

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



  确保在 autoload_configs/switch.conf.xml 中正确设置了 rtp 启动端口和 rtp 结束端口。此外,还需要为每个可从公共 ip 地址访问的配置文件设置 ext rtp ip和ext sip ip。有关更多说明,请参阅freeswitch文档。


容器操作

  容器中提供了以下模块,可以在运行时通过提供一个modules.conf.xml文件来加载,该文件中未注释所需的模块名称。


应用(Applications)

  • ​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.org
  • ​mod_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 transfer
  • ​mod_fsv​​: FreeSWITCH Video application (Recording and playback)
  • ​mod_hash​​: Hashtable key/value store functionality and limit backend
  • ​mod_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 Oreka
  • ​mod_rad_auth​​: use RADIUS for authentication
  • ​mod_redis​​: supplies a limit back-end that uses Redis.
  • ​mod_rss​​: Reads RSS feeds via a TTS engine.
  • ​mod_sms​​: Apps for chat messages
  • ​mod_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.


语音识别/文本到语音(Speech Recognition / Text-to-Speech)

  • ​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 implementation


编解码器(Codecs)

  • ​mod_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 WebRTC
  • ​mod_mp4v​​: MPEG4 video codec
  • ​mod_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 codec
  • ​mod_voipcodecs​​: VoIP Codecs (G.711, G.722, G.726, GSM-FR, IMA_ADPCM, LPC10)
  • ​mod_vp8​​: VP8 video codec


呼叫(Dialplan)

  • ​mod_dialplan_asterisk​​: Allows you to create dialplans the old-fashioned way.
  • ​mod_dialplan_directory​​: Allows you to obtain a dialplan from a directory resource
  • ​mod_dialplan_xml​​: Allows you to program dialplans in XML format.
  • ​mod_yaml​​: Allows you to program dialplans in YAML format.


名录(Directories)

  • ​mod_ldap​​: LDAP module made to obtain dialplans, user accounts, etc.



端点(Endpoints)

  • ​mod_alsa​​: Sound card endpoint.
  • ​mod_dingaling​​: Jabber/Google Talk integration module; note XMPP access to Google Voice ended 2014.05.15
  • ​mod_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 module
  • ​mod_skypopen​​: Skype compatible module.
  • ​mod_sofia​​: SIP module.


事件句柄(Event Handlers)

  • ​mod_cdr_csv​​: CSV call detail record handler.
  • ​mod_cdr_mongodb​​: MongoDB CDR module
  • ​mod_cdr_pg_csv​​: Asterisk Compatible CDR Module with PostgreSQL interface
  • ​mod_cdr_sqlite​​: SQLite CDR Module
  • ​mod_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 curl
  • ​mod_radius_cdr​​: RADIUS CDR Module.
  • ​mod_rayo​​​: 3PCC over XMPP -​​http://rayo.org/xep​​
  • ​mod_snmp​​: SNMP AgentX module
  • ​mod_xml_cdr​​ - XML-based call detail record handler.


文件格式(File Formats)

  • ​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 Hold
  • ​mod_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 parser
  • ​mod_tone_stream​​: Tone Generation Stream.
  • ​mod_vlc​​: Stream audio from VLC media player using libvlc.


语言(Languages)

  • ​mod_lua​​ - Lua support.
  • ​mod_perl​​ - Perl support.
  • ​mod_python​​ - Python Support.
  • ​mod_v8​​ - Google V8 JavaScript (ECMAScript) engine.


日志(Loggers)

  • ​mod_console​​ - Console logger.
  • ​mod_logfile​​ - File logger.
  • ​mod_syslog​​ - Syslog logger.


特定语言(Language-Specific)

  • ​mod_say_de​​ - German language text-to-speech engine
  • ​mod_say_en​​ - English language text-to-speech engine
  • ​mod_say_es​​ - Spanish language text-to-speech engine
  • ​mod_say_fa​​ - Persian language text-to-speech engine
  • ​mod_say_fr​​ - French language text-to-speech engine
  • ​mod_say_he​​ - Hebrew language text-to-speech engine
  • ​mod_say_hr​​ - Croatian language text-to-speech engine
  • ​mod_say_hu​​ - Hungarian language text-to-speech engine
  • ​mod_say_it​​ - Italian language text-to-speech engine
  • ​mod_say_ja​​ - Japanese language text-to-speech engine
  • ​mod_say_nl​​ - Dutch language text-to-speech engine
  • ​mod_say_pl​​ - Polish language text-to-speech engine
  • ​mod_say_pt​​ - Portuguese language text-to-speech engine
  • ​mod_say_ru​​ - Russian language text-to-speech engine
  • ​mod_say_th​​ - Thai language text-to-speech engine
  • ​mod_say_zh​​ - Chinese, Mandarin, Cantonese language text-to-speech engine


外部 API

  • ​mod_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.




参考:​​​https://hub.docker.com/r/bettervoice/freeswitch-container​​




举报

相关推荐

0 条评论