本页内容

  • 先决条件
  • 安装 Nginx Web 服务器
  • 安装并配置 UFW 防火墙
  • 安装并配置 MariaDB 服务器
  • 安装并配置 PHP-FPM 8.2
  • 下载 FOSSBilling 源代码
  • 配置 Nginx 服务器块
  • 使用 Letsencrypt 的 SSL/TLS 证书保护 FossBilling
  • 开始 FOSSBilling 安装
  • 结论

FOSSBilling 是免费的开源账单系统,专为方便客户和卖家而设计。FOSSBilling 是 BoxBilling 的一个分支(fork)。它通过直观的界面为客户提供出色的体验,并支持多种支付网关。FOSSBilling 适用于多种规模的企业,从小型到中型,甚至大型企业都可使用。FOSSBilling 可以帮助你自动化发票开具、收款以及客户管理与沟通。

在本指南中,你将在 Debian 11 服务器上安装开源账单解决方案 FossBilling。你将使用 LEMP 技术栈(Linux、Nginx、MariaDB 和 PHP-FPM)来部署 FossBilling,并通过 Certbot 和 Letsencrypt 使用 SSL/TLS 证书来保护 FossBilling。

先决条件

完成本指南,你需要满足以下要求:

  • 一台 Debian 11 服务器——本例使用主机名为 ' fossbilling-server ' 的 Debian 服务器。
  • 一个具有 sudo/root 管理员权限的非 root 用户。
  • 一个解析到服务器 IP 地址的域名——本例使用子域名 ' fossbilling.howtoforge.local '。

满足这些条件后,你就可以开始安装 FossBilling 了。

安装 Nginx Web 服务器

在第一步中,你将在 Debian 系统上安装 Nginx Web 服务器。然后,你将验证 Nginx 服务,确保其正在运行并已启用。

首先,运行以下 apt 命令来更新并刷新你的 Debian 软件包索引。

sudo apt update

仓库更新完成后,通过以下 apt 命令安装 Nginx Web 服务器。当提示时,输入 y 确认并按 ENTER 继续。

sudo apt install nginx

输出:

在 Debian 11 服务器上通过 Nginx 部署 FossBilling 计费系统教程

Nginx 安装完成后,运行以下 systemctl 命令来验证 Nginx 服务状态,确保其正在运行。

sudo systemctl is-enabled nginx
sudo systemctl status nginx

以下输出确认 Nginx 服务正在运行且已启用,这意味着它会在系统启动时自动启动。

在 Debian 11 服务器上通过 Nginx 部署 FossBilling 计费系统教程

安装并配置 UFW 防火墙

在 Debian 上,默认防火墙是 iptables。为了简化操作,你可以安装 UFW 来管理系统的防火墙。

在此步骤中,你将安装 UFW 并开放 SSH、HTTP 和 HTTPS 服务,以允许用户/客户端访问。

通过执行以下 apt 命令安装 UFW。当提示时输入 y 并按 ENTER 继续。

sudo apt install ufw

输出:

在 Debian 11 服务器上通过 Nginx 部署 FossBilling 计费系统教程

UFW 安装完成后,运行以下 ufw 命令开放 OpenSSH 和 ' WWW Full' 应用。OpenSSH 应用将开放默认的 SSH 端口 22,而 'WWW Full' 应用将开放端口 80 和 443 上的 HTTP 与 HTTPS 服务。

sudo ufw allow OpenSSH
sudo ufw allow "WWW Full"

成功后,你应该会看到类似 ' Rules updated ' 的输出。

接下来,运行以下 ufw 命令启动并启用 UFW 防火墙。当提示时输入 y 确认并按 ENTER 继续。

sudo ufw enable

输出 ' Firewall is active and enabled on system startup ' 确认 UFW 防火墙正在运行,并将在系统启动时自动运行。

在 Debian 11 服务器上通过 Nginx 部署 FossBilling 计费系统教程

最后,运行以下命令验证 UFW 防火墙状态。你应该会看到 UFW 防火墙处于 ' active ' 状态,并在其上添加了 OpenSSH 和 ' WWW Full ' 应用。

sudo ufw status

输出:

在 Debian 11 服务器上通过 Nginx 部署 FossBilling 计费系统教程

安装并配置好 UFW 防火墙后,你将开始安装 MariaDB 数据库服务器。

安装并配置 MariaDB 服务器

在此步骤中,你将安装 MariaDB 服务器,通过 'mariadb-secure-installation' 加固 MariaDB 部署,然后创建 FossBilling 将使用的新 MariaDB 数据库和用户。

使用以下 apt 命令安装 MariaDB 服务器。当提示时输入 y 并按 ENTER 继续。

sudo apt install mariadb-server

输出:

在 Debian 11 服务器上通过 Nginx 部署 FossBilling 计费系统教程

MariaDB 安装完成后,运行以下 systemctl 命令来验证 MariaDB 服务,确保其正在运行。

sudo systemctl is-enabled mariadb
sudo systemctl status mariadb

以下输出确认 MariaDB 服务器正在运行且已启用,这意味着它会在系统启动时自动启动。

在 Debian 11 服务器上通过 Nginx 部署 FossBilling 计费系统教程

MariaDB 服务器运行后,你接下来将通过 ' mariadb-secure-installation ' 命令加固 MariaDB 部署。运行以下 '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 root 密码,接下来将创建一个用于 FossBilling 安装的新数据库和用户。

首先,运行以下 ' mariadb ' 命令登录 MariaDB shell。当提示输入密码时,输入你的 MariaDB root 密码。

sudo mariadb -u root -p

接下来,运行以下查询为 FossBilling 创建新的数据库和用户。在本例中,你将创建一个名为 ' fossbillingdb ' 的数据库,以及 MariaDB 用户 ' fossbilling '。同时,请务必修改以下查询中的密码。

CREATE DATABASE fossbillingdb;
CREATE USER fossbilling@localhost IDENTIFIED BY 'password';
GRANT ALL ON fossbillingdb.* TO fossbilling@localhost WITH GRANT OPTION;
FLUSH PRIVILEGES;

输出:

在 Debian 11 服务器上通过 Nginx 部署 FossBilling 计费系统教程

现在验证 MariaDB 用户 ' fossbilling ' 的权限,确保该用户有权访问数据库 ' fossbillingdb '。

SHOW GRANTS FOR fossbilling@localhost;
quit

现在输入 quit 退出。

输出:

在 Debian 11 服务器上通过 Nginx 部署 FossBilling 计费系统教程

至此,你已经安装了 MariaDB 服务器,配置了 MariaDB root 用户,并创建了 FossBilling 所用的数据库和用户。下一步,你将在 Debian 服务器上安装并配置 PHP-FPM。

安装并配置 PHP-FPM 8.2

在此步骤中,你将在 Debian 服务器上安装并配置 PHP-FPM。最新版本的 FossBilling 支持 PHP 8.x。因此,你现在将为 FossBilling 安装 PHP 8.2。

在此之前,你必须向 Debian 服务器添加一个第三方 PHP 仓库。这是因为 Debian 11 的仓库中尚未提供 PHP 8.0。

首先,运行以下命令为 Debian 系统安装基础依赖。当提示时输入 y 并按 ENTER 继续。

sudo apt install ca-certificates gnupg2 apt-transport-https software-properties-common

输出:

在 Debian 11 服务器上通过 Nginx 部署 FossBilling 计费系统教程

现在运行以下 wget 命令下载 PHP 仓库的 GPG 密钥。

wget -q -O /usr/share/keyrings/sury-php.gpg https://packages.sury.org/php/apt.gpg

接下来,运行以下命令将 PHP 仓库添加到你的 Debian 服务器。

echo "deb [signed-by=/usr/share/keyrings/sury-php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main" | tee /etc/apt/sources.list.d/sury-php.list

然后使用以下 apt 命令刷新并更新软件包索引。这将下载新 PHP 仓库的软件包列表索引。

sudo apt update

输出:

在 Debian 11 服务器上通过 Nginx 部署 FossBilling 计费系统教程

现在运行以下 apt 命令安装 PHP 和 PHP-FPM 软件包。当提示时输入 y 并按 ENTER 继续。同时,确保你安装的 PHP 版本为 PHP 8.1 或 8.2。

sudo apt install php php-fpm

输出:

在 Debian 11 服务器上通过 Nginx 部署 FossBilling 计费系统教程

然后你可以通过以下 apt 命令安装 FossBilling 所需的 PHP 扩展。输入 y 确认安装并按 ENTER 继续。

sudo apt install libcurl4-openssl-dev php-mysql php-curl php-cli php-zip php-common php-mbstring php-xml

输出:

在 Debian 11 服务器上通过 Nginx 部署 FossBilling 计费系统教程

PHP 软件包安装完成后,使用以下 nano 编辑器命令打开文件 '/etc/php/8.2/fpm/php.ini'。

sudo nano /etc/php/8.2/fpm/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/8.2/fpm/php.ini'。

接下来,运行以下 systemctl 命令重启 PHP-FPM 服务以应用更改。

sudo systemctl restart php8.2-fpm

然后验证 PHP-FPM 服务,确保其已启用且正在运行。输出 ' active (running) ' 确认 PHP-FPM 服务正在运行,而输出 'loaded (.../php8.2.service; enabled;..) ' 确认该服务已启用,并将在系统启动时自动运行。

sudo systemctl is-enabled php8.2-fpm
sudo systemctl status php8.2-fpm

输出:

在 Debian 11 服务器上通过 Nginx 部署 FossBilling 计费系统教程

最后,运行以下命令验证 Debian 系统上的 PHP 版本和已启用扩展列表。在你的终端中,你应该会看到类似 ' PHP 8.2 ' 的输出,这确认你已安装 PHP 8.2。对于 PHP 扩展列表,请确保 ' pdo_mysql'、'curl'、'openssl' 和 'zlib' 扩展已启用。

php --version
php -m

输出:

在 Debian 11 服务器上通过 Nginx 部署 FossBilling 计费系统教程

你已经安装了包含 Nginx Web 服务器、MariaDB 数据库服务器和 PHP-FPM 的 LEMP 技术栈。现在你可以下载并安装 FossBilling 了。

下载 FOSSBilling 源代码

在此步骤中,你将下载 FossBilling 源代码并设置 FossBilling 安装目录,该目录将位于 ' /var/www/fossbilling ' 目录下。

首先,运行以下 apt 命令安装 unzip 软件包。

sudo apt 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 '。

在 Debian 11 服务器上通过 Nginx 部署 FossBilling 计费系统教程

运行以下 unzip 命令解压文件 ' FOSSBilling.zip '。然后,将 FossBilling 安装目录 '/var/www/fossbilling' 的所有权更改为用户和组 ' www-data '。

unzip FOSSBilling.zip
sudo chown -R www-data:www-data /var/www/fossbilling

FossBilling 源代码已下载且安装目录已正确配置。接下来你将创建一个新的 Nginx 服务器块(server block)配置,用于运行 FossBilling。

配置 Nginx 服务器块

在此步骤中,你将创建一个新的 Nginx 服务器块配置,用于运行 FOSSBilling 应用程序。开始之前,请确保你有一个解析到 Debian 服务器 IP 地址的域名。本例使用的域名为 'fossbiling.howtoforge.local'。

运行以下 nano 编辑器命令创建新的 Nginx 服务器块配置 ' /etc/nginx/sites-available/fossbilling' 。

sudo nano /etc/nginx/sites-available/fossbilling

将以下服务器块配置添加到文件中。请务必修改域名 'fossbilling.howtoforge.local',并确保你拥有正确的 PHP-FPM sock 文件路径。

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 to 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/php-fpm.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 服务器块文件 ' /etc/nginx/sites-available/fossbilling '。然后验证 Nginx 配置,确保配置文件正确。

sudo ln -s /etc/nginx/sites-available/fossbilling /etc/nginx/sites-enabled/
sudo nginx -t

如果成功,你应该会看到类似 'test successful - syntax ok ' 的输出。

最后,运行以下 systemctl 命令重启 Nginx 服务以应用更改。

sudo systemctl restart nginx

输出:

在 Debian 11 服务器上通过 Nginx 部署 FossBilling 计费系统教程

Nginx 服务器块创建完成后,你现在可以访问并开始 FossBilling 的安装。但在此之前,通常建议通过 Certbot 和 Letsencrypt 生成的 SSL/TLS 证书来保护你的 FossBilling。

使用 Letsencrypt 的 SSL/TLS 证书保护 FossBilling

此时,你的 FossBilling 安装已可访问,但仍使用不安全的 HTTP 协议。为了保护 FossBilling,你可以通过向 Nginx 服务器块添加 SSL/TLS 证书来实现安全的 HTTPS 连接。为此,你可以通过 Certbot 和 Letsencrypt 生成免费的 SSL/TLS 证书。

开始之前,请确保你的域名已解析到服务器 IP 地址,并确保你有一个将用于注册 Letsencrypt 的电子邮件地址。

现在运行以下 apt 命令安装 Certbot 和 Certbot Nginx 插件。当提示时输入 y 并按 ENTER 继续。

sudo apt install certbot python3-certbot-nginx

输出:

在 Debian 11 服务器上通过 Nginx 部署 FossBilling 计费系统教程

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/elstencrypt/live/fossbilling.howtoforge.local/ '。

开始 FOSSBilling 安装

打开你的网页浏览器,访问你的 FossBilling 安装域名(例如:https://fossbilling.howtoforge.local/)。

FossBilling 安装程序现在应该会检查并验证你的系统详情。请确保各项要求的状态显示为绿色的 ' Ok '。点击 Next 继续。

在 Debian 11 服务器上通过 Nginx 部署 FossBilling 计费系统教程

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

在 Debian 11 服务器上通过 Nginx 部署 FossBilling 计费系统教程

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

在 Debian 11 服务器上通过 Nginx 部署 FossBilling 计费系统教程

FossBilling 安装成功后,你应该会看到消息 'Congratulations! FOSSBilling was successfully installed.' 。

你还会看到一些完成 FossBilling 安装的说明。

在 Debian 11 服务器上通过 Nginx 部署 FossBilling 计费系统教程

返回你的 Debian 服务器终端,运行以下命令来完成 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 www-data -e

选择你想使用的代码编辑器。然后将以下行输入到文件中。

*/5 * * * * php /var/www/fossbilling/cron.php

完成后保存文件并退出编辑器。

在 Debian 11 服务器上通过 Nginx 部署 FossBilling 计费系统教程

现在返回网页浏览器并点击 Finish 。

现在你将看到以下页面。

在 Debian 11 服务器上通过 Nginx 部署 FossBilling 计费系统教程

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

在 Debian 11 服务器上通过 Nginx 部署 FossBilling 计费系统教程

如果你点击 ' Admin area '(管理区)按钮,你将被重定向到管理员登录页面。

使用你的电子邮件地址和密码登录,然后点击 ' Sign in '。

在 Debian 11 服务器上通过 Nginx 部署 FossBilling 计费系统教程

如果成功,你应该会看到 FossBilling 的管理后台仪表盘。

在 Debian 11 服务器上通过 Nginx 部署 FossBilling 计费系统教程

至此,你已完成 FossBilling 的安装,并通过 Certbot 和 Letsencrypt 使用 SSL/TLS 证书进行了保护。

结论

在本指南中,你已在 Debian 11 服务器上安装了开源账单与用户管理系统 FOSSBilling。你还在 Debian 系统上配置了 LEMP 技术栈(Nginx Web 服务器、MariaDB 数据库和 PHP-FPM)。此外,你还通过 Certbot 和 Letsencrypt 生成的 SSL/TLS 证书保护了 FOSSBilling 安装。

从这里开始,你现在可以将 FOSSBilling 用于你的业务。你可以添加更多用户、设置 SMTP 服务器,等等。