FOSSBilling 是免费的开源计费,旨在为客户和卖家提供方便。FOSSBilling 是 BoxBilling 的一个分支。它通过直观的界面为客户提供卓越的体验,并支持多种支付网关。FOSSBilling 适用于多种企业,从小型到中型甚至大型企业。FOSSBilling 可以帮助您自动化开具发票、收款以及客户管理和沟通。
在本指南中,我将在 Rocky Linux 9 服务器上安装 FOSSBilling。本演练包括安装 Nginx Web 服务器、MariaDB 数据库服务器、PHP-FPM 8.2 和用于生成 SSL/TSL 证书的 Certbot 工具。最后,您将拥有可用于您日常业务的计费和客户管理解决方案。
先决条件
要完成本指南,您将需要满足以下要求:
- 安装了 Rocky Linux 9 的服务器 - 本示例使用主机名为“ fossbilling-rocky ”的 Rocky Linux。
- 具有 sudo/root 管理员权限的非 root 用户。
- SELinux 以宽容模式运行。
- 指向您的服务器 IP 地址的域名 - 此示例使用子域“ fossbilling.hwdomain.io ”。
如果这些要求都准备好了,您就可以完成 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 协议已添加到防火墙中。
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 确认。
- 删除默认数据库测试?输入 y 确认。
- 重新加载表权限并应用更改?输入 y 确认。
安装并运行 MariaDB 服务器后,您接下来将创建一个新的 MariaDB 数据库和用户,用于 FOSSBilling 安装。
创建数据库和用户
在此步骤中,您将创建一个新的 MariaDB 数据库和用户,用于 FOSSBilling 安装。
运行以下“ mariadb ”命令通过root用户登录MariaDB。当要求输入密码时,输入您的 MariaDB root 密码并按 ENTER。
sudo mariadb -u root -p
登录到 MariaDB shell 后,运行以下查询来创建新的 MariaDB 数据库和用户。在此示例中,您将使用用户“ fossbilling ”创建一个新数据库fossbillingdb。另外,请务必更改以下查询中的默认密码。
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,以确保该用户有权访问“ fossbiilingdb ”数据库。
输出“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
PHP 8.x 支持最新版本的 FOSSBilling。在此步骤中,您将通过 Remi 存储库安装 PHP 和 PHP-FPM 8.2。因此,首先,您将设置 Remi 存储库,安装 PHP 和 PHP-FPM 软件包,然后使用 Nginx Web 服务器设置 PHP-FPM。
通过下面的 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。
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 的发行版上使用 Nginx 运行 PHP-FPM,必须确保 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 处于“活动(正在运行) ”的输出,这确认 PHP-FPM 正在运行。并输出'已加载.../.../; 已启用;' 确认 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 命令将解压缩包安装到您的系统。
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.hwdomain.io ”。
server {
listen 80;
set $root_path '/var/www/fossbilling';
server_name fossbilling.hwdomain.io;
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 配置测试成功,您应该得到诸如“测试成功 - 语法正确”之类的输出。
sudo nginx -t
sudo systemctl restart nginx
输出:
此时,FOSSBilling 已与 Nginx Web 服务器一起运行。但是,它仍然处于不安全的 HTTP 连接中。在下一步中,您将通过 Certbot 和 Letsencrypt 使用 SSL/TLS 证书保护 FOSSBiling。
使用 SSL/TLS 保护 FOSSBilling Letsencrypt
创建 Nginx 服务器块配置后,接下来您将使用 SSL/TLS 证书保护 FOSSBilling 安装的安全,并且可以通过使用 Certbot 工具和 Letsencrypt 的免费 SSL 证书来实现此目的。
在开始之前,请确保您的域名指向服务器 IP 地址,并确保您有一个用于注册 Letscrypt 的电子邮件地址。
现在运行以下 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 alice@hwdomain.io -d fossbilling.hwdomain.io
使用此命令,将为您的域名生成新的 SSL/TLS 证书。此外,这将自动在您的 Nginx 服务器块上设置 HTTPS,并设置从 HTTP 到 HTTPS 的自动重定向。您的 SSL/TLS 证书生成到目录“/etc/elstencrypt/live/fossbilling.hwdomain.io/ ”。
开始 FOSSBilling 安装
打开 Web 浏览器并访问 FosssBilling 安装的域名(即:https://fossbilling.hwdomain.io/)。
FOSSBilling 安装程序现在应该检查并验证您的系统详细信息。确保需求的状态为“正常”,颜色为绿色。单击“下一步”继续。
现在输入您创建的 MariaDB 数据库和用户的详细信息,然后再次单击“下一步”。
接下来,输入 FOSSBilling 的新管理员详细信息。输入您的用户名、电子邮件地址、密码和默认货币。然后,单击“下一步”继续。
当 FOSSBilling 安装成功时,您应该收到消息“恭喜!” FOSSBilling 已成功安装。'。
您还将看到一些完成 FOSSBilling 安装的说明。
返回 Rocky Linux 服务器终端并运行以下命令来完成 FOSSBilling 安装。
删除 FOSSBilling 的“安装”目录。
sudo rm -rf /var/www/fossbilling/install
将 FOssBilling 配置文件“ config.php ”的权限更改为0644。这将删除其他人和组的“写入”权限。
sudo chmod 0644 /var/www/fossbilling/config.php
通过以下命令为 FOSSBilling 创建一个新的 cron。
crontab -u nginx -e
选择您要使用的代码编辑器。然后将以下行输入到文件中。
*/5 * * * * php /var/www/fossbilling/cron.php
完成后保存文件并退出编辑器。
现在返回 Web 浏览器并单击“完成”。
您现在将看到以下页面。
如果您单击“客户区域”按钮,您将被重定向到 FOSSBilling 主页。
如果您单击“管理区域”按钮,您将被重定向到管理员登录页面。
使用您的电子邮件地址和密码登录,然后点击“登录”。
如果成功,您应该会看到 FOSSBilling 管理仪表板。
至此,您现在已经完成了 FOSSBilling 的安装,并通过 Certbot 和 Letsencrypt 使用 SSL/TLS 证书进行保护。
结论
在本指南中,您已在 Rocky Linux 9 服务器上安装了开源计费和用户管理 FOSSBilling。您还已经在 Rocky Linux 系统上配置了 LEMP Stack(Nginx Web 服务器、MariaDB 数据库和 PHP-FPM)。除此之外,您还使用通过 Certbot 和 Letsencrypt 生成的 SSL/TLS 证书来保护 FOSSBilling 安装的安全。
从这里,您现在可以将 FOSSBilling 用于您的业务。您可以添加更多用户、设置 SMTP 服务器等等。