Flarum|从零开始的同人女赛博营地盖房指南(2021年版)

去年写过一个盖房指南,装的是Flarum的beta 13版本,最近鼠师傅说想给她家盖房子于是搜了一下,发现Flarum多年Bata终于放出正式版了!遂拿上测试服务器重新走一遍流程,其实大差不差,不过随着各组建升级,有一些细节上的改动,总之姑且为之一更新。

服务器配置,仅供参考:

  • 2G 内存
  • Ubuntu 20.04 操作系统
  • Nginx 服务器

环境配置

Flarum 要求的环境:

  • PHP 7.1 以上版本,需开启 PHP 扩展:fileinfo, curl, dom, gd, json, mbstring, openssl, pdo_mysql, tokenizer, exif, zip
  • 支持 SSH 并可以运行 Composer
  • MySQL 5.6 以上版本,或 MariaDB 10.0.5 以上版本(本文以 MySQL 为示范)
  • 支持重写 mod_rewrite 的 Apache,或 Nginx(本文以 Nginx 为示范)

注意:请在普通用户下进行安装。在 root 用户下进行安装是有风险的行为,请在sudo级别的用户下进行操作。

安装 PHP 7.4 及其扩展

截止目前,PHP 最高版本是 7.4,所以就先从 PHP 7.4 以及它的扩展开始。

执行:

sudo apt update
sudo apt install -y php7.4 php7.4-cli php7.4-fpm php7.4-common php7.4-curl php7.4-xml php7.4-gd php7.4-json php7.4-mysql php7.4-mbstring php7.4-zip

开启 PHP openssl 扩展,依次执行:

sudo apt install -y openssl
sudo apt install -y libcurl4-openssl-dev
sudo apt install -y libssl-dev

查看 PHP 版本,执行:

php --version

安装好了的话,应该返回:

PHP 7.4.3 (cli) (built: Jul  5 2021 15:13:35) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
    with Zend OPcache v7.4.3, Copyright (c), by Zend Technologies

安装 Composer

直接按照 Composer 的官方下载指引,依次执行:

php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php -r "if (hash_file('sha384', 'composer-setup.php') === '756890a4488ce9024fc62c56153228907f1545c228516cbf63f885e036d37e9a59d27d63f46af1d4d07ee0f76181c7d3') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
php composer-setup.php
php -r "unlink('composer-setup.php');"

因为源在境外,所以拉取的时候可能会有点慢,请耐心等待。

下载完毕后,配置 Composer,执行:

sudo cp composer.phar /usr/local/bin/composer

检查安装。执行:

composer --version

如果成功安装,应返回:

Composer version 2.1.5 2021-07-23 10:35:47

安装 MySQL

执行:

sudo apt install -y mysql-server

检查安装。执行:

mysql --version

如果安装成功,应返回:

mysql  Ver 8.0.26-0ubuntu0.20.04.2 for Linux on x86_64 ((Ubuntu))

进行一些安全配置,执行:

sudo mysql_secure_installation

根据自己的需要选择 yesno,设置完成后登录检查。执行:

sudo mysql -u root -p

键入你刚才设置的密码,就进了 MySQL 的命令行界面。

新建一个数据库用于存放论坛数据,依次执行:

mysql> CREATE DATABASE dbname;
mysql> CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';
mysql> GRANT ALL ON dbname.* TO 'username'@'localhost';
mysql> FLUSH PRIVILEGES;
mysql> quit

其中 dbname 替换为你的数据库名称,username 替换为你的数据库用户名,password 替换为你的数据库密码。

注意:这里的设置,包括上面你的 MySQL root 账号的密码,最好抄到一个你三五年后都还能查到的地方,你换电脑换手机都能找到的那种地方,以防将来有什么需要迁移数据的事情结果你把数据库密码忘记了……那就不知道该上哪里哭了……

安装 Nginx

执行:

sudo apt install -y nginx

检查安装。执行:

nginx -v

如果安装成功,应返回:

nginx version: nginx/1.18.0 (Ubuntu)

配置 Nginx 的事情我们等安装完 Flarum 后再说,先放着。

安装 Flarum

然后就到了真正的安装步骤了,这部分倒是不怎么出问题,因为是直接 Composer 拉取下来安装的。

新建一个文件夹安放你的网站:

sudo mkdir -p /var/www/flarum

给这个文件夹赋予当前用户读写文件夹的权限:

sudo chown -R username:username /var/www/flarum

这个 username 就是你现在所在的 Ubuntu 系统下的用户名。

赋予当前用户权限后,到这个文件夹里去:

cd /var/www/flarum

完整的安装流程参考官方文档:Installation | Flarum Documentation

如果你的服务器在中国大陆境内,可能会因为 Composer 的源在国外而拉取速度感人,这种情况的朋友可以把 Composer 的源更换为国内镜像(此处为阿里云镜像):

composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/

如果服务器机房在境外,或者位于腾讯云,请忽略此步(因为说不定会变得更慢,或直接因为两家打架镜像banned)。

在线安装 Flarum,执行:

composer create-project flarum/flarum .

中间可能会出现这种报错:

[Error Exception]
proc_open(): fork failed - Cannot allocate memory

这是内存炸了,可以通过增加虚拟内存解决。

依次执行:

free -m
sudo dd if=/dev/zero of=/var/swap.1 bs=1M count=1024
sudo mkswap /var/swap.1
sudo swapon /var/swap.1

完了以后再重新执行:

composer create-project flarum/flarum .

这次应该就没问题了。

配置 Nginx

Flarum 安装好后,需要配置 Nginx 让它能够访问。这部分的详细解说直接去看鼠师傅的文章《配置flarum,主要是环境的安装和nginx配置》,这里只抄作业。

如果你还没有装文本编辑器……算了装一个吧,编辑器很多种,我最爱用的还是 vim。

sudo apt install -y vim

有编辑器的跳过这步。

vim 打开以后,保持英文输入状态,按 i 进入编辑模式,按esc 退出编辑模式,按顺序输入:wq 保存并退出,其他的命令大家自己去搜吧网上一搜一大把。

修改 /etc/php/7.2/fpm/php-fpm.conf,执行:

sudo vim /etc/php/7.2/fpm/php-fpm.conf

在最末尾处新插入两行,加上端口监听:

[www]
listen=127.0.0.1:9000

重启 fpm,执行:

/etc/init.d/php7.4-fpm reload

重启完毕后可以使用netstat -lnt命令,查看127.0.0.1:9000端口是否处于LISTEN状态。

修改 /etc/nginx/nginx.conf

sudo vim /etc/nginx/nginx.conf

找到 http 的大括号,在大括号里include /etc/nginx/mime.types;这行附近补全如下内容:

server {
                listen 80;
                client_max_body_size 1024M;
                root /path/to/flarum/public;  //改为你的Flarum主目录对应路径
                server_name <your server>;  //改为你的服务器公网IP或域名
                access_log /var/log/nginx/access.log;
                error_log /var/log/nginx/error.log;
                index index.php;

                # php-fpm
                location  ~* \.php$ {
                        fastcgi_pass 127.0.0.1:9000; //你在fpm中监听的端口
                        fastcgi_index index.php;
                        include /etc/nginx/fastcgi.conf;
                }

                include /path/to/flarum/.nginx.conf;   //改为你的Flarum主目录对应文件
        }

重启 Nginx,执行:

sudo nginx -t
sudo systemctl reload nginx.service

然后访问你的公网域名,应该就能见到 Flarum 的安装界面啦。

赋予目录读写权限

第一次进到安装页面,可能会见到两三个说该目录缺少读写权限的。

请只赋予 Flarum 向导中指明的需要的文件夹读写权限,以保证数据安全,更改读写权限,执行命令:

sudo chown -R www-data:www-data 请求权限的文件夹名/.

一般而言,只要保证 /var/www/flarum 给上权限就可以了。

设置数据库

这步就把你前面数据库设置的时候抄下来的数据库信息填进去就好了,表头可填可不填,看你自己,如果你只有这么一个数据库那留空就行,如果你要管很多很多个数据库,那可以写一下表头保证不会跟其他表单混淆。

然后管理员用户名现在不能采用中文,不过后面可以自己做修改,先填上自己的用户名(英文)和密码和邮箱。

然后就安装完成啦!

允许中文用户名的修改

注意:这一步需要修改 Flarum 核心代码,如非必要,不建议这么做。

允许注册 CJK 用户名

修改 /vendor/flarum/core/src/User/UserValidator.php 的第47行,将'regex:/^[a-z0-9_-]+$/i' 替换为以下三种方式之一:

// 1. CJK基础上,不允许全数字用户名出现,防止个人主页报错。
'regex:/^[-_a-zA-Z0-9\x7f-\xff]*[-_a-zA-Z\x7f-\xff][-_a-zA-Z0-9\x7f-\xff]*$/i',

// 2. CJK基础上,允许全数字用户名
'regex:/^[-_a-zA-Z0-9\x7f-\xff]+$/i',

// 3. Unicode 用户名
'alpha_dash' 

修改 /vendor/flarum/core/src/Forum/Auth/Registration.php 的 101 行,注释掉 $username = preg_replace('/[^a-z0-9-_]/i', '', $username);

允许 @CJK 用户名

修改 /vendor/flarum/mentions/src/ConfigureMentions.php 的 53 行,将 configureUserMentions 函数中 $config->Preg->match 的正则表达式 /\B@(?<username>[a-z0-9_-]+)(?!#)/i 改为:

/\B@(?<username>[\p{L}\p{N}_-]+)(?!#)/ui

修改同文件的 91 行左右,将 configurePostMentions 函数中 $config->Preg->match 的正则表达式 /\B@(?<username>[a-z0-9_-]+)#(?<id>\d+)/i 改为:

/\B@(?<username>[\p{L}\p{N}_-]+)#(?<id>\d+)/ui

增加 API URL CJK 编码转换支持

修改 /vendor/flarum/core/src/Api/Controller/ShowUserController.php 的 52 行,将 getIdForUsername($id) 替换为 getIdForUsername(urldecode($id))

清除缓存

保存退出后,在 Flarum 目录下执行:

php flarum cache:clear
- End -
Comments
Write a Comment