Ubuntu 24.04 安装 FreeSWITCH 完整教程(国内环境)
一、系统准备
1. 检查系统版本
# 查看系统版本
lsb_release -a
# 输出应该显示:
# Distributor ID: Ubuntu
# Description: Ubuntu 24.04 LTS
# Release: 24.04
# Codename: noble
2. 更新系统(需要 sudo 权限)
# 更新软件包列表
sudo apt-get update
# 升级已安装的软件包(可选)
sudo apt-get upgrade -y
二、安装 FreeSWITCH(完整步骤)
方法一:使用官方仓库安装(推荐)
# ========== 步骤 1: 安装必要工具 ==========
sudo apt-get install -y wget gnupg2 software-properties-common
# ========== 步骤 2: 添加 FreeSWITCH GPG 密钥 ==========
# 使用国内可访问的官方文件服务器
wget -O - https://files.freeswitch.org/repo/deb/debian-release/fsstretch-archive-keyring.asc | sudo gpg --dearmor -o /usr/share/keyrings/freeswitch-archive-keyring.gpg
# ========== 步骤 3: 添加 FreeSWITCH 软件源 ==========
# Ubuntu 24.04 的代号是 noble
echo "deb [signed-by=/usr/share/keyrings/freeswitch-archive-keyring.gpg] https://files.freeswitch.org/repo/deb/debian-release/ noble main" | sudo tee /etc/apt/sources.list.d/freeswitch.list
# ========== 步骤 4: 更新软件源 ==========
sudo apt-get update
# ========== 步骤 5: 安装 FreeSWITCH ==========
# 安装完整版(推荐)
sudo apt-get install -y freeswitch-meta-all
# 或者只安装核心组件
# sudo apt-get install -y freeswitch-meta-bare freeswitch-conf-vanilla freeswitch-mod-commands
# ========== 步骤 6: 安装音频文件(可选但推荐)==========
sudo apt-get install -y freeswitch-music-default freeswitch-sounds-en-us-callie
方法二:源码编译安装(如果仓库方式失败)
#!/bin/bash
# 下载预编译的 FreeSWITCH 压缩包
set -e
echo "=== 下载 FreeSWITCH 预编译包 ==="
# 创建工作目录
cd /tmp
# 下载预编译包
echo "1. 下载 FreeSWITCH 源码包..."
wget https://files.freeswitch.org/releases/freeswitch/freeswitch-1.10.11.-release.tar.gz
# 解压
echo "2. 解压..."
tar -zxvf freeswitch-1.10.11.-release.tar.gz
cd freeswitch-1.10.11.-release
# 安装编译依赖
echo "3. 安装编译依赖..."
sudo apt-get update
sudo apt-get install -y \
build-essential cmake automake autoconf libtool-bin \
pkg-config wget curl \
libssl-dev zlib1g-dev libdb-dev unixodbc-dev \
libncurses5-dev libexpat1-dev libgdbm-dev bison \
libbison-dev libcurl4-openssl-dev libpcre3-dev \
libspeex-dev libspeexdsp-dev libldns-dev \
libedit-dev libtiff5-dev yasm libopus-dev \
libsndfile1-dev libshout3-dev libmpg123-dev \
libmp3lame-dev libsqlite3-dev libpq-dev \
libmariadb-dev liblua5.3-dev uuid-dev
# 配置
echo "4. 配置编译选项..."
./configure --prefix=/usr/local/freeswitch
# 编译
echo "5. 编译(使用 $(nproc) 个 CPU 核心)..."
make -j$(nproc)
# 安装
echo "6. 安装..."
sudo make install
# 安装配置和音频
echo "7. 安装配置文件和音频..."
sudo make cd-sounds-install cd-moh-install
sudo make samples
echo ""
echo "✅ 安装完成!"
三、配置 FreeSWITCH 用户和权限
# ========== 创建系统用户 ==========
# 检查用户是否已存在
if ! id -u freeswitch > /dev/null 2>&1; then
sudo groupadd -r freeswitch
sudo useradd -r -g freeswitch -d /var/lib/freeswitch -s /bin/false freeswitch
echo "freeswitch 用户创建成功"
else
echo "freeswitch 用户已存在"
fi
# ========== 设置目录权限 ==========
# 如果是仓库安装
sudo chown -R freeswitch:freeswitch /etc/freeswitch
sudo chown -R freeswitch:freeswitch /var/lib/freeswitch
sudo chown -R freeswitch:freeswitch /var/log/freeswitch
sudo chown -R freeswitch:freeswitch /usr/share/freeswitch
sudo chmod -R o-rwx /etc/freeswitch
# 如果是编译安装
# sudo chown -R freeswitch:freeswitch /usr/local/freeswitch
# sudo chmod -R o-rwx /usr/local/freeswitch
四、配置 systemd 服务
仓库安装(服务已自动配置)
# 检查服务文件是否存在
ls -l /lib/systemd/system/freeswitch.service
编译安装(需要手动创建服务)
# 创建 systemd 服务文件
sudo tee /etc/systemd/system/freeswitch.service > /dev/null <<'EOF'
[Unit]
Description=FreeSWITCH open source telephony platform
After=syslog.target network.target local-fs.target
[Service]
Type=forking
PIDFile=/usr/local/freeswitch/run/freeswitch.pid
Environment="DAEMON_OPTS=-nonat"
EnvironmentFile=-/etc/default/freeswitch
ExecStartPre=/bin/mkdir -p /usr/local/freeswitch/run
ExecStart=/usr/local/freeswitch/bin/freeswitch -u freeswitch -g freeswitch -ncwait $DAEMON_OPTS
TimeoutSec=45s
Restart=always
WorkingDirectory=/usr/local/freeswitch
User=freeswitch
Group=freeswitch
LimitCORE=infinity
LimitNOFILE=100000
LimitNPROC=60000
LimitSTACK=250000
LimitRTPRIO=infinity
LimitRTTIME=infinity
IOSchedulingClass=realtime
IOSchedulingPriority=2
CPUSchedulingPolicy=rr
CPUSchedulingPriority=89
[Install]
WantedBy=multi-user.target
EOF
# 重新加载 systemd 配置
sudo systemctl daemon-reload
五、修改默认密码(重要安全步骤)
# ========== 编辑配置文件 ==========
# 仓库安装
sudo vi /etc/freeswitch/vars.xml
# 编译安装
# sudo vi /usr/local/freeswitch/conf/vars.xml
# 找到以下行(按 / 搜索 "default_password")
# <X-PRE-PROCESS cmd="set" data="default_password=1234"/>
# 修改为强密码(例如):
# <X-PRE-PROCESS cmd="set" data="default_password=YourStrongPassword123!@#"/>
# 保存退出(按 ESC,输入 :wq)
六、配置防火墙
# ========== 检查防火墙状态 ==========
sudo ufw status
# 如果防火墙已启用,添加规则
sudo ufw allow 5060/tcp comment 'FreeSWITCH SIP TCP'
sudo ufw allow 5060/udp comment 'FreeSWITCH SIP UDP'
sudo ufw allow 5080/tcp comment 'FreeSWITCH WS'
sudo ufw allow 5081/tcp comment 'FreeSWITCH WSS'
sudo ufw allow 8021/tcp comment 'FreeSWITCH ESL'
sudo ufw allow 16384:32768/udp comment 'FreeSWITCH RTP'
# 重载防火墙
sudo ufw reload
# 查看规则
sudo ufw status numbered
七、启动 FreeSWITCH 服务
# ========== 启动服务 ==========
sudo systemctl start freeswitch
# ========== 设置开机自启 ==========
sudo systemctl enable freeswitch
# ========== 查看服务状态 ==========
sudo systemctl status freeswitch
# 应该看到 "active (running)" 状态
八、验证安装
1. 检查进程
# 查看 FreeSWITCH 进程
ps aux | grep freeswitch
# 查看端口监听
sudo ss -tulnp | grep freeswitch
# 或
sudo netstat -tulnp | grep freeswitch
# 应该看到:
# 5060 - SIP
# 8021 - ESL (Event Socket)
# 16384-32768 - RTP
2. 连接到控制台
# 连接到 FreeSWITCH 控制台
fs_cli
# 或指定连接参数
# fs_cli -H 127.0.0.1 -P 8021 -p ClueCon
3. 执行测试命令
# 在 fs_cli 控制台中执行:
# 查看版本
version
# 查看状态
status
# 查看 Sofia SIP 配置
sofia status
# 查看内部配置文件注册信息
sofia status profile internal reg
# 查看模块
show modules
# 退出控制台
/exit
# 或按 Ctrl+D
九、完整一键安装脚本
将以下内容保存为 install_freeswitch_ubuntu24.sh:
#!/bin/bash
# FreeSWITCH Ubuntu 24.04 一键安装脚本(国内环境)
# 使用方法: sudo bash install_freeswitch_ubuntu24.sh
set -e
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
# 日志函数
log_info() {
echo -e "${GREEN}[INFO]${NC} $1"
}
log_warn() {
echo -e "${YELLOW}[WARN]${NC} $1"
}
log_error() {
echo -e "${RED}[ERROR]${NC} $1"
}
# 检查是否为 root 用户
if [ "$EUID" -ne 0 ]; then
log_error "请使用 root 权限运行此脚本"
echo "使用方法: sudo bash $0"
exit 1
fi
log_info "开始安装 FreeSWITCH on Ubuntu 24.04..."
# 检测系统版本
if [ -f /etc/os-release ]; then
. /etc/os-release
if [ "$ID" != "ubuntu" ] || [ "$VERSION_ID" != "24.04" ]; then
log_warn "检测到系统为: $ID $VERSION_ID"
log_warn "此脚本专为 Ubuntu 24.04 设计,继续安装可能遇到问题"
read -p "是否继续?(y/n): " -n 1 -r
echo
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
exit 1
fi
fi
else
log_error "无法检测系统版本"
exit 1
fi
# 更新系统
log_info "更新系统软件包..."
apt-get update
# 安装基础依赖
log_info "安装基础依赖..."
apt-get install -y wget gnupg2 software-properties-common curl
# 添加 FreeSWITCH GPG 密钥
log_info "添加 FreeSWITCH GPG 密钥..."
wget -O - https://files.freeswitch.org/repo/deb/debian-release/fsstretch-archive-keyring.asc | gpg --dearmor -o /usr/share/keyrings/freeswitch-archive-keyring.gpg
# 添加 FreeSWITCH 软件源
log_info "添加 FreeSWITCH 软件源..."
echo "deb [signed-by=/usr/share/keyrings/freeswitch-archive-keyring.gpg] https://files.freeswitch.org/repo/deb/debian-release/ noble main" > /etc/apt/sources.list.d/freeswitch.list
# 更新软件源
log_info "更新软件源..."
apt-get update
# 安装 FreeSWITCH
log_info "安装 FreeSWITCH(这可能需要几分钟)..."
DEBIAN_FRONTEND=noninteractive apt-get install -y freeswitch-meta-all
# 安装音频文件
log_info "安装音频文件..."
apt-get install -y freeswitch-music-default freeswitch-sounds-en-us-callie
# 创建 freeswitch 用户
if ! id -u freeswitch > /dev/null 2>&1; then
log_info "创建 freeswitch 系统用户..."
groupadd -r freeswitch
useradd -r -g freeswitch -d /var/lib/freeswitch -s /bin/false freeswitch
else
log_info "freeswitch 用户已存在"
fi
# 设置权限
log_info "设置目录权限..."
chown -R freeswitch:freeswitch /etc/freeswitch
chown -R freeswitch:freeswitch /var/lib/freeswitch
chown -R freeswitch:freeswitch /var/log/freeswitch
chown -R freeswitch:freeswitch /usr/share/freeswitch
chmod -R o-rwx /etc/freeswitch
# 修改默认密码
log_info "修改默认密码..."
NEW_PASSWORD="FS$(date +%s)@Pass"
sed -i "s/default_password=1234/default_password=${NEW_PASSWORD}/g" /etc/freeswitch/vars.xml
log_warn "默认密码已修改为: ${NEW_PASSWORD}"
log_warn "请记录此密码!配置文件位置: /etc/freeswitch/vars.xml"
# 配置防火墙
log_info "配置防火墙规则..."
if command -v ufw &> /dev/null; then
ufw --force enable
ufw allow 5060/tcp comment 'FreeSWITCH SIP TCP'
ufw allow 5060/udp comment 'FreeSWITCH SIP UDP'
ufw allow 5080/tcp comment 'FreeSWITCH WS'
ufw allow 5081/tcp comment 'FreeSWITCH WSS'
ufw allow 8021/tcp comment 'FreeSWITCH ESL'
ufw allow 16384:32768/udp comment 'FreeSWITCH RTP'
ufw reload
log_info "防火墙规则已配置"
else
log_warn "未检测到 ufw,跳过防火墙配置"
fi
# 启动服务
log_info "启动 FreeSWITCH 服务..."
systemctl daemon-reload
systemctl enable freeswitch
systemctl start freeswitch
# 等待服务启动
sleep 5
# 检查服务状态
if systemctl is-active --quiet freeswitch; then
log_info "FreeSWITCH 服务启动成功!"
else
log_error "FreeSWITCH 服务启动失败"
log_error "请检查日志: journalctl -u freeswitch -n 50"
exit 1
fi
# 显示安装信息
echo ""
echo "=========================================="
log_info "FreeSWITCH 安装完成!"
echo "=========================================="
echo ""
echo "📍 安装信息:"
echo " 版本: $(fs_cli -x 'version' 2>/dev/null | head -n1 || echo '无法获取')"
echo " 配置目录: /etc/freeswitch/"
echo " 日志目录: /var/log/freeswitch/"
echo " 数据目录: /var/lib/freeswitch/"
echo ""
echo "🔐 安全信息:"
echo " 默认密码: ${NEW_PASSWORD}"
echo " 配置文件: /etc/freeswitch/vars.xml"
echo ""
echo "🎯 常用命令:"
echo " 连接控制台: fs_cli"
echo " 查看状态: systemctl status freeswitch"
echo " 查看日志: tail -f /var/log/freeswitch/freeswitch.log"
echo " 重启服务: systemctl restart freeswitch"
echo ""
echo "📚 控制台常用命令:"
echo " status - 查看系统状态"
echo " sofia status - 查看 SIP 状态"
echo " show channels - 查看通话通道"
echo " version - 查看版本信息"
echo " /exit - 退出控制台"
echo ""
echo "=========================================="
# 测试连接
log_info "测试 FreeSWITCH 连接..."
if fs_cli -x "status" &> /dev/null; then
log_info "✅ FreeSWITCH 运行正常!"
else
log_warn "⚠️ 无法连接到 FreeSWITCH,请检查服务状态"
fi
echo ""
log_info "安装脚本执行完毕!"
使用一键安装脚本
# 1. 下载或创建脚本
nano install_freeswitch_ubuntu24.sh
# 2. 粘贴上面的脚本内容,保存退出(Ctrl+O, Enter, Ctrl+X)
# 3. 添加执行权限
chmod +x install_freeswitch_ubuntu24.sh
# 4. 执行安装
sudo ./install_freeswitch_ubuntu24.sh
十、常用管理命令
服务管理(需要 sudo)
# 启动服务
sudo systemctl start freeswitch
# 停止服务
sudo systemctl stop freeswitch
# 重启服务
sudo systemctl restart freeswitch
# 查看状态
sudo systemctl status freeswitch
# 查看实时日志
sudo journalctl -u freeswitch -f
# 查看最近 100 行日志
sudo journalctl -u freeswitch -n 100
# 查看日志文件
sudo tail -f /var/log/freeswitch/freeswitch.log
控制台命令(不需要 sudo,但需要 freeswitch 运行)
# 连接控制台
fs_cli
# 在控制台中执行命令
status
sofia status
show channels
show calls
reloadxml
# 退出控制台
/exit
十一、常见问题排查
1. 服务无法启动
# 查看详细错误日志
sudo journalctl -u freeswitch -n 100 --no-pager
# 检查配置文件语法
sudo freeswitch -t
# 查看进程是否存在
ps aux | grep freeswitch
2. 端口被占用
# 检查 5060 端口
sudo lsof -i :5060
# 如果被占用,停止占用进程或修改 FreeSWITCH 端口
3. 权限问题
# 重新设置权限
sudo chown -R freeswitch:freeswitch /etc/freeswitch
sudo chown -R freeswitch:freeswitch /var/lib/freeswitch
sudo chown -R freeswitch:freeswitch /var/log/freeswitch
4. 无法连接 fs_cli
# 检查 8021 端口
sudo ss -tulnp | grep 8021
# 查看 ESL 配置
sudo cat /etc/freeswitch/autoload_configs/event_socket.conf.xml
十二、总结
✅ 需要管理员权限的操作:
- ✅ 安装软件包
- ✅ 创建系统用户
- ✅ 修改系统配置文件
- ✅ 启动/停止系统服务
- ✅ 配置防火墙
- ✅ 修改 /etc 和 /var 目录文件
❌ 不需要管理员权限的操作:
- ❌ 连接
fs_cli控制台(如果当前用户在 freeswitch 组) - ❌ 查看日志(如果有读取权限)
🎯 完整安装时间估算:
- 仓库安装:5-10 分钟
- 源码编译:20-40 分钟(取决于 CPU 性能)
安装完成后,FreeSWITCH 将以 freeswitch 用户身份运行,所有操作都需要通过 sudo 进行管理!
需要我帮你解决具体的安装问题吗?