最近心血来潮想搞个论坛玩玩,就顺便记录一下搭建过程吧。
此文仅用于记录一个搭建思路,千万千万千万不要学我用远程数据库 远程数据库真的不能用在生产环境,像 Umami 这样的还好,没多少查询,但是如果像是 Flarum 这种高频查询的程序嘛… 3/4 的时间都耗在数据库查询上了
Flarum 简介 Flarum 是一款非常简洁的开源论坛软件。 它响应快速、简便易用,拥有打造一片成功的社区所需的所有功能。 它也极其可扩展,允许达到终极的可定制性。
Flarum 的前身是 esoTalk 和 FluxBB , 它生来就被设计如此:
快速、简单。 不杂乱不臃肿,没有复杂的依赖关系。 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 的时候并没有相关选项,得修改代码这就是我要水啊不是,写这篇文章的原因,不然直接看文档安装就行
开始安装 系统更新 先换源,如果你的机子是海外的可以不用换
1 2 3 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
更换为清华源,其中 中间那行是更换 安全更新 的源。由于镜像站更新有时不及时,使用镜像源的安全更新源可能会导致你无法及时获取到最新的安全更新,介意的可以不换
然后一套连招更新系统
1 2 sudo apt update && sudo apt upgrade -y && sudo apt autoremove -y
安装一些小工具 1 sudo apt install vim git zip -y
安装 PHP 及其相关拓展 1 sudo apt install apache2 php php-gd php-mbstring php-curl php-mysql php-zip -y
验证 php 版本:
安装 Composer 为了方便,我直接用的是腾讯源的文件
1 2 3 4 5 6 7 8 wget https://mirrors.tencent.com/composer/composer.phar sudo chmod +x composer.phar sudo mv composer.phar /usr/local/bin/composer
切换源至腾讯源
1 composer config -g repos.packagist composer https://mirrors.tencent.com/composer/
验证安装
安装 Flarum 通过命令行安装 Flarum 官方给出的建议是使用 Composer
安装,指令如下:
1 composer create-project flarum/flarum .
注意:是要在 你想安装 Flarum 的 空目录 里面执行
比如说,你想把 flarum 安装在 /var/www/flarum
,那么你就去 /var/www
下新建一个名为 flarum
的目录,然后 cd 进去,执行指令就行了
通过解压缩归档进行安装 我的安装方法是直接解压文件,因为 Composer 安装项目依赖的时候会占用比较高的内存,我这个小破服务器一用 Composer 安装就被 Kill 了(悲
创建目录
1 2 mkdir /var/www/flarumcd /var/www/flarum
下载压缩文件
1 wget https://github.com/flarum/installation-packages/raw/main/packages/v1.x/flarum-v1.x-php8.1.zip
官方给出的所有已经打包好了的 Flarum 本体文件下载链接:安装 | Flarum Documentation ,根据你自己的 php 版本和需求来选择
随后解压
修改文件权限
1 2 chown -R www-data:www-data /var/www/flarum
修改安装文件 如果你使用的是本地数据库或者其他不用 TLS 连接的数据库可跳过此节
前面说了,我用的是 TiDB,它连接到数据库时需要用 TLS 连接,不然会报错
编辑 vendor/flarum/core/src/Install/DatabaseConfig.php
文件,修改内容为:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 <?php 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_CA
和 PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT
这两个配置项,用于默认对数据库连接启用 TLS
Apache 相关 新建 Apache 站点配置文件 /etc/apache2/sites-available/flarum.conf
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 <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 证书 部分查看,此处不再赘述
站点和模块相关配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 sudo a2dissite 000-default.conf sudo a2ensite flarum.conf sudo a2enmod rewrite sudo a2enmod ssl sudo systemctl restart apache2.service
连接数据库 这部分没什么好说的,打开浏览器,输入你的域名,进入安装页面,正常安装就行
最后 其他的扩展 / 配置啥的自行探索吧,实在是不想写了(x
如果你不想搞也可以用 Freeflarm 只是官方目前还没有上架 支持中文搜索 的扩展,所以使用体验可能不是很好 真要搞个论坛还是建议自己整个服务器搭一个
话说我想在我那小机子上面试试同时安装 Mysql 和 Postgresql(挠头 不知道会不会炸(x