
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 安装libkssudo 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-csudo 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-SIPsudo 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 安装SpanDSPsudo 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 ugrwX,o /usr/local/freeswitch/ sudo chmod -R urwx,grx /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] DescriptionFreeSWITCH open source softswitch Wantsnetwork-online.target Requiresnetwork.target local-fs.target Afternetwork.target network-online.target local-fs.target [Service] Typeforking PIDFile/usr/local/freeswitch/run/freeswitch.pid EnvironmentDAEMON_OPTS-nonat EnvironmentUSERfreeswitch EnvironmentGROUPfreeswitch 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} TimeoutSec45s Restartalways [Install] WantedBymulti-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 id1000 params param namepassword value1234/ /params /user使用软电话注册到FreeSWITCH服务器用户名1000密码12347. 常见问题解决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/lib7.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.xmlsettings param namemax-sessions value1000/ param namesessions-per-second value30/ param namemax-dtmf-duration value3000/ /settings8.2 日志配置调整日志级别/usr/local/freeswitch/conf/autoload_configs/console.conf.xmlconfiguration nameconsole.conf descriptionConsole Logger mappings map nameall valueinfo/ /mappings /configuration8.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.xmlX-PRE-PROCESS cmdset datadefault_passwordYourStrongPassword/9.2 限制访问IP编辑/usr/local/freeswitch/conf/autoload_configs/acl.conf.xmllist namedomains defaultdeny node typeallow domain$${domain}/ node typeallow cidr192.168.1.0/24/ /list9.3 启用TLS生成证书cd /usr/local/freeswitch/bin ./freeswitch -certgen配置TLSparam nametls valuetrue/ param nametls-bind-params valuetransporttls/ param nametls-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 userbackup-server:/backup/freeswitch/