更新于 2026年9月5日 2.2k 字 9 分钟

Flarum搭建记录(远程数据库)

最近心血来潮想搞个论坛玩玩,就顺便记录一下搭建过程吧。

小心高血压

此文仅用于记录一个搭建思路,千万千万千万不要学我用远程数据库
远程数据库真的不能用在生产环境,像Umami这样的还好,没多少查询,但是如果像是Flarum这种高频查询的程序嘛…
3/4的时间都耗在数据库查询上了

Flarum简介

Flarum 是一款非常简洁的开源论坛软件。 它响应快速、简便易用,拥有打造一片成功的社区所需的所有功能。 它也极其可扩展,允许达到终极的可定制性。

Flarum 的前身是 esoTalkFluxBB, 它生来就被设计如此:

  • 快速、简单。 不杂乱不臃肿,没有复杂的依赖关系。 Flarum 使用 PHP 构建,因此很容易被部署。 界面采用高性能且小巧的 JavaScript 框架 Mithril
  • 漂亮、响应式。 以人为本的论坛软件。 Flarum 被精心设计以在不同平台间保持一致性和直观性,开箱即用。
  • 强大、可扩展。 您可以客制化、扩展或集成 Flarum 以满足您的社区需求。 Flarum 基于 MIT 协议 发布。
  • 免费、开源。 Flarum 以 MIT 许可证 发布。

你可以在这里阅读更多关于我们 对于 Flarum 的哲学和价值观 的信息。

以上内容来自于 Flarum Documentation

官方论坛:Flarum 社区 — Flarum Community

官方文档:README | Flarum Documentation

中文社区论坛:Flarum 中文社区

需要的东西

  • 一台服务器,最好配置高一点(本文用的是 Ubuntu 22.04
  • 一个域名
  • 一台电脑
  • 一个脑子

碎碎念

真的不要选那种丐版服务器

在开始之前讲一下我的思路吧。
由于我能用于搭建网站的服务器有且仅有一台,而且还是那种 1H512M 5GSSD 的超级丐版机子
然后呢,我又想同时部署皮肤站和论坛,所以在服务器上面安装Mysql是不大可能了的

因为BlessingSkin用的是Postgresql,而目前版本的Flarum仅支持Mysql作为数据库。如果把数据从Postgresql迁移到Mysql会很麻烦 主要是我不会

于是我选择了云端数据库作为我的论坛数据库,论坛的本体还是在我这服务器上的。
Flarum要蛮多php拓展的,我到哪去给你找能满足这些条件的免费服务啊.jpg

于是我就开始找免费的支持Mysql的云端数据库,我选的是 TiDB Cloud.

但是问题来了,要连接TiDB数据库的话需要使用TLS,而安装Flarum的时候并没有相关选项,得修改代码
这就是我要水啊不是,写这篇文章的原因,不然直接看文档安装就行

开始安装

系统更新

先换源,如果你的机子是海外的可以不用换

sudo sed -i 's@//.*archive.ubuntu.com@//mirrors.tuna.tsinghua.edu.cn@g' /etc/apt/sources.list
sudo sed -i 's/security.ubuntu.com/mirrors.tuna.tsinghua.edu.cn/g' /etc/apt/sources.list
sudo sed -i 's/http:/https:/g' /etc/apt/sources.list

更换为清华源,其中 中间那行是更换 安全更新 的源。由于镜像站更新有时不及时,使用镜像源的安全更新源可能会导致你无法及时获取到最新的安全更新,介意的可以不换

然后一套连招更新系统

# 更新软件源 && 更新软件包 && 删除旧软件包
sudo apt update && sudo apt upgrade -y && sudo apt autoremove -y

安装一些小工具

sudo apt install vim git zip -y

安装PHP及其相关拓展

sudo apt install apache2 php php-gd php-mbstring php-curl php-mysql php-zip -y

验证php版本:

php -v

安装Composer

为了方便,我直接用的是腾讯源的文件

# 下载本体文件
wget https://mirrors.tencent.com/composer/composer.phar

# 赋予执行权限
sudo chmod +x composer.phar

# 全局启用 `composer` 指令
sudo mv composer.phar  /usr/local/bin/composer

切换源至腾讯源

composer config -g repos.packagist composer https://mirrors.tencent.com/composer/

验证安装

composer -V

安装 Flarum

通过命令行安装

Flarum官方给出的建议是使用 Composer 安装,指令如下:

composer create-project flarum/flarum .

注意:是要在 你想安装Flarum的 空目录 里面执行

比如说,你想把flarum安装在 /var/www/flarum ,那么你就去 /var/www 下新建一个名为 flarum 的目录,然后cd进去,执行指令就行了

通过解压缩归档进行安装

我的安装方法是直接解压文件,因为Composer安装项目依赖的时候会占用比较高的内存,我这个小破服务器一用Composer安装就被Kill了(悲

创建目录

mkdir /var/www/flarum
cd /var/www/flarum

下载压缩文件

wget https://github.com/flarum/installation-packages/raw/main/packages/v1.x/flarum-v1.x-php8.1.zip

官方给出的所有已经打包好了的Flarum本体文件下载链接:安装 | Flarum Documentation,根据你自己的php版本和需求来选择

随后解压

unzip *.zip

修改文件权限

# 自行修改路径
chown -R www-data:www-data /var/www/flarum

修改安装文件

如果你使用的是本地数据库或者其他不用TLS连接的数据库可跳过此节

前面说了,我用的是TiDB,它连接到数据库时需要用TLS连接,不然会报错

编辑 vendor/flarum/core/src/Install/DatabaseConfig.php 文件,修改内容为:

<?php

/*
 * This file is part of Flarum.
 *
 * For detailed copyright and license information, please view the
 * LICENSE file that was distributed with this source code.
 */

namespace Flarum\Install;

use Illuminate\Contracts\Support\Arrayable;
use PDO;

class DatabaseConfig implements Arrayable
{
    private $driver;
    private $host;
    private $port;
    private $database;
    private $username;
    private $password;
    private $prefix;
    private $sslCa;

    public function __construct(
        $driver, 
        $host, 
        $port, 
        $database, 
        $username, 
        $password, 
        $prefix,
        $sslCa = '/etc/ssl/certs/ca-certificates.crt'
    ) {
        $this->driver = $driver;
        $this->host = $host;
        $this->port = $port;
        $this->database = $database;
        $this->username = $username;
        $this->password = $password;
        $this->prefix = $prefix;
        $this->sslCa = $sslCa;

        $this->validate();
    }

    public function toArray()
    {
        $config = [
            'driver' => $this->driver,
            'host' => $this->host,
            'port' => $this->port,
            'database' => $this->database,
            'username' => $this->username,
            'password' => $this->password,
            'charset' => 'utf8mb4',
            'collation' => 'utf8mb4_unicode_ci',
            'prefix' => $this->prefix,
            'strict' => false,
            'engine' => 'InnoDB',
            'prefix_indexes' => true,
            'options' => [
                PDO::MYSQL_ATTR_SSL_CA => $this->sslCa,
                PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT => true
            ]
        ];

        return $config;
    }
    

    private function validate()
    {
        if (empty($this->driver)) {
            throw new ValidationFailed('Please specify a database driver.');
        }

        if ($this->driver !== 'mysql') {
            throw new ValidationFailed('Currently, only MySQL/MariaDB is supported.');
        }

        if (empty($this->host)) {
            throw new ValidationFailed('Please specify the hostname of your database server.');
        }

        if (! is_int($this->port) || $this->port < 1 || $this->port > 65535) {
            throw new ValidationFailed('Please provide a valid port number between 1 and 65535.');
        }

        if (empty($this->database)) {
            throw new ValidationFailed('Please specify the database name.');
        }

        if (! is_string($this->database)) {
            throw new ValidationFailed('The database name must be a non-empty string.');
        }

        if (empty($this->username)) {
            throw new ValidationFailed('Please specify the username for accessing the database.');
        }

        if (! is_string($this->database)) {
            throw new ValidationFailed('The username must be a non-empty string.');
        }

        if (! empty($this->prefix)) {
            if (! preg_match('/^[\pL\pM\pN_]+$/u', $this->prefix)) {
                throw new ValidationFailed('The prefix may only contain characters and underscores.');
            }

            if (strlen($this->prefix) > 10) {
                throw new ValidationFailed('The prefix should be no longer than 10 characters.');
            }
        }
    }
}

主要是加了 PDO::MYSQL_ATTR_SSL_CAPDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT 这两个配置项,用于默认对数据库连接启用TLS

Apache相关

新建Apache站点配置文件 /etc/apache2/sites-available/flarum.conf

<IfModule mod_ssl.c>
  <VirtualHost *:80>
    RewriteEngine On
    RewriteCond %{HTTPS} off
    RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
  </VirtualHost>
  <VirtualHost *:443>
    ServerAdmin webmaster@localhost

    # 此处修改为你的对应目录
    DocumentRoot /var/www/flarum/public 
    
    # 此处修改为你自己的论坛域名
    ServerName flarum.qiusyan.us.kg

    # 此处修改为你自己的证书文件
    SSLCertificateFile /etc/letsencrypt/live/flarum.qiusyan.us.kg/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/flarum.qiusyan.us.kg/privkey.pem

    # 此处修改为你的对应目录
    <Directory /var/www/flarum/public>
      AllowOverride All
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
  </VirtualHost>
</IfModule>

# vim: syntax=apache ts=4 sw=4 sts=4 sr noet

证书文件生成相关可前往 Blessing Skin 皮肤站搭建 / 备份记录 - 配置SSL证书 部分查看,此处不再赘述

站点和模块相关配置

# 禁用默认站点
sudo a2dissite 000-default.conf

# 启用 flarum 站点
sudo a2ensite flarum.conf

# 启用 rewrite 模块
sudo a2enmod rewrite

# 启用 ssl 模块
sudo a2enmod ssl

# 重新加载 Apache 服务使配置生效
sudo systemctl restart apache2.service

连接数据库

这部分没什么好说的,打开浏览器,输入你的域名,进入安装页面,正常安装就行

最后

其他的扩展/配置啥的自行探索吧,实在是不想写了(x

如果你不想搞也可以用 Freeflarm
只是官方目前还没有上架 支持中文搜索 的扩展,所以使用体验可能不是很好
真要搞个论坛还是建议自己整个服务器搭一个

话说我想在我那小机子上面试试同时安装Mysql和Postgresql(挠头
不知道会不会炸(x

评论