Pandora挂了,也因此受zhile佬的启发,打算用手头的云服务器搞个论坛。相比博客的几乎单一输出主体,论坛可能更l利于社区交流。

Flarum的简洁风格很入我眼,相比国内的论坛框架,这种精简的风格更适合内容的输出。Flarum官方部署是只有基于composer的部署方案。环境部署复杂,而且对小服务器可能不友好。

1Panel 面板有基于docker的一键安装方式。在安装前需要提前在应用商店安装mysql,如果需要反向代理,还需要安装openresty。然后是安装flarum,一切参数都默认就可,也没啥可改的,如果有多机部署的需求,使用共享的mysql就好(这里不展开)。

反向代理:安装好openresty后,选择网站的创建网站,选择“反向代理”,域名就是你想要解析的域名,例如 :https://next.surger.xyz,其他地方不用改。代理地址:127.0.0.1: 40020,然后确认就完成了服务器端设置。接下来是解析端,也可以说是你的域名提供商端的设置。就设置你的域名解析就好,解析地址就是你的服务器ip地址。不需要加40020端口。

说个题外话:这里推荐将你购买的域名想办法转到cloudflare下,好处多多,唯一不佳的就是,相比国内解析稍微慢一丢丢。不过,cloudflare yyds。

以上部分,大部分教程都有,所以不细讲。

1、访问错误,刷新后跳转到localhost:40020 解决

如果你按照上边部署,是必会遇到这个问题的。需要打开你部署的容器的终端

连接,然后进入flarum目录(一般连接后就是这个目录),输入 ls 回车 查看是否有 config.php 文件。

然后 使用 vi读取这个文件。按 i 进入编辑模式,修改‘url’部分为你反向代理的域名,或者你的本地ip:40020。如果是ip地址+端口是采用http形式访问,如果是域名,根据你的域名解析方案,选择是https还是http。

修改完成后,按esc,然后输入初学者版本:按下shift+:,:,然后输入 wq 回车 完成写入。输入你的填的url就可以正常访问 你的Flarum了。

2、中文设置,以及各种插件安装

现在进入Flarum(初始账号密码都是flarum)是纯英文界面,需要安装语言包。

安装方式是,还是进入docke终端相应的目录下。

composer require flarum-lang/chinese-simplified

然后进入你的论坛管理后台,刷新页面,将简体中文打开即可。其他更多插件可到Flarum 中文社区淘,有的插件已经过期或者不兼容,推荐一个总结可用插件帖:1.8.1测试可用插件

插件安装方式大都为composer require + 包名。安装后都要刷新页面,然后手动开启。

插件卸载方式为:composer remove + 包名

到此,一个基于1panel部署的Flarum就成型了,不要重启你的Flarum 的docker,不要重启你的服务器,不然一切都会被重置。因此相比进一步使用,你要做的是备份这个docker环境。

3. Flarum docker 真 备份

1Panel里面的docker重启是会重置之前配置的所有docker内部设置的,因此部署好后一定要备份这个docker。

首先说明,1Panel里面针对Flarum的所有备份都无法备份你新安装的插件。网站备份没什么用,应用界面的备份实际上备份的你的docker部署时的环境变量那些东西,所以这两是靠不住的。有备份就有重新部署,或者说迁移恢复的需求。Flarum社区的迁移备份都是基于bt面板以及composer部署的,并无法解决1Panel迁移的需求,或者说是docker部署的需求。对于docker部署的 Flarum ,完成docker内部参数设置后,最优备份方案应该是重新打包docker。其次是网络上的docker内部替换大法(直接把docker内flarum下的文件夹直接备份替换掉),很容易造成flarum整个崩溃掉,因此成功率不高。我的备份方案受docker内部替换法启发,但实际上是一种比较笨的方案,但是能完全完成数据+插件的服务器之间的迁移。

需要备份的东西主要包含三部分:mysql表格,docker内部的composer.json,“/opt/1panel/apps/flarum/flarum”目录文件

Mysql+data备份

mysql表格 就备份就好,“/opt/1panel/apps/flarum/flarum”目录文件压缩成tar.gz文件,然后下载或者保存就好。(tar.gz压缩为了减少文件大小,加快下载速度)

composer.json备份

主要是docker内部的composer.json文件,这里面包含了构建Flarum的所有环境的参数。备份方法是,进入你的服务器终端,或者使用一个ssh工具连接你的服务器。先查看你的docker id

docker ps

然后会返回

比如我的 ID是f9d153c91d1c 记住你的这个ID

然后将容器内的flarum拷贝出来,当然你也可用只拷贝composer.json,下边代码会拷贝整个docker内的环境,如果你没有迁移需求。把这个再cp回去理论上是可行的。

docker cp f9d153c91d1c:/opt/ /root # 把f9d153c91d1c换成自己的容器id

然后在root文件夹下,将flarum文件夹打包压缩下载下来,也可以单独下载其中的composer.json文件。

接下来是重点!!!

构建composer下载脚本

composer.json构建插件重下载脚本,有两个方案:

手动

打开json文件,找到require部分。这里冒号前面是包名,后面是版本。

 "require": {
        "composer": "*",
        "flarum-lang/chinese-simplified": "^1.3",
        "flarum/approval": "*",
        "flarum/bbcode": "*",
        "flarum/core": "v1.8.3",
        "flarum/emoji": "*",
        "flarum/flags": "*",
        "flarum/lang-english": "*",
        "flarum/likes": "*",
        "flarum/lock": "*",
        "flarum/markdown": "*",
        "flarum/mentions": "*",
        "flarum/nicknames": "*",
        "flarum/pusher": "*",
        "flarum/statistics": "*",
        "flarum/sticky": "*",
        "flarum/subscriptions": "*",
        "flarum/suspend": "*",
        "flarum/tags": "*",
    },

新建一个txt文本,之后把这些包的composer下载写进一个bash脚本,但是有的包在镜像里面已经默认包含了,所以就可以不用下载了,就可以不同写进去。

#!/bin/bash
composer require flarum-lang/chinese-simplified:^1.3
composer require ...... # 后边为你需要安装的更多的包

将这个txt后缀名改为sh的bash脚本后缀。

自动

使用下面这个python脚本直接从json中构建一个bash脚本(python 3的任何一个解释器都能运行)

import json
import argparse
​
parse = argparse.ArgumentParser(description="")
parse.add_argument("--js",type=str,default=None,help="指定json文件路径")
parse.add_argument("--out",type=str,default=None,help="指定输出文件路径")
args = parse.parse_args()
​
# 指定JSON文件路径
json_file = r'E:\flarum\composer.json' if args.js == None else args.js
​
# 生成的shell脚本名称
output_script = r'E:\flarum\install_packages.sh' if args.out == None else args.out
​
# 读取JSON文件
with open(json_file, 'r') as file:
    data = json.load(file)
​
# 提取require部分
packages = data['require']
​
# 排除的package(默认已安装的)
is_ok_pack = ["composer","flarum/approval","flarum/bbcode","flarum/core","flarum/emoji","flarum/flags","flarum/lang-english",
              "flarum/likes","flarum/lock","flarum/markdown","flarum/mentions",
              "flarum/nicknames","flarum/pusher","flarum/subscriptions",
              "flarum/suspend","flarum/tags","flarum/statistics","flarum/sticky"]
# 生成安装命令
commands = ['#!/bin/bash\n']
for package, version in packages.items():
    if package in is_ok_pack:
        continue
    # 组合包名和版本号
    command = f'composer require {package}:{version}\n'
    commands.append(command)
​
# 写入到shell脚本文件
with open(output_script, 'w') as file:
    file.writelines(commands)
​
print(f'Shell script {output_script} has been generated.')
​

复制到一个txt文本里,重命名为generate_sh.py,然后复制到你保存json文件夹的位置。(保证已经安装python)

打开cmd,cd到你的json存储根目录。

保证你已经安装下载python 并将python移动到文件所在目录,或者指定python的位置。

python generate_sh.py --js "你的json文件名" --out "install_packages.sh" # 替换为你的实际需求

注意 ‼️ ,以上方法只支持使用composer 安装的插件。

4.迁移

在新服务器上,

① 先安装flarum,修改docker内的config.php(如前所述)。然后,确认你的网站论坛能访问。

② 将install_packages.sh上传到服务器上root目录下,然后进入服务器终端,把你的下载脚本送回docker

docker cp /root/install_extension.sh ac0ed2f408dd:/opt/flarum #替换你的容器id

③ 进入flarum 容器终端,输入命令,然后静待安装即可。

bash install_extension.sh

④ 将你拷贝下来的mysql导入到数据库,进行覆盖。(这步尽量在安装脚本执行后,不然容易报错)

⑤ 进入你的网站管理后台,理论上所有设置都会和上一个服务器部署相同。但是你需要更新一下服务器缓存。随便关闭再打开一个插件就可以了。

⑥ 将你的下载下来的data,哪下下来的,放回新服务器哪个位置。

⑦ 对于第⑥步的data 里面存了一些图像相关的数据,比如用户上传头像,图像等。这部分好像并不能完成很好备份。所以,头像和图片上传更推荐使用云的方案。头像推荐“vlssu/flarum-cravatar”这个包,图像存储建议使用对象存储或者免费的图床。

5.心得

1Panel 部署flarum非常方便,但是备份迁移真的一坨答辩。在部署好后建议先做一轮环境备份(composer.json导出),服务器宕机或者docker不小心重启,一不小心你的flarum有得重新一个一个手输下载包。有实力的还是composer部署好。bt部署迁移也容易,不过bt听说“问题”挺大的。最后感谢Flarum及Flarum CN社区的开源贡献者们。

24年2月22日更新:

进行了第一次服务器间大迁移,迁移后Flarum的站点图标和logo会消失,需要重新在后台上传。备份迁移后数据不支持更改域名,会引起跨域错误。


怀揣梦想,翻越山海