Rocky Linux 9 源码编译 Asterisk 20 + FreePBX 17 搭建小型呼叫中心

Rocky Linux 9 源码编译 Asterisk 20 + FreePBX 17 搭建小型呼叫中心

【最近实战】

问题背景

我需要在服务器上部署一套小型的呼叫中心业务,底层使用 Asterisk 服务。服务器环境是 Rocky Linux 9.7,之前有人尝试过但没完成,系统里残留了一些不完整的配置。

我向 AI 助手说明了需求:要在这台服务器上部署呼叫中心,底层用 Asterisk。AI 助手先对服务器做了全面扫描,发现几个关键问题:

  1. Asterisk 未安装
  2. 系统只有一个 CentOS 7 的本地 ISO 源,无法直接安装 el9 的包
  3. 开发工具、Web 服务器、数据库都未就绪
  4. 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 辅助功能,整个部署过程从环境检查到最终验证一气呵成,避免了手动排查依赖和版本兼容问题的繁琐过程。

相关推荐
吃好睡好便好6 小时前
创建魔方矩阵和单位矩阵
开发语言·人工智能·学习·线性代数·matlab·矩阵
蠢货爱好者6 小时前
Docker基础操作
运维·docker·容器
无忧智库6 小时前
基于5G-A(通感一体)技术的城市低空飞行器实时航线监控底座建设方案(WORD)
大数据·人工智能·5g
IT_陈寒7 小时前
为什么 Java 的 Optional 让我调试到深夜?
前端·人工智能·后端
有为少年7 小时前
深度隐式层 | 隐式函数与自动微分
人工智能·神经网络·线性代数·机器学习·矩阵
大模型真好玩7 小时前
大模型训练全流程实战指南工具篇(十三)—— 大模型评测实战(数据集评测+自动化评测)
人工智能·agent·deepseek
ShGamu7 小时前
2026上半年链条输送机厂家全流程服务与选型参考
大数据·人工智能·链条输送机
charley.layabox7 小时前
大连理工,将 LayaAir AI 游戏设计带进校园
人工智能·游戏
Drache_long7 小时前
DevOps
运维·devops
Raink老师7 小时前
【AI面试临阵磨枪-76】社交 AI:内容生成、审核、智能回复、多模态理解、安全治理
人工智能·安全·面试