Rocky Linux 9 源码编译 Asterisk 20 + FreePBX 17 搭建小型呼叫中心
【最近实战】
问题背景
我需要在服务器上部署一套小型的呼叫中心业务,底层使用 Asterisk 服务。服务器环境是 Rocky Linux 9.7,之前有人尝试过但没完成,系统里残留了一些不完整的配置。
我向 AI 助手说明了需求:要在这台服务器上部署呼叫中心,底层用 Asterisk。AI 助手先对服务器做了全面扫描,发现几个关键问题:
- Asterisk 未安装
- 系统只有一个 CentOS 7 的本地 ISO 源,无法直接安装 el9 的包
- 开发工具、Web 服务器、数据库都未就绪
- SELinux 处于 enforcing 模式
方案选型
AI 助手给出了三个方案让我选择:
- 方案A:源码编译 Asterisk 20 LTS + FreePBX 17(官方成熟搭配)
- 方案B:使用 FreePBX 官方安装脚本(自动化但版本受限)
- 方案C:源码编译 Asterisk 23 + Issabel(Issabel 太老,不兼容新版 Asterisk)
我最初选了方案C,但 AI 助手查证后发现 Issabel 只支持 Asterisk 1.8~12,在 Rocky Linux 9 上无法运行。它如实告知此路不通,建议回退到方案A。我接受了这个建议。
这里有个版本兼容的细节值得注意:Asterisk 23 是最新版,但 FreePBX 17 官方尚未支持它。AI 助手查到了 FreePBX 17 默认搭配的是 Asterisk 20.x LTS(长期支持版,支持到 2027 年),最终确定使用 Asterisk 20.19.0 + FreePBX 17.0.28 的组合。
部署过程
第一步:恢复系统仓库
AI 助手发现 Rocky Linux 的官方仓库文件被移到了 /etc/yum.repos.d/back/ 目录下,需要恢复才能安装依赖包。它执行了恢复操作,同时禁用了 el7 的 ISO 源。
第二步:安装开发环境和依赖
通过 Wisdom SSH 的远程终端功能,AI 助手执行了以下安装:
dnf groupinstall -y "Development Tools"
dnf install -y epel-release
dnf config-manager --set-enabled crb
CRB(CodeReady Builder)仓库是 Rocky Linux 9 的关键,很多开发包(如 jansson-devel、libsrtp-devel)都在这个仓库里,默认是禁用的。不启用它,Asterisk 编译会缺少大量依赖。
第三步:源码编译 Asterisk 20.19.0
AI 助手从 GitHub 克隆了 Asterisk 20.19.0 的源码(tag 20.19.0),然后执行标准的编译三部曲:
./configure
make -j$(nproc)
make install
make samples
编译过程顺利,Asterisk 成功安装到系统。AI 助手还手动创建了 systemd 服务文件和 asterisk 运行用户。
第四步:安装 Web 环境和数据库
dnf install -y mariadb-server mariadb httpd php php-mysqlnd php-gd php-xml ...
这里遇到了第一个坑:FreePBX 17 要求 PHP 8.1+,但 Rocky Linux 9 默认的 PHP 是 8.0。AI 助手通过安装 REMI 仓库并切换到 PHP 8.3 模块解决了这个问题:
dnf module reset php -y
dnf module enable php:remi-8.3 -y
dnf remove -y php-*
dnf install -y php php-mysqlnd php-gd ...
第五步:配置数据库和 ODBC
AI 助手创建了 FreePBX 专用的数据库和用户:
CREATE DATABASE asterisk;
CREATE DATABASE asteriskcdr;
CREATE USER 'freepbx'@'localhost' IDENTIFIED BY '***';
ODBC 是 FreePBX 连接数据库的关键通道,AI 助手配置了 /etc/odbc.ini 文件,并通过 isql 命令验证了连接正常。
第六步:安装 FreePBX
从 GitHub 克隆 FreePBX 17 源码后,AI 助手执行安装:
php install --dbuser=freepbx --dbpass=*** --dbname=asterisk --cdrdbname=asteriskcdr -n
安装脚本检测到 SELinux 处于 enforcing 模式,直接报错退出。这是 FreePBX 的硬性要求------必须在 SELinux permissive 模式下安装和运行。
AI 助手询问我是否允许关闭 SELinux,我确认后它执行了:
setenforce 0
sed -i 's/^SELINUX=enforcing/SELINUX=permissive/' /etc/selinux/config
重新运行安装脚本,这次顺利通过。FreePBX 17.0.28 安装成功。
第七步:安装核心模块
安装完成后,AI 助手通过 fwconsole 命令安装了 core、dashboard、sipsettings、voicemail 等基础模块。这些是 FreePBX 运行所必需的。
最终成果
部署完成后,AI 助手汇总了各组件版本:
| 组件 | 版本 | 状态 |
|---|---|---|
| Asterisk | 20.19.0 | 运行中 |
| FreePBX | 17.0.28 | 已安装 |
| Apache | 2.4.62 | 运行中 |
| MariaDB | 10.5.29 | 运行中 |
| PHP | 8.3.31 | 运行中 |
服务器 IP 为 ***,通过浏览器访问 http://***/admin/ 即可进入 FreePBX Web 管理界面。
经验总结
这次部署有几个关键点值得记录:
1. 版本兼容性是第一道坎
Asterisk 和 FreePBX 的版本搭配需要严格匹配。Asterisk 23 虽然是最新版,但 FreePBX 17 尚未支持它。选择 Asterisk 20 LTS + FreePBX 17 是官方推荐的成熟组合。
2. Rocky Linux 9 的仓库配置
相比 CentOS 7,Rocky Linux 9 的仓库管理有变化:
- CRB 仓库需要手动启用(
dnf config-manager --set-enabled crb) - EPEL 仓库需要额外安装
- 默认 PHP 版本是 8.0,但 FreePBX 17 需要 8.1+
3. SELinux 必须处理
FreePBX 安装脚本会直接检查 SELinux 状态并拒绝安装。要么设为 permissive,要么为 FreePBX 编写完整的 SELinux 策略------后者工作量巨大,生产环境通常选择 permissive。
4. 源码编译 vs 包管理器
在 Rocky Linux 9 上,Asterisk 没有现成的 RPM 包,源码编译是唯一选择。编译过程约 15 分钟,关键在于提前装全所有 -devel 包,否则 configure 阶段会反复报错。
借助 Wisdom SSH 的 AI 辅助功能,整个部署过程从环境检查到最终验证一气呵成,避免了手动排查依赖和版本兼容问题的繁琐过程。