388 lines
11 KiB
Markdown
388 lines
11 KiB
Markdown
## CentOS7.9(2009)安装freeswitch1.10
|
||
|
||
---
|
||
|
||
> 2022年6月,这个文档已经失效,按照这个文档操作将不会成功,转至Debian11编译安装FreeSWITCH1.10,亲测成功。
|
||
|
||
### 安装centos7.9(2009)操作系统
|
||
|
||
略
|
||
|
||
### 系统更新和安装依赖
|
||
|
||
```bash
|
||
yum update -y
|
||
# 安装fs依赖
|
||
yum install -y http://files.freeswitch.org/freeswitch-release-1-6.noarch.rpm epel-release
|
||
# 安装ffmpeg需要
|
||
rpm --import http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.ro
|
||
rpm -Uvh http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-1.el7.nux.noarch.rpm
|
||
|
||
yum install -y yum-utils git gcc gcc-c++ automake autoconf libtool libtiff-devel libjpeg-devel openssl-devel vim
|
||
|
||
yum install -y alsa-lib-devel bison broadvoice-devel bzip2 curl-devel libdb4-devel e2fsprogs-devel erlang flite-devel g722_1-devel gdbm-devel gnutls-devel ilbc2-devel ldns-devel libcodec2-devel libcurl-devel libedit-devel libidn-devel libmemcached-devel libogg-devel libsilk-devel libsndfile-devel libtheora-devel libuuid-devel libvorbis-devel libxml2-devel lua-devel lzo-devel ncurses-devel net-snmp-devel opus-devel pcre-devel perl perl-ExtUtils-Embed pkgconfig portaudio-devel postgresql-devel python-devel python-devel soundtouch-devel speex-devel sqlite-devel unbound-devel unixODBC-devel which yasm zlib-devel libshout-devel libmpg123-devel lame-devel rpm-build libX11-devel libyuv-devel swig wget ffmpeg ffmpeg-devel
|
||
|
||
# 单独下载spandsp源码
|
||
cd /usr/local/src
|
||
git clone https://github.com/freeswitch/spandsp.git
|
||
cd spandsp
|
||
./bootstrap.sh
|
||
./configure
|
||
make
|
||
make install
|
||
ldconfig
|
||
|
||
# 单独下载sofia-sip(SIP协议栈)源码
|
||
cd /usr/local/src
|
||
git clone https://github.com/freeswitch/sofia-sip.git
|
||
cd sofia-sip
|
||
./bootstrap.sh
|
||
./configure
|
||
make
|
||
make install
|
||
ldconfig
|
||
cd ..
|
||
|
||
# 编译安装cmake 3.7.2
|
||
cd /usr/local/src
|
||
wget https://cmake.org/files/v3.7/cmake-3.7.2.tar.gz
|
||
tar zxvf cmake-3.7.2.tar.gz
|
||
cd cmake-3.7.2
|
||
./bootstrap
|
||
gmake
|
||
gmake install
|
||
|
||
# 安装libatomic
|
||
yum install -y libatomic uuid-devel libuuid-devel
|
||
|
||
# 单独下载libks源码(需要cmake 3.7.2以上版本)
|
||
cd /usr/local/src
|
||
git clone https://github.com/signalwire/libks.git
|
||
cd libks
|
||
cmake .
|
||
make
|
||
make install
|
||
|
||
# 单独安装opus-dev(否则在freeswitch里make时可能会报You must install libopus-dev to build mod_opus)
|
||
cd /usr/local/src
|
||
wget https://archive.mozilla.org/pub/opus/opus-1.3.1.tar.gz
|
||
tar zxvf opus-1.3.1.tar.gz
|
||
cd opus-1.3.1
|
||
./configure
|
||
make
|
||
make install
|
||
|
||
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
|
||
|
||
# 安装python组件
|
||
curl https://bootstrap.pypa.io/pip/2.7/get-pip.py --output get-pip-2.7.py
|
||
python get-pip-2.7.py -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
|
||
#这两个命令用完之后使用pip install 后面要加上
|
||
-i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
|
||
# 验证pip是否安装成功可以用 `pip --version`
|
||
# pip安装python组件
|
||
pip install pydub -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
|
||
pip install python-ESL -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
|
||
pip install pika -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
|
||
pip install DBUtils==2.0.3 -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
|
||
# pip install dbutils (python 2.7 is not support dbutils炸裂)
|
||
```
|
||
|
||
### 开始安装
|
||
|
||
```bash
|
||
cd /usr/local/src
|
||
git clone -b v1.10 https://github.com/signalwire/freeswitch.git freeswitch
|
||
# 如果github连接不顺畅的话,可以试试码云镜像仓库(更新慢1天)
|
||
# git clone -b v1.10 https://gitee.com/mirrors/FreeSWITCH.git freeswitch
|
||
cd freeswitch
|
||
./bootstrap.sh -j
|
||
```
|
||
|
||
- 编辑modules.conf文件
|
||
|
||
```bash
|
||
vim modules
|
||
```
|
||
|
||
根据需要打开或关闭注释
|
||
|
||
```conf
|
||
formats/mod_shout
|
||
languages/mod_python
|
||
#event_handlers/mod_cdr_pg_csv
|
||
asr_tts/mod_unimrcp
|
||
#开启freeswitch自带的http状态界面
|
||
xml_int/mod_xml_rpc
|
||
```
|
||
|
||
如果需要使用mod_xml_curl的话
|
||
|
||
```conf
|
||
xml_int/mod_xml_curl
|
||
```
|
||
|
||
给不需要的模块加上注释
|
||
|
||
```conf
|
||
#applications/mod_av
|
||
#applications/mod_signalwire
|
||
```
|
||
|
||
然后保存退出
|
||
|
||
- 开始编译安装
|
||
|
||
```bash
|
||
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
|
||
./configure --with-python=/usr/bin/python2.7 --with-lua=/usr/bin/lua --enable-core-pgsql-support
|
||
# 如果在spandsp位置报错,可能是忘export那一句
|
||
make
|
||
#make mod_cdr_pg_csv-install
|
||
make mod_unimrcp-install
|
||
# 如果需要xml_curl模块的话
|
||
make mod_xml_curl-install
|
||
make mod_xml_rpc-install
|
||
make install
|
||
```
|
||
|
||
- 安装音频文件(英文)
|
||
|
||
```bash
|
||
make cd-sounds-install
|
||
make cd-moh-install
|
||
make uhd-sounds-install
|
||
make uhd-moh-install
|
||
make hd-sounds-install
|
||
make hd-moh-install
|
||
make sounds-install
|
||
make moh-install
|
||
|
||
# make moh-install && make sounds-install && make hd-moh-install && make hd-sounds-install && make uhd-moh-install && make uhd-sounds-install && make cd-moh-install && make cd-sounds-install
|
||
```
|
||
|
||
- 建立软连接
|
||
|
||
```bash
|
||
sudo ln -sf /usr/local/freeswitch/bin/freeswitch /usr/local/bin/
|
||
sudo ln -sf /usr/local/freeswitch/bin/fs_cli /usr/local/bin/
|
||
```
|
||
|
||
- 配置mod
|
||
|
||
```bash
|
||
sudo vim /usr/local/freeswitch/conf/autoload_configs/modules.conf.xml
|
||
```
|
||
|
||
在前3行开启
|
||
|
||
```xml
|
||
<load module="mod_console"/>
|
||
<load module="mod_logfile"/>
|
||
<load module="mod_xml_curl"/>
|
||
```
|
||
|
||
打开注释
|
||
|
||
```xml
|
||
<load module="mod_python"/>
|
||
<load module="mod_shout"/>
|
||
<load module="mod_xml_rpc"/>
|
||
```
|
||
|
||
添加配置
|
||
|
||
```xml
|
||
<!-- <load module="mod_cdr_pg_csv"/> -->
|
||
<load module="mod_unimrcp"/>
|
||
<!--<load module="mod_vad"/>-->
|
||
```
|
||
|
||
注释掉其他不需要的模块
|
||
|
||
```xml
|
||
<!-- <load module="mod_av"/> -->
|
||
<!-- <load module="mod_signalwire"/> -->
|
||
```
|
||
|
||
- 配置acl白名单
|
||
|
||
```bash
|
||
vim /usr/local/freeswitch/conf/autoload_configs/acl.conf.xml
|
||
```
|
||
|
||
根据自己网络的实际情况进行配置(照抄大概率无效)
|
||
|
||
```xml
|
||
<list name="domains" default="deny">
|
||
<!-- domain= is special it scans the domain from the directory to build t$ -->
|
||
<node type="allow" domain="$${domain}"/>
|
||
<!-- use cidr= if you wish to allow ip ranges to this domains acl. -->
|
||
<!-- <node type="allow" cidr="192.168.0.0/24"/> -->
|
||
<node type="allow" cidr="192.168.0.112/24"/>
|
||
<node type="allow" cidr="192.168.0.50/24"/>
|
||
<!-- ==================这里添加 本机ip 127.0.0.1 ======================== -->
|
||
<!-- ==================这里添加 本机内网ip ======================== -->
|
||
<!-- ==================这里添加 本机外网ip ======================== -->
|
||
<!-- ==================这里添加 web内网ip 192.168.2.173======================== -->
|
||
<!-- ==================这里添加 web外网ip 39.107.68.127======================== -->
|
||
<!-- ==================这里添加 runcall 内外网Ip======================== -->
|
||
<node type="allow" cidr="192.168.2.178/24"/>
|
||
<node type="allow" cidr="39.107.70.84/24"/>
|
||
</list>
|
||
```
|
||
|
||
- 配置ESL
|
||
|
||
```bash
|
||
vim /usr/local/freeswitch/conf/autoload_configs/event_socket.conf.xml
|
||
```
|
||
|
||
```xml
|
||
<configuration name="event_socket.conf" description="Socket Client">
|
||
<settings>
|
||
<param name="nat-map" value="false"/>
|
||
<!--ip 统一为0.0.0.0-->
|
||
<param name="listen-ip" value="0.0.0.0"/>
|
||
<!-- 端口号 默认8021 -->
|
||
<param name="listen-port" value="8021"/>
|
||
<!-- 密码统一Aicyber -->
|
||
<param name="password" value="Aicyber"/>
|
||
<!-- 允许acl白名单内的IP 访问 -->
|
||
<param name="apply-inbound-acl" value="domains"/>
|
||
<!--<param name="apply-inbound-acl" value="loopback.auto"/>-->
|
||
<!--<param name="stop-on-bind-error" value="true"/>-->
|
||
</settings>
|
||
</configuration>
|
||
```
|
||
|
||
- 适配WebRTC(JSSIP/SIPJS)
|
||
|
||
在`/usr/local/freeswitch/conf/sip_profiles/internal.xml`中添加或修改下面这些配置
|
||
|
||
```xml
|
||
<param name="apply-candidate-acl" value="rfc1918.auto"/>
|
||
<param name="apply-candidate-acl" value="localnet.auto"/>
|
||
<param name="apply-candidate-acl" value="candidate"/>
|
||
```
|
||
|
||
```xml
|
||
<!-- 取消注释这一行(让前端可以得到早期媒体) -->
|
||
<param name="enable-100rel" value="true"/>
|
||
```
|
||
|
||
- 适配特定终端(以云翌通安卓SDK为例)
|
||
|
||
在`/usr/local/freeswitch/conf/sip_profiles/internal.xml`中添加下面这些配置
|
||
|
||
```xml
|
||
<param name="user-agent-string" value="YunEasy"/>
|
||
```
|
||
|
||
- 拨号计划规则
|
||
|
||
在`/usr/local/freeswitch/conf/sip_profiles/internal.xml`中修改下面这些配置
|
||
|
||
```xml
|
||
<!-- 默认是public -->
|
||
<param name="context" value="default"/>
|
||
```
|
||
|
||
### 安全配置
|
||
|
||
- 配置端口
|
||
|
||
在`/usr/local/freeswitch/conf/vars.xml`文件中:
|
||
|
||
```xml
|
||
<!-- sip端口:终端通过tcp协议连接到这个端口,默认5060 -->
|
||
<X-PRE-PROCESS cmd="set" data="internal_sip_port=5060"/>
|
||
<!-- tls端口:终端通过tls协议连接到这个端口,默认5061 -->
|
||
<X-PRE-PROCESS cmd="set" data="internal_tls_port=5061"/>
|
||
```
|
||
|
||
```xml
|
||
<!-- 把原来的stun协议的地址改成下面的内容 -->
|
||
<X-PRE-PROCESS cmd="stun-set" data="external_rtp_ip=xxx.xxx.xxx.xxx"/>
|
||
<X-PRE-PROCESS cmd="stun-set" data="external_sip_ip=*.*.*.*"/>
|
||
```
|
||
|
||
在`/usr/local/freeswitch/conf/sip_profiles/internal.xml`文件中:
|
||
|
||
```xml
|
||
<!-- ws端口:通过ws协议使用webrtc时需要连接到这个端口,默认5066 -->
|
||
<param name="ws-binding" value=":5066"/>
|
||
<!-- wss端口:通过wss协议使用webrtc时需要连接到这个端口,默认7443 -->
|
||
<param name="wss-binding" value=":7443"/>
|
||
```
|
||
|
||
- 默认密码
|
||
|
||
在`/usr/local/freeswitch/conf/vars.xml`文件中:
|
||
|
||
```xml
|
||
<!-- 初始的1000~1019分机使用的默认密码,建议修改 -->
|
||
<X-PRE-PROCESS cmd="set" data="default_password=1234"/>
|
||
```
|
||
|
||
- 配置防火墙
|
||
|
||
```bash
|
||
# 开放sip端口tcp协议
|
||
sudo firewall-cmd --permanent --add-port=5060/tcp
|
||
# 开放sip端口udp协议
|
||
sudo firewall-cmd --permanent --add-port=5060/udp
|
||
# 开放ws端口
|
||
sudo firewall-cmd --permanent --add-port=5066/tcp
|
||
# 开放wss端口
|
||
sudo firewall-cmd --permanent --add-port=7443/tcp
|
||
# 开放rtp端口(范围)
|
||
sudo firewall-cmd --permanent --add-port=16384-32768/udp
|
||
# 让防火墙配置生效
|
||
sudo firewall-cmd --reload
|
||
```
|
||
|
||
- 参考资料
|
||
|
||
|FireWall Ports|Network Protocol|Application Protocol|Description|
|
||
|---|---|---|---|
|
||
|1719|UDP|H.323|Gatekeeper RAS port|
|
||
|1720|TCP|H.323|Call Signaling|
|
||
|3478|UDP|STUN service|Used for NAT traversal|
|
||
|3479|UDP|STUN service|Used for NAT traversal|
|
||
|5002|TCP|MLP|protocol server|
|
||
|5003|UDP| |Neighborhood service|
|
||
|5060|UDP & TCP|SIP UAS|Used for SIP signaling (Standard SIP Port, for default Internal Profile)|
|
||
|5070|UDP & TCP|SIP UAS|Used for SIP signaling (For default "NAT" Profile)|
|
||
|5080|UDP & TCP|SIP UAS|Used for SIP signaling (For default "External" Profile)|
|
||
|8021|TCP|ESL|Used for mod_event_socket *|
|
||
|16384-32768|UDP|RTP/ RTCP multimedia streaming|Used for audio/video data in SIP and other protocols|
|
||
|5066|TCP|Websocket|Used for WebRTC|
|
||
|7443|TCP|Websocket|Used for WebRTC|
|
||
|
||
### 效率
|
||
|
||
- 关闭ipv6
|
||
|
||
在`/usr/local/freeswitch/conf/sip_profiles/`目录下
|
||
|
||
```bash
|
||
cd /usr/local/freeswitch/conf/sip_profiles
|
||
mv internal-ipv6.xml internal-ipv6.xml.removed
|
||
mv external-ipv6.xml external-ipv6.xml.removed
|
||
```
|
||
|
||
### 启动
|
||
|
||
- 后台快速启动
|
||
|
||
```bash
|
||
freeswitch -nc -nonat
|
||
```
|
||
|
||
- 控制台启动(退出即关闭服务)
|
||
|
||
```bash
|
||
freeswitch
|
||
```
|