尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

FreeSWITCH在CentOS与Debian上的部署与优化指南

FreeSWITCH在CentOS与Debian上的部署与优化指南 1. 环境准备与系统选择在开始搭建FreeSWITCH之前选择合适的操作系统环境至关重要。作为一款跨平台的通信服务器软件FreeSWITCH在CentOS和Debian两大主流Linux发行版上都有良好的支持。我曾在生产环境中多次部署过这两个系统下的FreeSWITCH实测下来各有优劣。1.1 CentOS与Debian的特性对比CentOS特别是7.x版本以其稳定性著称适合需要长期运行的服务。但需要注意的是CentOS 8已停止维护而CentOS Stream的更新策略与传统的RHEL兼容版本有所不同。如果你选择CentOS建议使用7.9版本这是目前最稳定的选择。Debian 12Bookworm则提供了更新的软件包和更好的硬件支持。我在最近的项目中发现Debian 12对新型网卡和存储设备的兼容性更好特别是在虚拟化环境中表现优异。不过Debian的默认防火墙配置与CentOS有所不同这点需要注意。重要提示无论选择哪个系统都建议使用最小化安装Minimal Install这样可以减少不必要的软件包和潜在的安全风险。1.2 系统初始化配置安装完基础系统后有几项关键配置需要完成网络配置CentOS 7默认使用NetworkManager而Debian使用传统的ifupdown。如果你习惯手动配置网络可以禁用NetworkManagersystemctl stop NetworkManager systemctl disable NetworkManager静态IP配置示例CentOSnmcli con mod eth0 ipv4.addresses 192.168.1.100/24 nmcli con mod eth0 ipv4.gateway 192.168.1.1 nmcli con mod eth0 ipv4.dns 8.8.8.8 8.8.4.4 nmcli con mod eth0 ipv4.method manual nmcli con up eth0软件源更新CentOS 7yum install -y epel-release yum update -yDebian 12apt update apt upgrade -y基础工具安装# CentOS yum install -y wget curl vim git net-tools # Debian apt install -y wget curl vim git net-tools1.3 磁盘空间管理FreeSWITCH运行过程中会产生大量日志和录音文件因此需要特别注意磁盘空间分配。我遇到过多次因为磁盘空间不足导致服务异常的情况。检查磁盘使用情况df -h du -sh /var/*如果发现du和df显示的空间差异很大常见于文件被删除但进程仍占用的情况可以尝试lsof | grep deleted # 查看被删除但仍被占用的文件 service freeswitch restart # 重启服务释放空间对于新安装的系统建议为/var分区分配至少50GB空间如果是生产环境建议100GB以上。2. FreeSWITCH依赖安装FreeSWITCH作为一款功能强大的通信平台依赖众多开源库和工具。正确的依赖安装是后续编译和运行的基础。2.1 基础编译环境准备首先需要安装编译工具链和开发库# CentOS yum groupinstall -y Development Tools yum install -y yum-utils rpmdevtools # Debian apt install -y build-essential devscripts2.2 音频/视频相关依赖FreeSWITCH的核心功能依赖于这些音频/视频库# CentOS yum install -y libogg-devel libvorbis-devel speex-devel libcurl-devel \ libtiff-devel libjpeg-devel opus-devel libsndfile-devel # Debian apt install -y libogg-dev libvorbis-dev libspeex-dev libcurl4-openssl-dev \ libtiff5-dev libjpeg-dev libopus-dev libsndfile1-dev2.3 数据库支持FreeSWITCH支持多种数据库后端我推荐使用PostgreSQL# CentOS yum install -y postgresql-devel # Debian apt install -y libpq-dev如果确实需要使用MySQL虽然不推荐可以安装# CentOS yum install -y mysql-devel # Debian apt install -y libmysqlclient-dev2.4 其他关键依赖这些库对FreeSWITCH的高级功能至关重要# CentOS yum install -y libedit-devel sqlite-devel pcre-devel ldns-devel \ libuuid-devel libsrtp-devel libks-devel # Debian apt install -y libedit-dev libsqlite3-dev libpcre3-dev libldns-dev \ uuid-dev libsrtp2-dev libks-dev经验之谈在Debian上安装时可能会遇到libks-dev包不可用的情况。这时可以从源代码编译安装git clone https://github.com/signalwire/libks cd libks cmake . make make install3. FreeSWITCH源码编译安装虽然有些发行版提供了FreeSWITCH的二进制包但从源码编译可以获得最新功能和对特定硬件的优化。3.1 获取源代码建议从官方Git仓库获取最新稳定版git clone https://github.com/signalwire/freeswitch.git cd freeswitch git checkout v1.10.7 # 使用稳定版本3.2 配置编译选项FreeSWITCH的配置非常灵活以下是我推荐的配置参数./bootstrap.sh -j ./configure \ --enable-core-pgsql-support \ --enable-zrtp \ --enable-portable-binary \ --enable-system-libyuv \ --enable-system-libvpx \ --enable-system-libswscale \ --enable-system-libavresample \ --enable-system-libavformat \ --enable-system-libavcodec \ --enable-system-libavutil参数说明--enable-core-pgsql-support启用PostgreSQL核心支持--enable-zrtp启用ZRTP加密支持--enable-portable-binary生成可移植的二进制文件其他--enable-system-*选项使用系统已安装的库而非内置版本3.3 编译与安装配置完成后开始编译make -j$(nproc) # 使用所有CPU核心加速编译 make install make cd-sounds-install # 安装默认语音提示 make cd-moh-install # 安装默认音乐保持音编译过程可能需要30分钟到2小时不等取决于硬件性能。我曾在一台4核8G的虚拟机上编译大约需要45分钟。3.4 初始化数据库FreeSWITCH需要使用数据库存储配置和CDR记录# 创建数据库用户和数据库 sudo -u postgres psql -c CREATE USER freeswitch WITH PASSWORD yourpassword; sudo -u postgres psql -c CREATE DATABASE freeswitch WITH OWNER freeswitch ENCODING UTF8; # 导入初始表结构 psql -U freeswitch -d freeswitch -h 127.0.0.1 -f /usr/local/freeswitch/share/freeswitch/sql/pgsql/schema.sql4. FreeSWITCH配置与优化安装完成后需要进行细致的配置才能发挥FreeSWITCH的全部潜力。4.1 基础配置文件调整主要的配置文件位于/usr/local/freeswitch/conf/目录vars.xml- 设置全局变量X-PRE-PROCESS cmdset datadomainyourdomain.com/ X-PRE-PROCESS cmdset dataexternal_rtp_ipstun:stun.yourdomain.com/ X-PRE-PROCESS cmdset dataexternal_sip_ipstun:stun.yourdomain.com/autoload_configs/modules.conf.xml- 加载模块load modulemod_sofia/ load modulemod_loopback/ load modulemod_commands/ !-- 生产环境建议禁用不必要的模块 --4.2 SIP配置文件SIP是FreeSWITCH的核心协议配置在sofia.conf.xmlprofile nameexternal gateways gateway nameyourprovider param nameusername valueyourusername/ param namepassword valueyourpassword/ param nameproxy valuesip.yourprovider.com/ param nameregister valuetrue/ /gateway /gateways /profile4.3 拨号计划配置拨号计划定义呼叫路由逻辑位于dialplan/default.xmlextension nameLocal_Extension condition fielddestination_number expression^10[01][0-9]$ action applicationset datadialed_extension$1/ action applicationbridge datauser/${dialed_extension}${domain}/ /condition /extension4.4 性能优化建议根据我的经验这些优化可以显著提升FreeSWITCH性能调整线程池大小!-- in sofia.conf.xml -- param namertp-timer-name valuesoft/ param nameenable-timer valuefalse/日志级别调整!-- in freeswitch.xml -- param namelog-level valuenotice/内存管理# 增大系统文件描述符限制 echo * soft nofile 65536 /etc/security/limits.conf echo * hard nofile 65536 /etc/security/limits.conf5. 系统集成与管理FreeSWITCH安装配置完成后还需要考虑系统集成和日常管理问题。5.1 系统服务配置为了让FreeSWITCH随系统启动需要创建systemd服务文件cat /etc/systemd/system/freeswitch.service EOF [Unit] DescriptionFreeSWITCH Aftersyslog.target network.target postgresql.service [Service] Typeforking PIDFile/usr/local/freeswitch/run/freeswitch.pid ExecStart/usr/local/freeswitch/bin/freeswitch -nc -nonat ExecStop/usr/local/freeswitch/bin/freeswitch -stop TimeoutSec45s Restartalways Userfreeswitch Groupdaemon LimitCOREinfinity LimitNOFILE100000 LimitNPROC60000 LimitSTACK250000 LimitRTPRIOinfinity LimitRTTIMEinfinity [Install] WantedBymulti-user.target EOF systemctl daemon-reload systemctl enable freeswitch systemctl start freeswitch5.2 监控与维护日志监控tail -f /usr/local/freeswitch/log/freeswitch.logCDR记录 确保CDR呼叫详细记录配置正确!-- in autoload_configs/cdr_pgsql.conf.xml -- param namedb-info valuehost127.0.0.1 dbnamefreeswitch userfreeswitch passwordyourpassword/定期备份# 备份配置 tar czvf freeswitch_conf_backup_$(date %Y%m%d).tar.gz /usr/local/freeswitch/conf # 备份数据库 pg_dump -U freeswitch -h 127.0.0.1 freeswitch freeswitch_db_$(date %Y%m%d).sql5.3 常见问题排查端口冲突netstat -tulnp | grep -E 5060|5080|16384-32768音频问题 如果遇到音频问题检查fs_cli -x show codec注册失败 检查SIP注册状态fs_cli -x sofia status profile external6. 安全加固建议作为通信服务器安全配置至关重要。以下是我在生产环境中总结的安全实践。6.1 网络层安全防火墙配置# CentOS firewall-cmd --permanent --add-port5060/tcp firewall-cmd --permanent --add-port5060/udp firewall-cmd --permanent --add-port5080/tcp firewall-cmd --permanent --add-port5080/udp firewall-cmd --permanent --add-port16384-32768/udp firewall-cmd --reload # Debian ufw allow 5060/tcp ufw allow 5060/udp ufw allow 5080/tcp ufw allow 5080/udp ufw allow 16384-32768/udp ufw enableSIP安全配置!-- in sofia.conf.xml -- param nameapply-nat-acl valuerfc1918.auto/ param nameapply-inbound-acl valuedomains/6.2 认证与加密强密码策略!-- in vars.xml -- X-PRE-PROCESS cmdset datadefault_passwordComplexPssw0rd!2023/TLS加密# 生成自签名证书 cd /usr/local/freeswitch/certs openssl req -x509 -newkey rsa:4096 -keyout tls.key -out tls.crt -days 365 -nodesSRTP加密!-- in sofia.conf.xml -- param namesip-tls valuetrue/ param nametls-only valuefalse/6.3 系统级安全专用用户运行useradd -r -d /usr/local/freeswitch -M -s /bin/false freeswitch chown -R freeswitch:daemon /usr/local/freeswitch文件权限控制chmod 750 /usr/local/freeswitch/bin/freeswitch chmod 640 /usr/local/freeswitch/conf/*.xml定期更新# CentOS yum update --security -y # Debian apt update apt upgrade --only-upgrade security -y7. 高级功能扩展基础服务运行稳定后可以考虑扩展FreeSWITCH的高级功能。7.1 视频通话支持安装视频相关依赖# CentOS yum install -y libyuv-devel libvpx-devel ffmpeg-devel # Debian apt install -y libyuv-dev libvpx-dev libavcodec-dev重新编译FreeSWITCH时启用视频支持./configure --enable-core-video-support make make install配置视频编解码器!-- in vars.xml -- X-PRE-PROCESS cmdset dataglobal_codec_prefsVP8,H264,OPUS,G722,PCMU,PCMA/ X-PRE-PROCESS cmdset dataoutbound_codec_prefsVP8,H264,OPUS,G722,PCMU,PCMA/7.2 与数据库深度集成用户存储在数据库!-- in directory/default.xml -- user id1000 params param namepassword value$${default_password}/ /params variables variable nameuser_context valuedefault/ /variables /user使用ODBC连接# CentOS yum install -y unixODBC-devel postgresql-odbc # Debian apt install -y unixodbc-dev odbc-postgresql7.3 与WebRTC集成安装必要的Node.js组件curl -sL https://deb.nodesource.com/setup_16.x | bash - apt install -y nodejs npm install -g signalwire-web配置WebSocket支持!-- in sofia.conf.xml -- param namews-binding value:5066/配置SSL证书letsencrypt certonly --standalone -d yourdomain.com ln -s /etc/letsencrypt/live/yourdomain.com/privkey.pem /usr/local/freeswitch/certs/wss.pem ln -s /etc/letsencrypt/live/yourdomain.com/fullchain.pem /usr/local/freeswitch/certs/wss.pem8. 实际部署经验分享在多年的FreeSWITCH部署实践中我积累了一些宝贵的经验教训。8.1 性能调优实战RTP端口范围优化!-- in autoload_configs/switch.conf.xml -- param namertp-start-port value16384/ param namertp-end-port value32768/这个范围应该与防火墙配置匹配避免端口冲突。Jitter Buffer配置!-- in sofia.conf.xml -- param namejitterbuffer-sec value60/ param namejitterbuffer-len value200/这对解决网络抖动问题特别有效。8.2 高可用方案双机热备配置# 在主备服务器上配置相同的数据库 # 使用rsync同步配置文件 rsync -avz /usr/local/freeswitch/conf/ backup-server:/usr/local/freeswitch/conf/使用Keepalived实现VIP# 安装Keepalived yum install -y keepalived # 配置/etc/keepalived/keepalived.conf vrrp_instance VI_1 { state MASTER interface eth0 virtual_router_id 51 priority 101 advert_int 1 virtual_ipaddress { 192.168.1.200/24 } }8.3 监控与告警使用Prometheus监控# 安装FreeSWITCH的Prometheus exporter git clone https://github.com/gmaruzz/freeswitch-prometheus-exporter cd freeswitch-prometheus-exporter pip install -r requirements.txt python freeswitch_exporter.py关键指标告警并发呼叫数CPU/内存使用率数据库连接数SIP注册失败率8.4 灾难恢复演练定期进行灾难恢复演练非常重要。我的做法是每月进行一次完整备份每季度模拟一次服务器崩溃场景测试从备份恢复的全过程记录恢复时间并不断优化流程在实际操作中我发现以下几点特别关键数据库备份必须与配置文件备份同步恢复时要特别注意文件权限恢复后要全面测试所有功能
返回列表