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 辅助功能,整个部署过程从环境检查到最终验证一气呵成,避免了手动排查依赖和版本兼容问题的繁琐过程。

相关推荐
Andya_net4 小时前
AI | CC GUI 集成 IDEA 完整教程
java·人工智能·intellij-idea
mpr0xy4 小时前
简单好用的AI提示词模版:目标,输入,输出
人工智能·ai·openai·提示词·ai agent
byte轻骑兵4 小时前
【LE Audio】CAP精讲[2]: 三大角色+服务映射,CAP配置核心流程全拆解
人工智能·音视频·le audio·低功耗音频·蓝牙通话
DeniuHe4 小时前
遗传算法中的轮盘赌选择法(Roulette Wheel Selection)
人工智能
艾莉丝努力练剑4 小时前
【Linux网络】Linux 网络编程入门:TCP Socket 编程(上)
linux·运维·服务器·网络·tcp/ip·计算机网络
星辰徐哥4 小时前
表单优化:AI驱动HTML5表单的智能验证与提示功能
前端·人工智能·html5
Konwledging4 小时前
Linux图形栈
linux
happytree0015 小时前
linux0.11 - bootsect.s 第三阶段(加载system)
linux