目录
一、安装docker环境
二、基于debian镜像安装FreeSWITCH1.10.7
三、FreeSWITCH应用配置
3.1 acl权限配置
3.2 5060等端口没有启动
3.3 软电话注册10秒后才提示接听
3.4 ESL配置[Java ESL连接使用]
3.5 有两个IP需要设置对外IP
3.6 设置每秒增加的会话数
3.7 配置CDR(呼叫详细记录)推送
四、制作FreeSWITCH镜像
4.1 调整镜像版本和启动容器
4.2 打包FreeSWITCH镜像
4.2.1 以第三方镜像为基础二次开发后运行打包镜像
4.2.2 在镜像基础上打包镜像(修改镜像信息)
4.2.3 通过容器创建新的镜像并推送仓库
4.2.4 推送镜像到docker仓库
五、拉取docker镜像安装运行
六、注意事项
6.1 sip线路地址配置
6.2 mrcp地址配置
6.3 cdr地址配置
6.4 LOCAL_EIP槽位参数要暴露出来
6.5 启动命令注意nas挂载
6.6 启动命令注意给LOCAL_EIP赋值
一、安装docker环境
#备份
sudo cp /etc/yum.repos.d/redhat.repo /etc/yum.repos.d/redhat.repo_bak
#下载阿里yum源
sudo wget -O /etc/yum.repos.d/aliyun.repo http://mirrors.aliyun.com/repo/Centos-8.repo
#清缓存
yum clean all
#更新
yum makecache
#安装并设置仓库
sudo yum install -y yum-utils
sudo yum-config-manager –add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#安装docker指定版本
sudo yum install docker-ce-23.0.6
#启动docker
sudo systemctl start docker
#查看验证
sudo docker version
二、基于debian镜像安装FreeSWITCH1.10.7
[yunyun@redhat-fs01 ~]$ sudo docker image pull debian:bullseye
[yunyun@redhat-fs01 ~]$ sudo docker run –name debian –network host -t -d debian:bullseye
[yunyun@redhat-fs01 ~]$ cd soft/
[yunyun@redhat-fs01 soft]$ sudo docker cp freeswitch-1.10.7.-release.tar.gz debian:/usr/src/
[yunyun@redhat-fs01 soft]$ sudo docker cp libks-1.8.2.tar.gz debian:/usr/src/
[yunyun@redhat-fs01 soft]$ sudo docker cp signalwire-c-1.3.0.tar.gz debian:/usr/src/
[yunyun@redhat-fs01 soft]$ sudo docker cp sofia-sip-1.13.14.tar.gz debian:/usr/src/
[yunyun@redhat-fs01 soft]$ sudo docker cp spandsp-packages.zip debian:/usr/src/
[yunyun@redhat-fs01 soft]$ sudo docker cp silent.wav freeswitch:/usr/src
[yunyun@redhat-fs01 ~]$ sudo docker exec -it debian bash
root@redhat-fs01:/# cd /usr/src/
root@redhat-fs01:/usr/src# >/etc/apt/sources.list
root@redhat-fs01:/usr/src# echo “deb http://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye main contrib non-free” >> /etc/apt/sources.list
root@redhat-fs01:/usr/src# echo “deb http://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye-updates main contrib non-free” >> /etc/apt/sources.list
root@redhat-fs01:/usr/src# echo “deb http://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye-backports main contrib non-free” >> /etc/apt/sources.list
root@redhat-fs01:/usr/src# echo “deb http://mirrors.tuna.tsinghua.edu.cn/debian-security bullseye-security main contrib non-free” >> /etc/apt/sources.list
root@redhat-fs01:/usr/src# cat /etc/apt/sources.list
root@redhat-fs01:/usr/src# apt update
root@redhat-fs01:/usr/src# apt install gcc g++ autoconf automake make cmake yasm uuid-dev libvpx-dev unixodbc-dev ncurses-dev zlib1g-dev libjpeg-dev libtiff-dev liblua5.1-0-dev libsqlite3-dev libsndfile-dev libavformat-dev libswscale-dev libcurl4-openssl-dev libpcre3-dev libspeex-dev libspeexdsp-dev libedit-dev libtool libldns-dev libopus-dev libpq-dev
root@redhat-fs01:/usr/src# tar zxvf libks-1.8.2.tar.gz
root@redhat-fs01:/usr/src# cd libks-1.8.2
root@redhat-fs01:/usr/src/libks-1.8.2# cmake .
root@redhat-fs01:/usr/src/libks-1.8.2# make
root@redhat-fs01:/usr/src/libks-1.8.2# make install
root@redhat-fs01:/usr/src# tar zxvf sofia-sip-1.13.14.tar.gz
root@redhat-fs01:/usr/src# cd sofia-sip-1.13.14
root@redhat-fs01:/usr/src/sofia-sip-1.13.14# ./bootstrap.sh
root@redhat-fs01:/usr/src/sofia-sip-1.13.14# ./configure
root@redhat-fs01:/usr/src/sofia-sip-1.13.14# make
root@redhat-fs01:/usr/src/sofia-sip-1.13.14# make install
root@redhat-fs01:/usr/src# unzip spandsp-packages.zip
root@redhat-fs01:/usr/src# cd spandsp-packages
root@redhat-fs01:/usr/src/spandsp-packages# ./bootstrap.sh
root@redhat-fs01:/usr/src/spandsp-packages# ./configure
root@redhat-fs01:/usr/src/spandsp-packages# make
root@redhat-fs01:/usr/src/spandsp-packages# make install
root@redhat-fs01:/usr/src/spandsp-packages# export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:${PKG_CONFIG_PATH}
root@redhat-fs01:/usr/src/spandsp-packages# echo “export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:${PKG_CONFIG_PATH}” >> /etc/profile
root@redhat-fs01:/usr/src/spandsp-packages# ldconfig
root@redhat-fs01:/usr/src# tar zxvf signalwire-c-1.3.0.tar.gz
root@redhat-fs01:/usr/src# cd signalwire-c-1.3.0
root@redhat-fs01:/usr/src/signalwire-c-1.3.0# cmake .
root@redhat-fs01:/usr/src/signalwire-c-1.3.0# make
root@redhat-fs01:/usr/src/signalwire-c-1.3.0# make install
root@redhat-fs01:/usr/src# tar -zxvf freeswitch-1.10.7.-release.tar.gz
root@redhat-fs01:/usr/src# mv freeswitch-1.10.7.-release freeswitch-1.10.7
root@redhat-fs01:/usr/src# cd freeswitch-1.10.7
root@redhat-fs01:/usr/src/freeswitch-1.10.7]$ vim modules.conf
修改 #asr_tts/mod_unimrcp 为 asr_tts/mod_unimrcp
注释掉mod_av、mod_pgsql、mod_signalwire、mod_verto
root@redhat-fs01:/usr/src/freeswitch-1.10.7# ./rebootstrap.sh
root@redhat-fs01:/usr/src/freeswitch-1.10.7# ./configure
root@redhat-fs01:/usr/src/freeswitch-1.10.7# make
root@redhat-fs01:/usr/src/freeswitch-1.10.7# make install
root@redhat-fs01:/usr/src# tar -zxvf luarocks-3.9.2.tar.gz
root@redhat-fs01:/usr/src# cd luarocks-3.9.2
root@redhat-fs01:/usr/src/luarocks-3.9.2# ./configure
root@redhat-fs01:/usr/src/luarocks-3.9.2# make
root@redhat-fs01:/usr/src/luarocks-3.9.2# make install
root@redhat-fs01:/usr/src/luarocks-3.9.2# luarocks install luasec
root@redhat-fs01:/usr/src/luarocks-3.9.2# luarocks install luasocket
三、FreeSWITCH应用配置
3.1 acl权限配置
root@redhat-fs01:/usr/local/freeswitch# vim conf/autoload_configs/acl.conf.xml
#在<list name="domains" default="deny">列表最后面增加
<node type="allow" cidr="0.0.0.0/0"/>
3.2 5060等端口没有启动
root@redhat-fs01:/usr/local/freeswitch# vim conf/vars.xml
#修改如下:
<!-- <X-PRE-PROCESS cmd="stun-set" data="external_rtp_ip=stun:stun.freeswitch.org"/> -->
<X-PRE-PROCESS cmd="stun-set" data="external_rtp_ip=$${local_ip_v4}"/>
<!-- <X-PRE-PROCESS cmd="stun-set" data="external_sip_ip=stun:stun.freeswitch.org"/> -->
<X-PRE-PROCESS cmd="stun-set" data="external_sip_ip=$${local_ip_v4}"/>
3.3 软电话注册10秒后才提示接听
root@redhat-fs01:/usr/local/freeswitch# vim conf/dialplan/default.xml
#注释掉<condition field="${default_password}" expression="^1234$" break="never">里:
<!--<action application="sleep" data="10000"/>-->
3.4 ESL配置[Java ESL连接使用]
root@redhat-fs01:/usr/local/freeswitch# vim conf/autoload_configs/event_socket.conf.xml
#修改如下:
<param name="listen-ip" value="0.0.0.0"/>
<param name="apply-inbound-acl" value="domains"/>
3.5 有两个IP需要设置对外IP
root@redhat-fs01:/usr/local/freeswitch# vim conf/sip_profiles/external.xml
#设置"ext-rtp-ip"和"ext-sip-ip"从默认"auto-nat"值设置为对外的IP,这里为变量LOCAL_EIP
<param name="ext-rtp-ip" value="LOCAL_EIP"/>
<param name="ext-sip-ip" value="LOCAL_EIP"/>
3.6 设置每秒增加的会话数
root@redhat-fs01:/usr/local/freeswitch# vim conf/autoload_configs/switch.conf.xml
#修改如下:
<param name="sessions-per-second" value="1000"/>
3.7 配置CDR(呼叫详细记录)推送
root@redhat-fs01:/usr/local/freeswitch# vim conf/autoload_configs/xml_cdr.conf.xml
#修改如下:
<param name="url" value="http://xxxxxx/cdr"/>
四、制作FreeSWITCH镜像
4.1 调整镜像版本和启动容器
#导出容器快照
[yunyun@redhat-fs01 docker]$ sudo docker export -o fs-v1.10.7.tar b96100ab7468
#导入容器快照为镜像
[yunyun@redhat-fs01 docker]$ sudo docker import fs-v1.10.7.tar
#给镜像打标签
[yunyun@redhat-fs01 docker]$ sudo docker image tag 7975818d5e72 fs:v1.10.7
#保存镜像
[yunyun@redhat-fs01 docker]$ sudo docker image save fs:v1.10.7 -o fs-v1.10.7.tar
[yunyun@redhat-fs01 docker]$ sudo tar zcvf fs-v1.10.7.tar.gz fs-v1.10.7.tar
#加载镜像
[yunyun@redhat-fs01 docker]$ sudo docker load -i fs-v1.10.7.tar
#指定镜像启动容器运行
[yunyun@redhat-fs01 docker]$ sudo docker run –name fs -v /data:/data -v `pwd`/fs/log:/usr/local/freeswitch/log –network host -t -d fs:v1.10.7 /bin/bash
#进入容器
[yunyun@redhat-fs01 docker]$ sudo docker exec -it fs bash
root@redhat-fs01:/# cd /usr/local/freeswitch/bin/
root@redhat-fs01:/usr/local/freeswitch/bin# ./freeswitch -nc
root@redhat-fs01:/usr/local/bin# cat start.sh
sed -i 's/LOCAL_EIP/'”$LOCAL_EIP”'/g' /usr/local/freeswitch/conf/sip_profiles/external.xml
sed -i 's/LOCAL_EIP/'”$LOCAL_EIP”'/g' /usr/local/freeswitch/conf/mrcp_profiles/unimrcpserver-mrcp-v2.xml
cd /usr/local/freeswitch/bin
./freeswitch -nc
tail -f /dev/null[yunyun@redhat-fs01 ~]$ cat dockerfile
from fs:v1.10.7copy start.sh /usr/local/bin/start.sh
run chmod +x /usr/local/bin/start.shentrypoint [“sh”, “/usr/local/bin/start.sh”]
[yunyun@redhat-fs01 docker]$ sudo docker stop fs && sudo docker rm fs && sudo docker rmi fs:01
#指定构建名称标签
[yunyun@redhat-fs01 docker]$ sudo docker build -t fs:01 .
[yunyun@redhat-fs01 docker]$ sudo docker run –name fs -v /data:/data -v `pwd`/fs/log:/usr/local/freeswitch/log –network host -t -d fs:01 –entrypoint=/bin/bash /bin/bash
4.2 打包FreeSWITCH镜像
4.2.1 以第三方镜像为基础二次开发后运行打包镜像
#根据dockerfile构建镜像
[yunyun@redhat-fs01 ~]$ sudo docker build -t freeswitch:v1.10.7 .
[yunyun@redhat-fs01 ~]$ sudo docker run –name freeswitch -v /data:/data -v `pwd`/fs/log:/usr/local/freeswitch/log –network host -t -d freeswitch:v1.10.7 /bin/bash
[yunyun@redhat-fs01 ~]$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8392dbf00a31 freeswitch:v1.10.7 “sh /usr/local/bin/s…” 26 seconds ago Up 25 seconds freeswitch
[yunyun@redhat-fs01 docker]$ sudo docker export -o freeswitch-v1.10.7.tar 8392dbf00a31
[yunyun@redhat-fs01 docker]$ sudo docker import freeswitch-v1.10.7.tar
sha256:4bb077357d4a5187885ecf529a55f1b5dc7b738ed2fd5c05ee6d1d8fcec93d6d
[yunyun@redhat-fs01 docker]$ sudo docker image tag 4bb077357d4a freeswitch:v1.10.7
[yunyun@redhat-fs01 docker]$ sudo docker image save freeswitch:v1.10.7 -o freeswitch-v1.10.7.tar
[yunyun@redhat-fs01 docker]$ sudo tar zcvf freeswitch-v1.10.7.tar.gz freeswitch-v1.10.7.tar
4.2.2 在镜像基础上打包镜像(修改镜像信息)
[yunyun@redhat-fs01 docker]$ sudo docker build -t freeswitch:v1.10.7 .
[yunyun@redhat-fs01 docker]$ sudo docker image inspect freeswitch:v1.10.7
[yunyun@redhat-fs01 docker]$ sudo docker image save freeswitch:v1.10.7 -o freeswitch-v1.10.7.tar
[yunyun@redhat-fs01 docker]$ sudo tar zcvf freeswitch-v1.10.7.tar.gz freeswitch-v1.10.7.tar
4.2.3 通过容器创建新的镜像并推送仓库
[yunyun@redhat-fs01 ~]$ sudo docker exec -it freeswitch bash
[yunyun@redhat-fs01 ~]$ sudo docker ps -a
[yunyun@redhat-fs01 ~]$ sudo docker commit d7bf98d308c0 freeswitch:1.10.7.t1
[yunyun@redhat-fs01 ~]$ sudo docker tag freeswitch:1.10.7.t1 repos.yunyuncloud.com:443/yunyun-docker/test/freeswitch:1.10.7.1
[yunyun@redhat-fs01 ~]$ sudo docker push repos.yunyuncloud.com:443/yunyun-docker/test/freeswitch:1.10.7.1
4.2.4 推送镜像到docker仓库
[yunyun@redhat-fs01 ~]$ sudo docker login –username=yunyun repos.yunyuncloud.com:443
[yunyun@redhat-fs01 ~]$ sudo docker tag freeswitch:v1.10.7 repos.yunyuncloud.com:443/yunyun-docker/freeswitch:v1.10.7
[yunyun@redhat-fs01 ~]$ sudo docker push repos.yunyuncloud.com:443/yunyun-docker/freeswitch:v1.10.7
五、拉取docker镜像安装运行
sudo docker login –username=yunyun repos.yunyuncloud.com:443
sudo docker pull repos.yunyuncloud.com:443/yunyun-docker/test/freeswitch:1.10.7.1
sudo docker run –name freeswitch -v /data:/data -v `pwd`/freeswitch/log:/usr/local/freeswitch/log –network host -t -d repos.yunyuncloud.com:443/yunyun-docker/test/freeswitch:1.10.7.1 /bin/bash
六、注意事项
6.1 sip线路地址配置
#打包镜像阶段(区分测试生产)
/usr/local/freeswitch/conf/sip_profiles/external/
6.2 mrcp地址配置
#打包镜像阶段(区分测试生产)
/usr/local/freeswitch/conf/mrcp_profiles/unimrcpserver-mrcp-v2.xml
<param name=”server-ip” value=”xxxxxx” />
6.3 cdr地址配置
#打包镜像阶段(区分测试生产)
/usr/local/freeswitch/conf/autoload_configs/xml_cdr.conf.xml
<param name=”url” value=”http://xxxxxx/cdr”/>
6.4 LOCAL_EIP槽位参数要暴露出来
#打包镜像阶段
/usr/local/freeswitch/conf/mrcp_profiles/unimrcpserver-mrcp-v2.xml
<param name=”client-ext-ip” value=”LOCAL_EIP” />
<param name=”rtp-ext-ip” value=”LOCAL_EIP” />
/usr/local/freeswitch/conf/sip_profiles/external.xml
<param name=”ext-rtp-ip” value=”LOCAL_EIP”/>
<param name=”ext-sip-ip” value=”LOCAL_EIP”/>
6.5 启动命令注意nas挂载
#启动容器阶段
sudo docker run –name freeswitch –restart=always -e LOCAL_EIP=http://xxxxxx -v /data:/data -v `pwd`/freeswitch/log:/usr/local/freeswitch/log –network host -t -d http://repos.yunyuncloud.com:443/yunyun-docker/test/freeswitch:1.10.7.1 /bin/bash
6.6 启动命令注意给LOCAL_EIP赋值
#启动容器阶段


