FOSSBilling 故障排除

常见问题及其解决方案

在进行故障排除时,您可能需要引用 FOSSBilling 生成的日志。 这些文件的位置可以在我们的 FAQ

HTTP 错误 404

子文件夹安装

如果您尝试使用子文件夹而不是子域名运行 FOSSBilling 的安装,即https://myfancyhost.com/fossbilling 而不是https://fossbilling.myfancyhost.com 那么它就不起作用了。

FOSSBilling 0.4.2 中不建议对子文件夹安装的支持。它们目前不受支持,将来可能会也可能不会返回。请确保您的 FOSSBilling 安装在您网站的根文件夹中,即 public_html,并且您有一个指向它的工作子域名 DNS 记录。

Apache, LiteSpeed, 或 OpenLiteSpeed

如果您使用的是 Apache、LiteSpeed 或 OpenLiteSpeed,并且在尝试访问部分 FOSSBilling 时收到 HTTP 404 错误,请检查以下故障排除步骤:

  • 确保您已安装并启用 mod_rewrite。
  • 验证与 FOSSBilling index.php 文件在同一目录中是否有有效的 .htaccess 文件。
  • 如果您确实有有效的 .htaccess 文件,请验证它是否与默认的 FOSSBilling 文件匹配。
  • 对于那些正在使用 OpenLiteSpeed 的人,您需要在加载新的 .htaccess 文件并生效之前重新启动 OpenLiteSpeed 服务或网络服务器。
  • 如果您检查了上述所有内容,请重新启动您的网络服务器。在重新加载服务之前,不会应用一些配置更改,重新启动服务器将确保一切都有机会重新加载。

Apache

  • 确保您有启用 AllowOverride All。
    • 请在 Stack Overflow 上的这篇文章中了解如何启动。

Cloudflare 某些问题

一些 Cloudflare 功能可能会导致 FOSSBilling 中的问题,以下是功能及其造成的任何已知问题的列表

Auto Minify

  • 使用 Cloudflare 启用“自动最小化”功能可能会导致管理面板中的问题,特别是与文件完整性检查相关的问题。这将导致JS和CSS文件不再加载到您的Web浏览器中,并且管理员面板无法使用。如果此问题影响您,您的浏览器应该显示这样的错误:完整性属性中的“sha384”散列都与子资源的内容不匹配。
  • 这个问题的解决方案是简单地禁用“自动最小化”功能。

权限问题

如果您收到与权限相关的错误(例如 config.php 文件或缓存文件夹),这些故障排除步骤可能会有所帮助。

文件和文件夹权限

  • 如果您正在使用带有“修复权限”按钮的控制面板,请先尝试
  • 验证您网站的文件和文件夹是否应用了正确的权限。通常,755 适用于文件夹,644 适用于 PHP 文件。
    • 在终端内和文档根目录下,您可以使用以下命令手动应用正确的权限:
      • find . -type d -exec chmod 755 {} \; 将 755 应用于所有文件夹。
      • find . -type f -exec chmod 644 {} \; 将 644 应用于所有文件。

文件所有权

如果为文件分配了错误的所有者,那么即使分配了正确的文件权限(755),事情仍然无法正常工作。您可以使用以下步骤检查正确的自己:

  • 创建一个新的 PHP 文件,并将以下内容放在其中: <?php var_dump(get_current_user());?>
  • 在您的网页浏览器中打开 PHP 文件。这应该输出用于执行 PHP 的用户,然后您可以使用它来修复网站的用户/组权限。

RHEL Linux (和衍生品)

那些使用 RHEL 派生 Linux 发行版(RHEL、CentOS、Rocky Linux、AlmaLinux)的人,您可能会发现,无论文件/文件夹权限如何,FOSSBilling 都无法创建文件。请尝试以下解决方案:

  • 配置 SELinux 以允许 PHP(推荐)
    1. 确保您安装了 policycoreutils-python 软件包。
    2. 为文档根设置适当的上下文
      • 注意:在执行之前,请检查以下代码片段中的路径。你的实际路径可能不同。
      1. semanage fcontext -a -t httpd_sys_content_t '/var/www/html(/.*)?'
      2. restorecon -Rv /var/www/html
    3. 配置 SELinux 规则。
      1. setsebool -P httpd_can_network_connect on
      2. setsebool -P httpd_can_sendmail on
      3. 安装 selinux-policy-devel 软件包
      4. setsebool -P httpd_can_network_connect_db on
    4. 重新启动服务器
  • 禁用 SELinux(不鼓励)
    • 编辑 /etc/selinux/config
    • 更改 SELINUX=enforcing 为 SELINUX=disabled 并保存文件
    • 重新启动服务器

未知的 “encore_entry_link_tags”函数。

当尝试在子文件夹(example.com/billing)下使用 FOSSBilling 时,会出现此错误。目前,我们不支持在子文件夹下安装 FOSSBilling,但我们确实打算改进稍后的路由处理方式,这应该可以解决这个问题。修复方法是将 FOSSBilling 安装到子域名(billing.example.com)。

更新后出现错误

如果您在更新后遇到错误,以下步骤可能会帮助您解决您遇到的任何问题。

  1. 查看更改日志,了解任何中断更改或所需的任何手动操作。
  2. 尝试使用回退补丁程序,以确保所有补丁都已正确应用,方法是导航到 yourdomain.com/run-patcher
    • 如果您必须使用回退修补程序,这表明可能存在权限问题,导致更新过程中途停止。我们建议检查故障排除部分的权限问题。
  3. 如果您仍然遇到问题,您可以通过我们的论坛、Discord 或错误报告寻求进一步的帮助。

Cron 问题

如果您在 FOSSBilling 仪表板中看到类似的消息,这意味着 cron 没有在15分钟或更长时间内运行,这是有问题的,因为 FOSSBilling 依靠此功能按预期工作。FOSSBilling warning about cron execution

注意: 默认情况下,FOSSBilling 包括一个回退 cron 行为,该行为将在 cron 自上次执行以来超过15分钟时运行&您访问管理员仪表板。因此,如果您看到此消息,然后去检查上次执行时间,这将是最近的&这并不意味着 cron 工作正常!

  1. 检查 FOSSBilling 错误日志中是否有任何错误。
    • 如果 PHP 版本过时,FOSSBilling 将尝试提醒您,但在某些情况下,旧版本上较新的 PHP 功能会导致我们无法处理的 PHP 编译错误。请参阅解决这个问题的较低步骤。以下是这些错误的任何已知示例:
      • Cannot use 'final' as constant modifier: 当 cron 使用较旧得 PHP 版本 8.1 运行时,会出现此错误。
  2. 验证您是否正确配置了 cron,以便每5分钟运行一次。FOSSBilling 将在 cron 设置(/admin/extension/settings/cron)下显示一个 crontab 示例,其中包含您安装的正确路径
  3. 如果您使用的是多个用户的控制面板,请通过 CLI 登录您的用户帐户,然后输入 php -v,以查看您帐户下的默认 PHP 版本。如果它低于 FOSSBilling 的最低 PHP 版本,请按照以下步骤进行更正。

正在使用不正确的 PHP 版本

由于 cron 作为命令在主机服务器上执行,因此这些步骤与任何域无关,导致控制面板使用其默认或“系统”PHP 版本。通常,对于 FOSSBilling 来说,此版本可能太旧了(请参阅导致 cronjob 失败的系统要求)。

以下步骤可能有助于您解决这个问题:

  1. 如果您的控制面板为您提供了 cron 的 PHP 版本选择器,请使用它来选择一个符合 FOSSBilling 要求的版本。
  2. 尝试指定一个不同的 PHP 二进制文件用于 cron 作业(例如:/usr/bin/php8.1、php8.1 或 php81,而不是简单地使用 php)
  3. 删除任何小于 8.1 的 PHP 版本,以确保它不能使用不正确的版本。
  4. 联系控制面板的维护人员,以及如何为 cron 选择不同的 PHP 版本。
  5. 通过使用 wget 通过 cronjob 调用 API 端点或使用外部服务,切换到使用 cronjob API 端点。
    • 注意: Cron 有时可能是长期运行的。调用 API 端点运行 cron 应该被视为最后的手段,因为您遇到超时的可能性更高。如果您要使用它,您应该考虑增加服务器上的超时限制。