本页内容
- 环境要求
- 安装 Nginx Web 服务器
- 安装 MariaDB 服务器
- 创建数据库和用户
- 安装 PHP-FPM 8.2
- 下载 FOSSBilling 源代码
- 配置 Nginx 服务器块
- 使用 SSL/TLS Letsencrypt 保护 FOSSBilling
- 开始 FOSSBilling 安装
- 结论
FOSSBilling 是一款免费且开源的计费系统,旨在让客户和销售方都能轻松使用。FOSSBilling 是 BoxBilling 的一个分支(fork)。它通过直观的界面为客户提供出色的体验,并支持多种支付网关。FOSSBilling 适用于多种类型的业务,从中小型企业乃至大型企业都可使用。FOSSBilling 可以帮助你自动化发票开具、收款以及客户管理和沟通。
在本指南中,我将在 Rocky Linux 9 服务器上安装 FOSSBilling。本教程包含 Nginx Web 服务器、MariaDB 数据库服务器、PHP-FPM 8.2 以及用于生成 SSL/TLS 证书的 Certbot 工具的安装。最终,你将拥有一套可用于日常业务的计费与客户管理解决方案。
环境要求
要完成本指南,你需要满足以下要求:
- 一台已安装 Rocky Linux 9 的服务器 —— 本示例使用主机名为 ' fossbilling-rocky ' 的 Rocky Linux。
- 一个具有 sudo/root 管理员权限的非 root 用户。
- SELinux 以宽松(permissive)模式运行。
- 一个指向你服务器 IP 地址的域名 —— 本示例使用子域名 ' fossbilling.howtoforge.local '。
如果这些要求都已就绪,你就可以完成 FOSSBilling 的安装了。
安装 Nginx Web 服务器
FOSSBilling 可以在 Nginx 和 Lighttpd Web 服务器上运行。本指南将使用 Nginx 作为 Web 服务器。在这一步中,你将通过 Rocky Linux 官方 AppStream 仓库安装 Nginx。
首先,请确保你的系统中已添加 EPEL 仓库。或者你也可以通过下面的 dnf 命令来安装它。
sudo dnf install epel-release
接下来,使用下面的 dnf 命令安装 Nginx Web 服务器。当提示时,输入 y 确认并按 ENTER 继续。
sudo dnf install nginx
输出:

Nginx 安装完成后,运行下面的 systemctl 命令来启动并启用 Nginx 服务。这将在默认的 HTTP 端口 80 上启动并运行 Nginx,并使 Nginx 在系统启动时自动运行。
sudo systemctl start nginx
sudo systemctl enable nginx
现在使用下面的 systemctl 命令实用工具查看 Nginx 服务状态。你应该会看到 Nginx 服务正在运行且已启用的输出。
sudo systemctl status nginx
输出:

Nginx 服务现在已运行,你需要在 firewalld 上开放 HTTP 和 HTTPS 协议。为此,你可以运行下面的 firewall-cmd 命令。
sudo firewall-cmd --add-service={http,https} --permanent
将 HTTP 和 HTTPS 协议添加到 firewalld 后,运行下面的命令重新加载 firewalld 以应用更改。然后,查看 firewalld 上已启用的服务列表。
你应该会看到 HTTP 和 HTTPS 协议已添加到 firewalld。
sudo firewall-cmd --reload
sudo firewall-cmd --list-all
输出:

至此,你已经安装了 Nginx Web 服务器并配置了 firewalld 以开放 HTTP 和 HTTPS 协议。在下一步中,你将开始安装 MariaDB 数据库服务器。
安装 MariaDB 服务器
FOSSBilling 使用 MySQL/MariaDB 来存储用户数据。它至少需要 MySQL 8 或 MariaDB 10.x 服务器。在这一步中,你将通过 Rocky Linux 官方仓库安装 MariaDB 服务器,版本为 MariaDB 10.5,它与最新版本的 FOSSBilling 兼容。
通过下面的 dnf 命令将 MariaDB 数据库服务器安装到你的 Rocky Linux 系统。当提示时输入 y 并按 ENTER 继续。
sudo install mariadb-server
输出:

MariaDB 安装完成后,运行下面的 systemctl 命令实用工具来启动并启用 MariaDB 服务。
sudo systemctl start mariadb
sudo systemctl enable mariadb
接下来,运行下面的 systemctl 命令来验证 MariaDB 服务并确保其正在运行。输出 ' active (running) ' 表示 MariaDB 服务器正在运行。而输出 ' loaded (../mariadb.service; enabled;) ' 表示 MariaDB 服务已启用,并将在系统启动时自动运行。
sudo systemctl status mariadb
输出:

在 MariaDB 服务器运行后,现在你可以通过 'mariadb-secure-installation' 命令来加固 MariaDB。这包括为 MariaDB 设置 root 密码、禁用 MariaDB root 用户的远程登录等。
运行下面的 ' mariadb-secure-installation ' 命令来加固 MariaDB 部署。
sudo mariadb-secure-installation
你将会被询问以下关于 MariaDB 的一些配置:
- 将本地认证切换为 unix_socket?输入 n 表示否。
- 设置 MariaDB root 密码?输入 y,然后输入新的 MariaDB root 密码并重复确认。
- 删除默认的匿名用户?输入 y 确认。
- 禁用 root 用户的远程登录?输入 y 确认。
- 删除默认的 test 数据库?输入 y 确认。
- 重新加载权限表并应用更改?输入 y 确认。
在 MariaDB 服务器安装并运行后,接下来你将创建一个新的 MariaDB 数据库和用户,用于 FOSSBilling 的安装。
创建数据库和用户
在这一步中,你将创建一个新的 MariaDB 数据库和用户,用于 FOSSBilling 的安装。
运行下面的 ' mariadb ' 命令,以 root 用户身份登录 MariaDB。当要求输入密码时,输入你的 MariaDB root 密码并按 ENTER。
sudo mariadb -u root -p
登录到 MariaDB shell 后,运行以下查询来创建新的 MariaDB 数据库和用户。在本示例中,你将创建一个名为 fossbillingdb 的新数据库,用户为 ' fossbilling '。同时,请务必更改下面查询中的默认密码。
CREATE DATABASE fossbillingdb;
CREATE USER fossbilling@localhost IDENTIFIED BY 'password';
GRANT ALL ON fossbillingdb.* TO fossbilling@localhost WITH GRANT OPTION;
FLUSH PRIVILEGES;
输出:

最后,运行下面的查询来验证 MariaDB 用户 fossbilling@localhost,确保该用户拥有访问 ' fossbillingdb ' 数据库的权限。
输出 'GRANT ALL PRIVILEGES ON fossbillingdb.* to fossbilling@localhost ' 确认用户 fossbilling@localhost 拥有访问数据库 ' fossbillingdb ' 的权限。
输入 quit 退出 MariaDB shell。
SHOW GRANTS FOR fossbilling@localhost;
quit
输出:

现在你已经为 FOSSBilling 创建了 MariaDB 数据库和用户。在下一步中,你将在 Rocky Linux 服务器上安装 PHP 和 PHP-FPM。
安装 PHP-FPM 8.2
FOSSBilling 的最新版本支持 PHP 8.x。在这一步中,你将通过 Remi 仓库安装 PHP 和 PHP-FPM 8.2。因此,你首先需要配置 Remi 仓库,安装 PHP 和 PHP-FPM 软件包,然后将 PHP-FPM 与 Nginx Web 服务器配合使用。
通过下面的 dnf 命令添加 PHP Remi 仓库。该命令会将 Remi 仓库安装到你的 Rocky Linux 系统。RPM 文件 'remi-release-9.rpm ' 表明它可用于 RHEL 9 发行版。此外,当提示时输入 y 并按 ENTER 继续。
sudo dnf install dnf-utils http://rpms.remirepo.net/enterprise/remi-release-9.rpm
输出:

接下来,运行下面的 dnf 命令重置 PHP 的仓库模块。然后,查看系统中可用的 PHP 仓库模块列表。
sudo dnf module reset php
sudo dnf module list php
当提示为 Remi 仓库设置 GPG 密钥时,输入 y 确认并按 ENTER。

执行 'dnf module list php' 命令后,你将看到由 Rocky Linux 官方 AppStream 仓库和 Remi 仓库提供的多个 PHP 版本。

运行下面的命令来启用 ' remi-8.2 ' 的 PHP 仓库。此后,每次你安装 PHP 软件包时,都将从 Remi 仓库安装 PHP 8.2 软件包。
当提示时输入 y 并按 ENTER 以启用它。
sudo dnf module enable php:remi-8.2
输出:

配置好 PHP Remi 仓库后,你就可以安装 PHP 软件包了。
运行下面的 dnf 命令,将 PHP 和 PHP-FPM 软件包安装到你的 Rocky Linux 服务器。当提示时输入 y 并按 ENTER 继续。
sudo dnf install php php-fpm php-mysql php-curl php-cli php-zip php-common php-mbstring php-xml
输出:

你还将被提示确认 Remi 仓库的 GPG 密钥。输入 y 确认并按 ENTER。

PHP 安装完成后,使用下面的 nano 编辑器命令打开 PHP 配置文件 ' /etc/php.ini '。
sudo nano /etc/php.ini
将默认的 PHP 配置修改为以下行。
upload_max_filesize = 16M post_max_size = 32M memory_limit = 256M max_execution_time = 600 max_input_vars = 3000 max_input_time = 1000
完成后保存并退出文件 ' /etc/php.ini '。
要在基于 RHEL 的发行版上让 PHP-FPM 与 Nginx 配合运行,你必须确保 PHP-FPM 以默认的用户和用户组 ' nginx ' 运行。
在 RHEL 上,Nginx Web 服务器默认以用户 ' nginx ' 运行。而在基于 Debian 的发行版上,Nginx 和 Apache2 Web 服务器都以相同的用户和用户组 ' www-data ' 运行。
使用下面的 nano 编辑器命令打开 PHP-FPM 池配置文件 ' /etc/php-fpm.d/www.conf '。
sudo nano /etc/php-fpm.d/www.conf
将默认的 ' user ' 和 ' group ' 参数修改为 ' nginx '。
user = nginx group = nginx
完成后保存并关闭文件。
接下来,运行下面的 systemctl 命令实用工具来启动并启用 PHP-FPM 服务。这将使用默认的 sock 文件 '/run/php-fpm/www.sock' 启动 PHP-FPM 服务,并使 PHP-FPM 在系统启动时自动启动。
输出 'Created symlink ... ' 表示 PHP-FPM 服务已启用。
sudo systemctl start php-fpm
sudo systemctl enable php-fpm
输出:

现在运行下面的 systemctl 命令来验证 PHP-FPM 服务的状态。你应该会看到 PHP-FPM 处于 ' active (running) ' 状态,表示 PHP-FPM 正在运行。而输出 ' Loaded .../.../; enabled; ' 表示 PHP-FPM 服务已启用。
sudo systemctl status php-fpm
输出:

最后,运行下面的 php 命令来验证系统中安装的 PHP 版本。然后,查看系统中已启用的扩展列表。
你将看到 PHP 8.2 的输出以及已启用的 PHP 扩展列表,请确保 'curl'、'openssl'、'pdo_mysql' 和 'zlib' 这些扩展已启用。
php --version
php -m
输出:

至此,你已经在 Rocky Linux 系统上安装了 PHP 和 PHP-FPM 8.2。你还配置了 PHP-FPM 与 Nginx Web 服务器配合运行。在下一步中,你将通过下载源代码来开始 FOSSBilling 的安装。
下载 FOSSBilling 源代码
在这一步中,你将下载 FOSSBilling 源代码,并将 FOSSBilling 安装目录设置为 '/var/www/fossbilling'。
在开始之前,运行下面的 dnf 命令将 unzip 软件包安装到你的系统。
sudo dnf install unzip -y
现在创建一个新目录 ' /var/www/fossbilling ' 并将工作目录切换到其中。然后,你可以通过下面的 curl 命令下载最新稳定版的 FOSSBilling。
mkdir -p /var/www/fossbilling; cd /var/www/fossbilling
curl https://fossbilling.org/downloads/stable -L --output FOSSBilling.zip
输出:

FOSSBilling 源代码下载完成后,你会在工作目录中看到 FOSSBilling.zip 文件。运行下面的 unzip 命令解压 'FOSSBilling.zip ' 文件。然后,将 FOSSBilling 安装目录 ' /var/www/fossbilling ' 的所有权更改为用户和用户组 ' nginx '。
unzip FOSSBilling.zip
sudo chown -R nginx:nginx /var/www/fossbilling
在下载好 FOSSBilling 源代码并配置好安装目录后,接下来你将配置用于运行 FOSSBilling Web 应用的 Nginx 服务器块。
配置 Nginx 服务器块
在这一步中,你将配置一个新的 Nginx 服务器块,用于运行 FOSSBilling Web 应用。在开始之前,请确保你的域名已指向服务器 IP 地址。
使用下面的 nano 编辑器命令创建新的 Nginx 服务器块配置文件 ' /etc/nginx/conf.d/fossbilling.conf '。
sudo nano /etc/nginx/conf.d/fossbilling.conf
将以下行添加到文件中。请务必修改目标安装域名 ' fossbilling.howtoforge.local '。
server {
listen 80;
set $root_path '/var/www/fossbilling';
server_name fossbilling.howtoforge.local;
index index.html index.htm index.php;
root $root_path;
try_files $uri $uri/ @rewrite;
sendfile off;
include /etc/nginx/mime.types;
# Block access to sensitive files and return 404 to make it indistinguishable from a missing file
location ~* .(ini|sh|inc|bak|twig|sql)$ {
return 404;
}
# Block access to hidden files except for .well-known
location ~ /\.(?!well-known\/) {
return 404;
}
# Disable PHP execution in /uploads
location ~* /uploads/.*\.php$ {
return 404;
}
# Deny access to /data
location ~* /data/ {
return 404;
}
location @rewrite {
rewrite ^/page/(.*)$ /index.php?_url=/custompages/$1;
rewrite ^/(.*)$ /index.php?_url=/$1;
}
location ~ \.php {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
# fastcgi_pass need to be changed according your server setup:
# phpx.x is your server setup
# examples: /var/run/phpx.x-fpm.sock, /var/run/php/phpx.x-fpm.sock or /run/php/phpx.x-fpm.sock are all valid options
# Or even localhost:port (Default 9000 will work fine)
# Please check your server setup
fastcgi_pass unix:/run/php-fpm/www.sock;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_intercept_errors on;
include fastcgi_params;
}
location ~* ^/(css|img|js|flv|swf|download)/(.+)$ {
root $root_path;
expires off;
}
}
完成后保存并退出文件。
接下来,运行下面的命令验证 Nginx 配置。然后重启 Nginx 服务以应用更改。如果 Nginx 配置测试成功,你应该会看到类似 ' test successful - syntax ok ' 的输出。
sudo nginx -t
sudo systemctl restart nginx
输出:

至此,FOSSBilling 已经在 Nginx Web 服务器上运行。但它仍使用不安全的 HTTP 连接。在下一步中,你将通过 Certbot 和 Letsencrypt 使用 SSL/TLS 证书来保护 FOSSBilling。
使用 SSL/TLS Letsencrypt 保护 FOSSBilling
在创建好 Nginx 服务器块配置后,接下来你将使用 SSL/TLS 证书来保护 FOSSBilling 安装,这可以通过 Certbot 工具和来自 Letsencrypt 的免费 SSL 证书来实现。
在开始之前,请确保你的域名已指向服务器 IP 地址,并已准备好一个用于注册 Letsencrypt 的电子邮件地址。
现在运行下面的 dnf 命令安装 Certbot 和 Certbot Nginx 插件。当提示时输入 y 并按 ENTER 继续。
sudo dnf install certbot python3-certbot-nginx
输出:

Certbot 安装完成后,运行下面的命令为你的域名生成 SSL/TLS 证书。同时,请务必修改以下命令中的域名和电子邮件地址。
sudo certbot --nginx --agree-tos --redirect --hsts --staple-ocsp --email
[email protected]
-d fossbilling.howtoforge.local
运行该命令后,将为你的域名生成新的 SSL/TLS 证书。同时,它还会在你的 Nginx 服务器块上自动配置 HTTPS,并设置从 HTTP 到 HTTPS 的自动重定向。你的 SSL/TLS 证书将生成在目录 '/etc/letsencrypt/live/fossbilling.howtoforge.local/ ' 中。
开始 FOSSBilling 安装
打开你的 Web 浏览器并访问你 FOSSBilling 安装的域名(例如:https://fossbilling.howtoforge.local/ )。
FOSSBilling 安装程序现在应该会检查并验证你的系统信息。请确保各项要求的状态显示为绿色 ' Ok '。点击 Next 继续。

现在输入你已创建的 MariaDB 数据库和用户的信息,然后再次点击 Next。

接下来,输入 FOSSBilling 的新管理员信息。输入你的用户名、电子邮件地址、密码以及默认货币。然后点击 Next 继续。

当 FOSSBilling 安装成功时,你应该会看到消息 ' Congratulations! FOSSBilling was successfully installed .'(恭喜!FOSSBilling 安装成功)。
你还会看到一些用于完成 FOSSBilling 安装的说明。

回到你的 Rocky Linux 服务器终端,运行以下命令来完成 FOSSBilling 的安装。
删除 FOSSBilling 的 ' install ' 目录。
sudo rm -rf /var/www/fossbilling/install
将 FOSSBilling 配置文件 ' config.php ' 的权限更改为 0644。这将移除其他用户和用户组的 ' write '(写入)权限。
sudo chmod 0644 /var/www/fossbilling/config.php
通过下面的命令为 FOSSBilling 创建一个新的 cron 任务。
crontab -u nginx -e
选择你想使用的代码编辑器。然后将以下行输入到文件中。
*/5 * * * * php /var/www/fossbilling/cron.php
完成后保存文件并退出编辑器。

现在回到 Web 浏览器并点击 Finish(完成)。
你现在将看到以下页面。

如果你点击 ' Client area '(客户区域)按钮,你将被重定向到 FOSSBilling 主页。

如果你点击 ' Admin area '(管理员区域)按钮,你将被重定向到管理员登录页面。
使用你的电子邮件地址和密码登录,然后点击 ' Sign in '(登录)。

如果成功,你应该会看到 FOSSBilling 管理仪表盘。

至此,你已经完成了 FOSSBilling 的安装,并通过 Certbot 和 Letsencrypt 使用 SSL/TLS 证书对其进行了保护。
结论
在本指南中,你已经在 Rocky Linux 9 服务器上安装了一款开源的计费与用户管理软件 FOSSBilling。你还在这套 Rocky Linux 系统上配置了 LEMP 栈(Nginx Web 服务器、MariaDB 数据库和 PHP-FPM)。此外,你还通过 Certbot 和 Letsencrypt 生成的 SSL/TLS 证书保护了 FOSSBilling 安装。
从这儿开始,你现在可以将 FOSSBilling 用于你的业务了。你可以添加更多用户、配置 SMTP 服务器等等。