跳转至内容

注意

此过程最后测试的 Rocky Linux 版本是 8.5 版。由于此过程的大部分依赖于直接从 Asterisk 构建的源代码和 Rocky Linux 提供的一套简单的开发工具,因此它应该适用于所有版本。如果您遇到问题,请告诉我们!

在 Rocky Linux 上安装 Asterisk

什么是 Asterisk?

Asterisk 是一个用于构建通信应用程序的开源框架。此外,Asterisk 可以将普通计算机变成通信服务器,为 IP PBX 系统、VoIP 网关、会议服务器和其他自定义解决方案提供支持。它被世界各地的小型企业、大型企业、呼叫中心、运营商和政府机构使用。

Asterisk 是免费开源的,由 Sangoma 赞助。Sangoma 还提供使用 Asterisk 作为底层的商业产品,根据您的经验和预算,使用这些产品可能比自己构建更有益。只有您和您的组织知道答案。

需要注意的是,本指南要求管理员自行进行大量研究。安装通信服务器并不难,但运行一个通信服务器可能相当复杂。虽然本指南将帮助您启动并运行服务器,但它还没有准备好投入生产环境使用。

先决条件

要完成本指南,您至少需要以下技能和工具

  • 运行 Rocky Linux 的机器
  • 能够轻松修改配置文件并从命令行发出命令
  • 了解如何使用命令行编辑器(我们在这里使用 vi,但您可以随意将其替换为您喜欢的编辑器。)
  • 您需要 root 访问权限,并且理想情况下在终端中以 root 用户身份登录
  • 来自 Fedora 的 EPEL 仓库
  • 能够以 root 身份登录或使用 sudo 运行 root 命令。这里的所有命令都假设用户拥有 sudo 权限。但是,配置和构建过程使用 sudo -s 运行。
  • 要获取最新版本的 Asterisk,您必须使用 curlwget。本指南使用 wget,但如果您愿意,也可以替换为相应的 curl 字符串。

更新 Rocky Linux 并安装 wget

sudo dnf -y update

这将使您的服务器与自上次更新或安装以来发布或更新的所有软件包保持同步。然后运行

sudo dnf install wget

设置主机名

将您的主机名设置为用于 Asterisk 的域名。

sudo hostnamectl set-hostname asterisk.example.com

添加所需的仓库

首先,安装 EPEL(企业 Linux 的额外软件包)

sudo dnf -y install epel-release

接下来,启用 Rocky Linux 的 PowerTools

sudo dnf config-manager --set-enabled powertools

安装开发工具

sudo dnf group -y install "Development Tools"
sudo dnf -y install git wget  

安装 Asterisk

下载和配置 Asterisk 构建

在下载此脚本之前,请确保您拥有最新版本。为此,请导航至 此处的 Asterisk 下载链接 并查找 Asterisk 的最新版本。然后复制链接位置。截至本文撰写之时,以下是最新版本

wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-20-current.tar.gz 
tar xvfz asterisk-20-current.tar.gz
cd asterisk-20.0.0/

在运行下面的 install_prereq(以及其余命令)之前,您需要成为超级用户或 root 用户。此时,永久进入 sudo 一段时间会更容易。您将在稍后的过程中退出 sudo

sudo -s
contrib/scripts/install_prereq install

脚本完成后,您应该会看到以下内容

#############################################
## install completed successfully
#############################################

现在您已经拥有了所有必需的软件包,我们的下一步是配置和构建 Asterisk

./configure --libdir=/usr/lib64 --with-jansson-bundled=yes

假设配置运行没有问题,您将获得一个大的 ASCII Asterisk 标志,然后在 Rocky Linux 上显示以下内容

configure: Package configured for:
configure: OS type  : linux-gnu
configure: Host CPU : x86_64
configure: build-cpu:vendor:os: x86_64 : pc : linux-gnu :
configure: host-cpu:vendor:os: x86_64 : pc : linux-gnu :

设置 Asterisk 菜单选项 [更多选项]

这是管理员需要做功课的步骤之一。存在许多您可能不需要的菜单选项。运行以下命令

make menuselect

将带您进入菜单选择屏幕

menuselect screen

仔细查看这些选项,并根据您的要求进行选择。如前所述,这需要一些额外的功课。

构建并安装 Asterisk

要构建,您需要依次运行以下命令

make
make install

安装文档不是必需的,但除非您是通信服务器专家,否则您会希望安装它们

make progdocs

接下来,安装基本 PBX 并对其进行配置。基本 PBX 就是这样,非常基本!您可能需要进行更改才能使 PBX 按您希望的方式运行。

make basic-pbx
make config

Asterisk 配置

创建用户和组

您将需要一个专门用于 Asterisk 的用户和组。立即创建它们

groupadd asterisk
useradd -r -d /var/lib/asterisk -g asterisk asterisk
chown -R asterisk.asterisk /etc/asterisk /var/{lib,log,spool}/asterisk /usr/lib64/asterisk
restorecon -vr {/etc/asterisk,/var/lib/asterisk,/var/log/asterisk,/var/spool/asterisk}

由于大部分构建工作已完成,请继续并退出 sudo -s 命令。这将要求其余大部分命令再次使用 sudo

exit

设置默认用户和组

sudo vi /etc/sysconfig/asterisk

删除下面两行上的注释并保存

AST_USER="asterisk"
AST_GROUP="asterisk"
sudo vi /etc/asterisk/asterisk.conf

删除下面两行上的注释并保存

runuser = asterisk ; The user to run as.
rungroup = asterisk ; The group to run as.

配置 Asterisk 服务

sudo systemctl enable asterisk

配置防火墙

本示例使用 firewalld 作为防火墙,这是 Rocky Linux 中的默认防火墙。此处的目标是向外界开放 SIP 端口,并根据 Asterisk 文档的建议,在 10000-20000 端口上向外界开放 RTP(实时传输协议)。

您几乎肯定需要为其他面向外部的服务(HTTP/HTTPS)设置其他防火墙规则,您可能希望将其限制为您的 IP 地址。这超出了本文档的范围。

sudo firewall-cmd --zone=public --add-service sip --permanent
sudo firewall-cmd --zone=public --add-port=10000-20000/udp --permanent

由于您已使 firewalld 命令永久生效,因此必须重新启动服务器。您可以使用以下命令执行此操作

sudo shutdown -r now

测试

Asterisk 控制台

要进行测试,请连接到 Asterisk 控制台

sudo asterisk -r

这将带您进入 Asterisk 命令行客户端。显示基本 Asterisk 信息后,您将看到以下提示符

asterisk*CLI>

要更改控制台的详细程度,请使用以下命令

core set verbose 4

这将在 Asterisk 控制台中显示以下内容

Console verbose was OFF and is now 4.

显示示例端点身份验证

在 Asterisk 命令行客户端提示符下,键入

pjsip show auth 1101

这将返回您可以用来连接到任何 SIP 客户端的用户名和密码信息。

结论

以上内容将帮助您启动并运行服务器,但您需要负责完成配置、连接设备和进一步的故障排除。

运行 Asterisk 通信服务器需要时间和精力,并且需要管理员进行研究。有关配置和使用 Asterisk 的更多信息,请参阅此处的 Asterisk Wiki

贡献者:Steven Spencer, Ganna Zhyrnova