FreeSWITCH在CentOS与Debian上的部署与优化指南
2026/8/8 6:16:45 网站建设 项目流程

1. 环境准备与系统选择

在开始搭建FreeSWITCH之前,选择合适的操作系统环境至关重要。作为一款跨平台的通信服务器软件,FreeSWITCH在CentOS和Debian两大主流Linux发行版上都有良好的支持。我曾在生产环境中多次部署过这两个系统下的FreeSWITCH,实测下来各有优劣。

1.1 CentOS与Debian的特性对比

CentOS(特别是7.x版本)以其稳定性著称,适合需要长期运行的服务。但需要注意的是,CentOS 8已停止维护,而CentOS Stream的更新策略与传统的RHEL兼容版本有所不同。如果你选择CentOS,建议使用7.9版本,这是目前最稳定的选择。

Debian 12(Bookworm)则提供了更新的软件包和更好的硬件支持。我在最近的项目中发现,Debian 12对新型网卡和存储设备的兼容性更好,特别是在虚拟化环境中表现优异。不过Debian的默认防火墙配置与CentOS有所不同,这点需要注意。

重要提示:无论选择哪个系统,都建议使用最小化安装(Minimal Install),这样可以减少不必要的软件包和潜在的安全风险。

1.2 系统初始化配置

安装完基础系统后,有几项关键配置需要完成:

  1. 网络配置

    • CentOS 7默认使用NetworkManager,而Debian使用传统的ifupdown。如果你习惯手动配置网络,可以禁用NetworkManager:
      systemctl stop NetworkManager systemctl disable NetworkManager
    • 静态IP配置示例(CentOS):
      nmcli 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
  2. 软件源更新

    • CentOS 7:
      yum install -y epel-release yum update -y
    • Debian 12:
      apt update && apt upgrade -y
  3. 基础工具安装

    # CentOS yum install -y wget curl vim git net-tools # Debian apt install -y wget curl vim git net-tools

1.3 磁盘空间管理

FreeSWITCH运行过程中会产生大量日志和录音文件,因此需要特别注意磁盘空间分配。我遇到过多次因为磁盘空间不足导致服务异常的情况。

  • 检查磁盘使用情况:

    df -h du -sh /var/*
  • 如果发现dudf显示的空间差异很大(常见于文件被删除但进程仍占用的情况),可以尝试:

    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 devscripts

2.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-dev

2.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-dev

2.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 install

3. 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.sql

4. FreeSWITCH配置与优化

安装完成后,需要进行细致的配置才能发挥FreeSWITCH的全部潜力。

4.1 基础配置文件调整

主要的配置文件位于/usr/local/freeswitch/conf/目录:

  1. vars.xml- 设置全局变量:

    <X-PRE-PROCESS cmd="set" data="domain=yourdomain.com"/> <X-PRE-PROCESS cmd="set" data="external_rtp_ip=stun:stun.yourdomain.com"/> <X-PRE-PROCESS cmd="set" data="external_sip_ip=stun:stun.yourdomain.com"/>
  2. autoload_configs/modules.conf.xml- 加载模块:

    <load module="mod_sofia"/> <load module="mod_loopback"/> <load module="mod_commands"/> <!-- 生产环境建议禁用不必要的模块 -->

4.2 SIP配置文件

SIP是FreeSWITCH的核心协议,配置在sofia.conf.xml

<profile name="external"> <gateways> <gateway name="yourprovider"> <param name="username" value="yourusername"/> <param name="password" value="yourpassword"/> <param name="proxy" value="sip.yourprovider.com"/> <param name="register" value="true"/> </gateway> </gateways> </profile>

4.3 拨号计划配置

拨号计划定义呼叫路由逻辑,位于dialplan/default.xml

<extension name="Local_Extension"> <condition field="destination_number" expression="^10[01][0-9]$"> <action application="set" data="dialed_extension=$1"/> <action application="bridge" data="user/${dialed_extension}@${domain}"/> </condition> </extension>

4.4 性能优化建议

根据我的经验,这些优化可以显著提升FreeSWITCH性能:

  1. 调整线程池大小

    <!-- in sofia.conf.xml --> <param name="rtp-timer-name" value="soft"/> <param name="enable-timer" value="false"/>
  2. 日志级别调整

    <!-- in freeswitch.xml --> <param name="log-level" value="notice"/>
  3. 内存管理

    # 增大系统文件描述符限制 echo "* soft nofile 65536" >> /etc/security/limits.conf echo "* hard nofile 65536" >> /etc/security/limits.conf

5. 系统集成与管理

FreeSWITCH安装配置完成后,还需要考虑系统集成和日常管理问题。

5.1 系统服务配置

为了让FreeSWITCH随系统启动,需要创建systemd服务文件:

cat > /etc/systemd/system/freeswitch.service << 'EOF' [Unit] Description=FreeSWITCH After=syslog.target network.target postgresql.service [Service] Type=forking PIDFile=/usr/local/freeswitch/run/freeswitch.pid ExecStart=/usr/local/freeswitch/bin/freeswitch -nc -nonat ExecStop=/usr/local/freeswitch/bin/freeswitch -stop TimeoutSec=45s Restart=always User=freeswitch Group=daemon LimitCORE=infinity LimitNOFILE=100000 LimitNPROC=60000 LimitSTACK=250000 LimitRTPRIO=infinity LimitRTTIME=infinity [Install] WantedBy=multi-user.target EOF systemctl daemon-reload systemctl enable freeswitch systemctl start freeswitch

5.2 监控与维护

  1. 日志监控

    tail -f /usr/local/freeswitch/log/freeswitch.log
  2. CDR记录: 确保CDR(呼叫详细记录)配置正确:

    <!-- in autoload_configs/cdr_pgsql.conf.xml --> <param name="db-info" value="host=127.0.0.1 dbname=freeswitch user=freeswitch password=yourpassword"/>
  3. 定期备份

    # 备份配置 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).sql

5.3 常见问题排查

  1. 端口冲突

    netstat -tulnp | grep -E '5060|5080|16384-32768'
  2. 音频问题: 如果遇到音频问题,检查:

    fs_cli -x "show codec"
  3. 注册失败: 检查SIP注册状态:

    fs_cli -x "sofia status profile external"

6. 安全加固建议

作为通信服务器,安全配置至关重要。以下是我在生产环境中总结的安全实践。

6.1 网络层安全

  1. 防火墙配置

    # CentOS firewall-cmd --permanent --add-port=5060/tcp firewall-cmd --permanent --add-port=5060/udp firewall-cmd --permanent --add-port=5080/tcp firewall-cmd --permanent --add-port=5080/udp firewall-cmd --permanent --add-port=16384-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 enable
  2. SIP安全配置

    <!-- in sofia.conf.xml --> <param name="apply-nat-acl" value="rfc1918.auto"/> <param name="apply-inbound-acl" value="domains"/>

6.2 认证与加密

  1. 强密码策略

    <!-- in vars.xml --> <X-PRE-PROCESS cmd="set" data="default_password=ComplexP@ssw0rd!2023"/>
  2. TLS加密

    # 生成自签名证书 cd /usr/local/freeswitch/certs openssl req -x509 -newkey rsa:4096 -keyout tls.key -out tls.crt -days 365 -nodes
  3. SRTP加密

    <!-- in sofia.conf.xml --> <param name="sip-tls" value="true"/> <param name="tls-only" value="false"/>

6.3 系统级安全

  1. 专用用户运行

    useradd -r -d /usr/local/freeswitch -M -s /bin/false freeswitch chown -R freeswitch:daemon /usr/local/freeswitch
  2. 文件权限控制

    chmod 750 /usr/local/freeswitch/bin/freeswitch chmod 640 /usr/local/freeswitch/conf/*.xml
  3. 定期更新

    # CentOS yum update --security -y # Debian apt update && apt upgrade --only-upgrade security -y

7. 高级功能扩展

基础服务运行稳定后,可以考虑扩展FreeSWITCH的高级功能。

7.1 视频通话支持

  1. 安装视频相关依赖:

    # CentOS yum install -y libyuv-devel libvpx-devel ffmpeg-devel # Debian apt install -y libyuv-dev libvpx-dev libavcodec-dev
  2. 重新编译FreeSWITCH时启用视频支持:

    ./configure --enable-core-video-support make && make install
  3. 配置视频编解码器:

    <!-- in vars.xml --> <X-PRE-PROCESS cmd="set" data="global_codec_prefs=VP8,H264,OPUS,G722,PCMU,PCMA"/> <X-PRE-PROCESS cmd="set" data="outbound_codec_prefs=VP8,H264,OPUS,G722,PCMU,PCMA"/>

7.2 与数据库深度集成

  1. 用户存储在数据库

    <!-- in directory/default.xml --> <user id="1000"> <params> <param name="password" value="$${default_password}"/> </params> <variables> <variable name="user_context" value="default"/> </variables> </user>
  2. 使用ODBC连接

    # CentOS yum install -y unixODBC-devel postgresql-odbc # Debian apt install -y unixodbc-dev odbc-postgresql

7.3 与WebRTC集成

  1. 安装必要的Node.js组件:

    curl -sL https://deb.nodesource.com/setup_16.x | bash - apt install -y nodejs npm install -g signalwire-web
  2. 配置WebSocket支持:

    <!-- in sofia.conf.xml --> <param name="ws-binding" value=":5066"/>
  3. 配置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.pem

8. 实际部署经验分享

在多年的FreeSWITCH部署实践中,我积累了一些宝贵的经验教训。

8.1 性能调优实战

  1. RTP端口范围优化

    <!-- in autoload_configs/switch.conf.xml --> <param name="rtp-start-port" value="16384"/> <param name="rtp-end-port" value="32768"/>

    这个范围应该与防火墙配置匹配,避免端口冲突。

  2. Jitter Buffer配置

    <!-- in sofia.conf.xml --> <param name="jitterbuffer-sec" value="60"/> <param name="jitterbuffer-len" value="200"/>

    这对解决网络抖动问题特别有效。

8.2 高可用方案

  1. 双机热备配置

    # 在主备服务器上配置相同的数据库 # 使用rsync同步配置文件 rsync -avz /usr/local/freeswitch/conf/ backup-server:/usr/local/freeswitch/conf/
  2. 使用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 监控与告警

  1. 使用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
  2. 关键指标告警

    • 并发呼叫数
    • CPU/内存使用率
    • 数据库连接数
    • SIP注册失败率

8.4 灾难恢复演练

定期进行灾难恢复演练非常重要。我的做法是:

  1. 每月进行一次完整备份
  2. 每季度模拟一次服务器崩溃场景
  3. 测试从备份恢复的全过程
  4. 记录恢复时间并不断优化流程

在实际操作中,我发现以下几点特别关键:

  • 数据库备份必须与配置文件备份同步
  • 恢复时要特别注意文件权限
  • 恢复后要全面测试所有功能

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询