1. 项目概述
FreeSWITCH是一款开源的软交换平台,广泛应用于VoIP通信、视频会议和即时消息系统。在Ubuntu 20.04 LTS上安装FreeSWITCH需要处理多个依赖关系和编译选项,这对新手来说可能是个挑战。本文将详细介绍从零开始安装FreeSWITCH 1.10.x的完整过程,包含我在实际部署中积累的经验技巧和常见问题解决方案。
2. 环境准备与依赖安装
2.1 系统更新与基础工具
首先确保系统是最新状态:
sudo apt update && sudo apt upgrade -y sudo apt install -y wget git vim2.2 安装编译依赖
FreeSWITCH需要大量开发库支持,以下是针对Ubuntu 20.04 LTS的完整依赖列表:
sudo apt install -y build-essential pkg-config uuid-dev zlib1g-dev libjpeg-dev \ libsqlite3-dev libcurl4-openssl-dev libpcre3-dev libspeexdsp-dev libldns-dev \ libedit-dev libtiff5-dev yasm libopus-dev libsndfile1-dev unzip libavformat-dev \ libswscale-dev libavresample-dev liblua5.2-dev liblua5.2-0 cmake libpq-dev \ unixodbc-dev autoconf automake ntpdate libxml2-dev libpq-dev libpq5 sngrep \ libflite1 flite-dev libssl-dev libncurses5-dev libtool-bin注意:如果计划使用TTS功能,需要额外安装flite开发包。数据库支持方面,默认使用SQLite,如需PostgreSQL支持需要安装libpq-dev。
3. 前置库安装
3.1 安装libks
sudo git clone -b v1.8.3 https://github.com/signalwire/libks.git /usr/local/src/libks cd /usr/local/src/libks sudo cmake . sudo make && sudo make install验证安装:
sudo ldconfig && ldconfig -p | grep libks3.2 安装signalwire-c
sudo git clone https://github.com/signalwire/signalwire-c.git /usr/local/src/signalwire-c cd /usr/local/src/signalwire-c sudo cmake . sudo make && sudo make install3.3 安装Sofia-SIP
sudo git clone https://github.com/freeswitch/sofia-sip.git /usr/local/src/sofia-sip cd /usr/local/src/sofia-sip sudo ./bootstrap.sh sudo ./configure sudo make && sudo make install3.4 安装SpanDSP
sudo git clone https://github.com/freeswitch/spandsp.git /usr/local/src/spandsp cd /usr/local/src/spandsp sudo git checkout -b finecode20230705 0d2e6ac65e0e8f53d652665a743015a88bf048d4 sudo ./bootstrap.sh sudo ./configure sudo make && sudo make install经验分享:SpanDSP的特定commit(0d2e6ac)是解决编译错误的关键,新版本可能不兼容FreeSWITCH 1.10.x。
4. FreeSWITCH编译安装
4.1 下载和解压源码
sudo wget -c https://files.freeswitch.org/releases/freeswitch/freeswitch-1.10.7.-release.tar.gz -P /usr/local/src cd /usr/local/src sudo tar -zxvf freeswitch-1.10.7.-release.tar.gz cd freeswitch-1.10.7.-release4.2 配置编译选项
基础配置:
sudo ./configure如需数据库支持:
sudo ./configure --enable-core-odbc-support --enable-core-pgsql-support4.3 编译与安装
sudo make sudo make install sudo make cd-sounds-install sudo make cd-moh-install避坑指南:如果编译过程中出现mod_spandsp错误,尝试重新安装指定版本的SpanDSP,然后clean后重新编译。
5. 系统集成配置
5.1 创建系统用户
sudo groupadd freeswitch sudo adduser --quiet --system --home /usr/local/freeswitch \ --gecos 'FreeSWITCH open source softswitch' \ --ingroup freeswitch freeswitch --disabled-password sudo chown -R freeswitch:freeswitch /usr/local/freeswitch/ sudo chmod -R ug=rwX,o= /usr/local/freeswitch/ sudo chmod -R u=rwx,g=rx /usr/local/freeswitch/bin/*5.2 创建符号链接
sudo ln -s /usr/local/freeswitch/conf /etc/freeswitch sudo ln -s /usr/local/freeswitch/bin/fs_cli /usr/bin/fs_cli sudo ln -s /usr/local/freeswitch/bin/freeswitch /usr/sbin/freeswitch5.3 配置systemd服务
创建服务文件/etc/systemd/system/freeswitch.service:
[Unit] Description=FreeSWITCH open source softswitch Wants=network-online.target Requires=network.target local-fs.target After=network.target network-online.target local-fs.target [Service] Type=forking PIDFile=/usr/local/freeswitch/run/freeswitch.pid Environment="DAEMON_OPTS=-nonat" Environment="USER=freeswitch" Environment="GROUP=freeswitch" EnvironmentFile=-/etc/default/freeswitch ExecStartPre=/bin/chown -R ${USER}:${GROUP} /usr/local/freeswitch ExecStart=/usr/local/freeswitch/bin/freeswitch -u ${USER} -g ${GROUP} -ncwait ${DAEMON_OPTS} TimeoutSec=45s Restart=always [Install] WantedBy=multi-user.target启用并启动服务:
sudo systemctl daemon-reload sudo systemctl enable freeswitch sudo systemctl start freeswitch6. 验证与测试
6.1 检查服务状态
sudo systemctl status freeswitch6.2 使用CLI交互
fs_cli在CLI中运行:
status sofia status6.3 测试基本功能
注册一个测试分机:
- 编辑
/usr/local/freeswitch/conf/directory/default/1000.xml - 确保有以下内容:
<user id="1000"> <params> <param name="password" value="1234"/> </params> </user>- 使用软电话注册到FreeSWITCH服务器,用户名1000,密码1234
7. 常见问题解决
7.1 mod_sofia加载失败
错误现象:
Error Loading module /usr/local/freeswitch/mod/mod_sofia.so: undefined symbol: tptag_socket_keepalive解决方案:
- 确认sofia-sip库已正确安装
- 重新编译sofia-sip和FreeSWITCH
- 检查LD_LIBRARY_PATH是否包含/usr/local/lib
7.2 SpanDSP编译错误
典型错误:
mod_spandsp_dsp.c:159:10: error: 'V18_MODE_5BIT_4545' undeclared解决方案:
cd /usr/local/src/spandsp git reset --hard 0d2e6ac65e0e8f53d652665a743015a88bf048d4 ./bootstrap.sh ./configure make make install7.3 音频文件问题
如果遇到音频播放问题:
sudo make cd-sounds-install sudo make cd-moh-install8. 性能优化建议
8.1 配置文件优化
编辑/usr/local/freeswitch/conf/autoload_configs/switch.conf.xml:
<settings> <param name="max-sessions" value="1000"/> <param name="sessions-per-second" value="30"/> <param name="max-dtmf-duration" value="3000"/> </settings>8.2 日志配置
调整日志级别/usr/local/freeswitch/conf/autoload_configs/console.conf.xml:
<configuration name="console.conf" description="Console Logger"> <mappings> <map name="all" value="info"/> </mappings> </configuration>8.3 网络优化
对于高并发场景,调整内核参数:
echo 'net.core.somaxconn = 2048' | sudo tee -a /etc/sysctl.conf echo 'net.ipv4.tcp_max_syn_backlog = 2048' | sudo tee -a /etc/sysctl.conf sudo sysctl -p9. 安全加固措施
9.1 修改默认密码
编辑/usr/local/freeswitch/conf/vars.xml:
<X-PRE-PROCESS cmd="set" data="default_password=YourStrongPassword"/>9.2 限制访问IP
编辑/usr/local/freeswitch/conf/autoload_configs/acl.conf.xml:
<list name="domains" default="deny"> <node type="allow" domain="$${domain}"/> <node type="allow" cidr="192.168.1.0/24"/> </list>9.3 启用TLS
生成证书:
cd /usr/local/freeswitch/bin ./freeswitch -certgen配置TLS:
<param name="tls" value="true"/> <param name="tls-bind-params" value="transport=tls"/> <param name="tls-cert-dir" value="/usr/local/freeswitch/certs"/>10. 维护与监控
10.1 日志轮转
创建/etc/logrotate.d/freeswitch:
/usr/local/freeswitch/log/freeswitch.log { daily rotate 30 compress delaycompress missingok notifempty create 644 freeswitch freeswitch postrotate /usr/bin/killall -HUP freeswitch endscript }10.2 监控脚本示例
创建监控脚本/usr/local/bin/check_freeswitch.sh:
#!/bin/bash FS_PID=$(pgrep -f "freeswitch -ncwait") if [ -z "$FS_PID" ]; then systemctl restart freeswitch echo "$(date) - FreeSWITCH restarted" >> /var/log/freeswitch_monitor.log fi添加到cron:
(crontab -l 2>/dev/null; echo "*/5 * * * * /usr/local/bin/check_freeswitch.sh") | crontab -10.3 备份策略
建议定期备份以下目录:
- /usr/local/freeswitch/conf
- /usr/local/freeswitch/scripts
- /usr/local/freeswitch/storage
可以使用rsync进行增量备份:
rsync -avz /usr/local/freeswitch/conf user@backup-server:/backup/freeswitch/