前言

在清理2017年度计划时决定搭建一个论坛,既然决定了就先行动起来再说。
搭建论坛的计划拖延时间超长,原因是曾经在看上去都非常不错的 NodeBB 和 Flarum 之间纠结了很长时间。 NodeBB 是一位好友搭建着玩的论坛的模板; Flarum 则是在 Vivaldi 浏览器的中文论坛 Vivaldi Club 接触到的。最后做出选择的主要原因是用来搭建论坛的 VPS 配置一般,此前已经搭建了别的 PHP 程序,再为了一个没什么机会使用的论坛装上 Node.js 和 MongoDB 就太浪费性能了。考虑到已经有了 LNMP 环境,基于 PHP 的程序应该最为实用, Flarum 只需要满足 PHP 5.5+ 和 MySQL 5.6+,自然而然成为最佳选择。
在此记录一下安装过程。

Flarum 版本的选择

Flarum 当前还在 beta 中。通过官方给出的安装 Flarum 固然可以原汁原味紧跟开发进度,但这样安装成功才只是刚刚迈出第一步。由于 Flarum 原生没有中文,更丰富的功能要通过各种扩展添加,如何配置中文化、如何找到设想中需求的各种扩展并研究使用方法的过程中还有许多坑,这些才是 Flarum 真正的门槛。
收集资料过程中接触到了 FlarumChina 或者 Flarum-CV 这些中文化版本。考虑到无需配置中文化,再加上预整合许多常用扩展,这些优势使得 Flarum 安装过程大幅简化。因此在综合考虑之后选择了 FlarumChina。

FlarumChina 0.1.0-beta.7C 的安装方法

待续……

Flarum 的配置

Nginx 的配置

将如下内容添加到 Nginx 的配置中。

    location / { try_files $uri $uri/ /index.php?$query_string; }
    location /api { try_files $uri $uri/ /api.php?$query_string; }
    location /admin { try_files $uri $uri/ /admin.php?$query_string; }

    location /flarum {
        deny all;
        return 404;
    }

    location ~* \.php$ {
        fastcgi_split_path_info ^(.+.php)(/.+)$;
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param HTTP_PROXY ""; # Fix for https://httpoxy.org/ vulnerability
        fastcgi_index index.php;
    }
    
    location ~* \.html$ {
        expires -1;
    }

    location ~* \.(css|js|gif|jpe?g|png)$ {
        expires 1M;
        add_header Pragma public;
        add_header Cache-Control "public, must-revalidate, proxy-revalidate";
    }

    gzip on;
    gzip_http_version 1.1;
    gzip_vary on;
    gzip_comp_level 6;
    gzip_proxied any;
    gzip_types application/atom+xml
               application/javascript
               application/json
               application/vnd.ms-fontobject
               application/x-font-ttf
               application/x-web-app-manifest+json
               application/xhtml+xml
               application/xml
               font/opentype
               image/svg+xml
               image/x-icon
               text/css
               #text/html -- text/html is gzipped by default by nginx
               text/plain
               text/xml;
    gzip_buffers 16 8k;
    gzip_disable "MSIE [1-6]\.(?!.*SV1)";

基本配置

Nginx 配置无误的话就可以通过网址访问 Flarum。初次安装的 Flarum 如果此时报错提示权限错误,需要手动修改 <Flarum> <Flarum>/assets <Flarum>/storage 三个目录的权限为 775,赋予 Nginx 所需的权限。
目录权限配置无误再刷新就可以看到 Flarum 初次基本配置的页面,包括论坛的名字,主机用户名密码、Flarum 使用的数据库、表前缀(可不填),论坛管理员的用户名邮箱密码这些,确定之后稍作等待就能进入论坛了。
这些设置保存在 <Flarum>/config.php 文件中,安装成功后也可以选择直接手动修改。

使用 Mailgun 发送论坛邮件

Flarum 默认需要注册用户通过邮箱验证,正好可以发挥 Mailgun 的作用。
在论坛管理面板找到邮件设置,
SMTP 服务器依次填入

SMTP 
smtp.mailgun.org
587
TLS

SMTP 账号填入 Mailgun 中配置好的 SMTP Credential,注意需要填入邮箱全名;
邮件发送地址其实可以随便填,一般默认使用论坛域名 [email protected]
(管理面板中的配置都保存在 MySQL 中)

HACK: 取消标题及用户名最小长度限制

方法来自 Vivaldi Club

sed -i 's#min:3#min:1#' \
    vendor/flarum/core/src/Core/Validator/UserValidator.php \
    vendor/flarum/core/src/Core/Validator/DiscussionValidator.php

FlarumChina 已经自带了许多扩展足以满足一般用途,因此完成这些配置后论坛就可以正常使用了。

Flarum 的备份和迁移

Flarum 目录下需要备份的内容有

    ├── assets
    │   ├── avatars
    │   │   └── *
    │   ├── images
    │   │   └── *
    │   ├── files
    │   │   └── *
    │   ├── extensions
    │   │   └── *
    └── config.php
    
    (images/files/extensions文件需要开启对应的插件才有)

其中 config.php 是论坛的基本配置(主要是数据库); assets/avatars 是论坛用户的头像,其他目录是上传到论坛的图片、文件等,需要开启相应插件。
再导出数据库,论坛的备份就完成了。

恢复时本来以为直接导入备份的数据库和文件就行,不过实际操作中似乎总是存在问题。最后的经验是先配置 Nginx 并重复一遍初次安装配置的过程,再导入数据库,将上述备份的 config.php<Flarum>/assets 导入 Flarum 目录下。
如果改变了论坛的域名,要到论坛管理面板手动修改 CDN 的设置。

其他问题

  • 后台中启用和删除 Secure HTTPS 扩展的操作曾导致论坛无法打开变成白板。想到的补救措施是手动修改 Flarum 数据库的 settings 表 -> extensions_enabled,将 "davis-securehttps" 删除。
    (不知道为什么后来可以正常启用了)
  • Flarum 需要 php 的 fileinfo proc proc_get_status 模块。

FlarumChina 0.1.0-beta.7B 的安装方法(推荐使用最新版本)

FlarumChina-beta.7B 经过了高度定制不能使用 composer 安装。
从零开始有两种安装途径:

  1. 使用安装工具
    FlarumChina 在 Github 提供了一个安装工具,使用 git clone 到本地之后配置 Nginx 将网站指向这个 index.php 所在目录,再通过浏览器访问网站即可自动下载安装 Flarum,注意目录的权限设置即可。
  2. 全新安装
  • 方法一 直接下载
    /home/wwwroot 目录下执行
wget -N -O flarum.tar.gz https://github.com/skywalker512/FlarumChina/archive/v0.1.0-beta.7b.tar.gz
tar zxvf flarum.tar.gz
mv /home/wwwroot/FlarumChina-0.1.0-beta.7b /home/wwwroot/flarum
  • 方法二 使用 Git
    /home/wwwroot 目录下执行
git clone https://github.com/skywalker512/FlarumChina flarum --depth=1

然后修改 Nginx 配置将网站指向 FlarumChina 所在目录即可。

Flarum 的官方安装方法

官方给出的文档非常简单,然而这中间踩了很多坑。

  1. 在空的安装目录下执行
$ composer create-project flarum/flarum . --stability=beta
  1. 添加 Nginx 配置

官方文档完

  1. 访问论坛、完成基本配置
  2. 安装中文语言包,在安装目录下执行
$ composer require jsthon/flarum-ext-simplified-chinese

然后到扩展管理面板激活
5. 安装各种必要的扩展……
6. 手动支持 CJK 字符注册、中文搜索、编辑器……

7. 放弃

结语:一些废话

执行第一步的过程中先后遇到了目录权限不对 composer 报错,未启用 fileinfo proc proc_get_status 等问题;安装完成初次访问论坛时提示权限错误,相关目录权限未设置成 775;安装 @Csineneo中文语言包时似乎是 PHP 不满足;换了 Jsthon 的中文包安装时又出现权限错误,改了一下目录用户不知道为什么就解决了。最后考虑到以后还有各种中文化与扩展的问题,还是换路子比较轻松……

专业的事还是要交给专业的人来做。


参考:

  1. Vivaldi Club[1]
  2. FlarumChina[2]
  3. Jsthon[3]
  4. Flarum[3:1]
  5. VPS侦探[4]

  1. Flarum 论坛程式讨论 ↩︎

  2. FlarumChina-beta.7B ↩︎

  3. 轻论坛:Flarum 程序安装指南 ↩︎ ↩︎

  4. Installation ↩︎