前言

自从有了服务器之后一直有点蠢蠢欲动,纯静态博客已经满足不了我了,搭建一个轻社区的想法疯狂的在脑子里生长,今天突然有个机会了解到了Flarum这个开源轻社区,强大,方便,体积小,响应快

官方GitHub:https://github.com/flarum/flarum

官方的部署过程,,,emm,一言难尽

然后看到了宝塔面板的应用商店里居然有现成的docker版本,果断下载安装,结果,,,emm,根本就没反应啊喂,坐牢塔根本不给任何的提示,百度也搜不到相关教程,说是要缺少配置,到底要配置什么你倒是告诉我啊喂,果断放弃

继续百度,在茫茫人海里突然看到了一个大佬发布的使用docker手动部署的博文,简直就是天籁之音,思路一下子打开

教程原文:https://blog.csdn.net/qq_37887537/article/details/130071605

docker镜像地址:https://github.com/mondediefr/docker-flarum

注:这是第三方打包的地址,而且这个仓库已经好几年没有更新了,大概率版本是比较老旧了,但是我去dockerhub看了一眼,居然是三天前更新的,所以本文中下方等会要写的配置文件中的版本,就见仁见智了,可以自己尝试更新一下

开始部署

第一步:安装docker和docker-compose就不赘述了,可以看https://imbhj.com/posts/e5f6a19a/

第二步:拉取镜像

1
2
3
4
#最新版
sudo docker pull mondedie/flarum:latest
#稳定版(推荐):
sudo docker pull mondedie/flarum:stable

第三步:写配置文件

在自己能看的顺眼的位置新建一个文件夹作为根目录,名字随意

cd进入新建好的文件夹

touch一个新的文件: docker-compose.yml (文件名必须是这个)

vim docker-compose.yml

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
#未知含义的版本号
version: "3"

services:
flarum:
#镜像及版本
image: mondedie/flarum:stable
#容器名称
container_name: flarum
#环境文件路径
env_file:
- ./envfile/flarum.env
#挂载的其他文件路径
volumes:
#静态资源目录
- ./assets:/flarum/app/public/assets
#扩展/插件目录
- ./extensions:/flarum/app/extensions
#日志目录
- ./logs:/flarum/app/storage/logs
#nginx配置目录
- ./nginx:/etc/nginx/flarum
#容器端口映射
ports:
- 8000:8888
#数据库依赖
depends_on:
- mariadb

mariadb:
#数据库镜像及版本
#需要注意的是这里的数据库版本原作者用的是10.5版本,我这里修改到了11.3
image: mariadb:11.3
#数据库容器名称
container_name: mariadb
#数据库端口映射
ports:
- 3306:3306
environment:
#root密码
- MYSQL_ROOT_PASSWORD=123456
#数据表名称
- MYSQL_DATABASE=flarum
#用户名
- MYSQL_USER=flarum
#用户密码
- MYSQL_PASSWORD=123456
#数据库文件目录
volumes:
- ./db:/var/lib/mysql

建议删除注释食用

注:冒号前面的目录是挂载的宿主机目录,可以自己修改,冒号后面的目录是映射的容器内部的目录,不可以更改,否则读取不到数据

cd进入新建好的env_file文件夹

touch一个新的文件: flarum.env (文件名同你配置文件里的即可)

vim flarum.env

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
#debug开关
DEBUG=false
#站点IP,如果绑定了域名的话,可以直接设置为访问的域名,如果在局域网内访问也必须更改为局域网的地址
#设置域名之后再用本地IP端口访问会产生跨域请求问题
FORUM_URL=http://127.0.0.1:8000

##数据库配置
#数据库域名,默认为容器名称
#如果要修改数据库端口,此项更改为宿主机域名,防火墙开更改后的端口
DB_HOST=mariadb
#数据表名称
DB_NAME=flarum
#数据库用户名
DB_USER=flarum
#数据库用户密码
DB_PASS=123456
#数据库索引
DB_PREF=flarum_
#数据库端口
DB_PORT=3306

##站点配置
#管理员用户名
FLARUM_ADMIN_USER=admin
#管理员密码(必须大于8个字符)
FLARUM_ADMIN_PASS=123456789a
#管理员邮箱
FLARUM_ADMIN_MAIL=admin@domain.tld
#站点标题
FLARUM_TITLE=myflarum

建议删除注释食用

第四步:启动

1
2
3
4
#需要有网络的情况下执行,会自动下载数据库镜像
sudo docker compose up -d mariadb
#启动flarum
sudo docker compose up -d flarum

第五步:访问

直接访问配置文件中的IP地址即可,本机访问127即可,局域网必须设置好局域网IP才可以,自定义域名同理

关闭容器:(在我们创建的根目录下执行)

1
sudo docker compose down

第二次启动容器的时候就可以一键执行:(在我们创建的根目录下执行)

1
sudo docker compose up -d

容器关闭后重新启动,插件需要重新启用并且设置也会重置,但不需要重新安装

更新

在创建的根目录下先关闭容器(如果开启的话)

编辑yml配置文件,将flarum和数据库的版本号都更改为latest

1
sudo docker compose up -d

直接拉取最新的镜像并部署

查看日志:

1
sudo docker logs -f [容器名]

安装插件

插件商店:https://extiverse.com/

安装插件:

1
sudo docker exec -ti flarum extension require [扩展名/扩展名]

移除插件:

1
sudo docker exec -ti flarum extension remove [扩展名/扩展名]

列出扩展列表:

1
sudo docker exec -ti flarum extension list

首先安装中文插件:

1
sudo docker exec -ti flarum extension require flarum-lang/chinese-simplified

该命令实际上就是进入容器中调用该容器已经写好的extension脚本,来进行安装插件

登录管理页面:127.0.0.1:8000/admin(需要在首页登录配置好的管理员账户才有权限访问)

然后点击下方的保存,刷新即可显示为中文

安装标题搜索插件:

1
sudo docker exec -ti flarum extension require ganuonglachanh/flarum-ext-search

点击右上角头像,点击后台管理,启用该插件:

安装图片上传插件:

1
sudo docker exec -ti flarum extension require fof/upload

如果安装失败,执行下列安装指定版本的:

1
sudo docker exec -ti flarum extension require fof/upload:1.3

注意,我这里开启这个上传插件之后就导致无法发帖无法回复,请慎用

应该是docker镜像的作者锁死了该插件的版本,以防php版本不适配

注意:实测直接使用最新版镜像,可以使用文件上传插件

启用之后进行自定义的设置即可

帖子直链插件:https://github.com/PipecraftNet/flarum-ext-id-slug/blob/main/README-cn.md

你也不想你的生成的链接这么长吧,安装:(安装后在常规设置里更改链接引擎)

1
sudo docker exec -ti flarum extension require pipecraft/flarum-ext-id-slug

开启后效果:

其他推荐插件:(安装第三方插件要慎重,尽量安装fof官方插件)

注:插件的加载是有顺序的,可能某些插件会导致其他插件不可用,所以安装插件一定要慎重!

注:不保准这些插件的兼容性,更多插件可以去插件商店看看~

注:安装任何插件之前请务必确保自己的站点的版本,插件是否兼容

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
## 已安装
#黑暗模式
fof/nightmode
#导航栏添加额外链接/菜单
fof/links
#添加一个简单的站点统计widget
#20240318更新,这个插件与下方的一个小插件重复,已卸载
fof/forum-statistics-widget
#用户更改名称插件(配合官方自带的的用户昵称插件使用)
#(安装成功但无法更新插件列表,是网络问题,重新安装一下就可以)
#20240318更新,该插件与官方的昵称插件冲突,已卸载,安装请慎重
fof/username-request
#第三方登录
fof/oauth
#自定义页面
fof/pages
#标记最佳回复
fof/best-answer
#用户或用户组私密帖子(私聊)功能
fof/byobu
#注册邀请码功能
fof/doorman
#过滤帖子敏感词插件(安装完启用后敏感词列表不能为空)
fof/filter
#更改默认发信邮箱的通知权限
fof/default-user-preferences
#删除发信邮箱设置,默认邮箱只用于注册新用户(可能与其他需要邮箱的插件冲突)
clarkwinkelmann/flarum-ext-no-email-notifications
#拦截用乱七八糟的邮箱注册
clarkwinkelmann/flarum-ext-email-whitelist
#更多的emoji表情(开启后建议关闭原生的emoji插件)
clarkwinkelmann/flarum-ext-emojionearea
#用户个人主页添加一个个性签名的字段
fof/user-bio
#在主页面展示一些小部件(配合下面这四个对应的小组件食用)
afrux/forum-widgets-core
afrux/news-widget
afrux/top-posters-widget
afrux/online-users-widget
afrux/forum-stats-widget(这个组件和官方的forum-statistics-widget冲突,建议关闭其中一个)
#给用户个人主页添加社交媒体信息配置
fof/socialprofile
#添加一个返回顶部按钮(二选一)
becod/flarum-backtotop
datlechin/flarum-scroll-buttons(推荐)
#用户列表
fof/user-directory
#帖子浏览量
flarumite/simple-discussion-views
#展示热门帖子(配合afrux/forum-widgets-core食用)
justoverclock/hot-discussions
#添加关注用户功能
ianm/follow-users
#更改自定义翻译
fof/linguist
#将某个帖子设置为头版头条,类似于精华帖
fof/frontpage
#生成sitemap插件
fof/sitemap
#SEO插件
v17development/flarum-seo
#用户协议和隐私政策
fof/terms
#长文目录功能(有小bug,慎用)
tohsakarat/table-of-content
#发帖/文草稿箱/定时发布
fof/drafts
#关注标签插件:
fof/follow-tags
#图片灯箱
darkle/fancybox
#用户资料图片允许裁剪
fof/profile-image-crop
#个人资料背景
sycho/flarum-profile-cover
#用户徽章
v17development/flarum-user-badges
#用户资产(和签到插件依赖)
antoinefr/flarum-ext-money
#签到
ziiven/flarum-daily-check-in
#移动端底部导航
acpl/mobile-tab
#代码风格
ffans/clipboardjs
#屏蔽黑名单IP地址
fof/ban-ips
#用户投票
fof/polls
#个人主页留言板
fof/moderator-notes
#博客板块功能
v17development/flarum-blog
#添加PWA功能
askvortsov/flarum-pwa
#合并主题
fof/merge-discussions
#展示帖子已经阅读了百分之多少
justoverclock/thread-read-time

配置文件默认参数

UID Flarum user id optional 991
GID Flarum group id optional 991
DEBUG Flarum debug mode optional false
FORUM_URL Forum URL required none
DB_HOST MariaDB instance ip/hostname optional mariadb
DB_USER MariaDB database username optional flarum
DB_NAME MariaDB database name optional flarum
DB_PASS MariaDB database password required none
DB_PREF Flarum tables prefix optional none
DB_PORT MariaDB database port optional 3306
FLARUM_PORT Port to run Flarum on inside the container optional 8888
UPLOAD_MAX_SIZE The maximum size of an uploaded file optional 50M
PHP_MEMORY_LIMIT PHP memory limit optional 128M
OPCACHE_MEMORY_LIMIT OPcache memory size in megabytes optional 128
LOG_TO_STDOUT Enable nginx and php error logs to stdout optional false
GITHUB_TOKEN_AUTH Github token to download private extensions optional false
PHP_EXTENSIONS Install additional php extensions optional none

debug

插件状态数据丢失

目前mondediefr的这个镜像,存在一个问题,就是容器重载之后插件启用状态的丢失

在GitHub里有人提出了这个问题,且给出了解决方案:https://github.com/mondediefr/docker-flarum/issues/81

如果你已经运行了,并且配置了一些东西,先使用 docker cp 命令,将下面两个文件和一个文件夹所有的内容拷贝到宿主机:

1
2
3
/flarum/app/vendor
/flarum/app/composer.json
/flarum/app/composer.lock

然后在yml配置文件中添加下这三个路径:

1
2
3
4
5
6
7
8
 volumes:
- /mnt/docker/flarum/assets:/flarum/app/public/assets
- /mnt/docker/flarum/extensions:/flarum/app/extensions
- /mnt/docker/flarum/storage/logs:/flarum/app/storage/logs
- /mnt/docker/flarum/nginx:/etc/nginx/flarum
+ - /mnt/docker/flarum/vendor:/flarum/app/vendor
+ - /mnt/docker/flarum/composer.json:/flarum/app/composer.json
+ - /mnt/docker/flarum/composer.lock:/flarum/app/composer.lock

重启容器,就可以解决这个bug了

如果你没有运行,站点还没有配置,建议直接加上这三个路径,一劳永逸 (这个我没试过可不可以,如果直接配置这三个目录后发现容器启动不起来,那么可以先不加,启动之后复制出来再添加)

用户无法注册

用户注册时候显示注册失败,但是后台已经注册好了用户的数据:

该报错是因为后台管理-邮箱界面没有配置邮箱服务导致的

删除用户

在后台管理-用户页面,点击用户名进入用户主页,点击编辑,删除:

生产环境和测试环境分离

更改yml配置文件中的端口以及容器名称

更改envfile中的数据库host为当前主机的IP

防火墙放行更改后的端口即可同时运行两个站点(记得备份)

现已放弃docker部署,改为主机部署

下面将是在主机部署遇到的一些问题

主页PHP警告

1
2
3
4
5
afrux/forum-widgets-core
afrux/news-widget
afrux/top-posters-widget
afrux/online-users-widget
afrux/forum-stats-widget

上面这几个插件安装之后访问主页会有php的警告

在站点php设置里,把警告提示输出关闭即可:

返回顶部/底部按钮

采用 datlechin/flarum-scroll-buttons 插件,CSS样式优化:

1
2
3
4
5
/* flarum-scroll-buttons返回顶部/底部按钮样式优化 */ 
.ScrollButtons-button {
background: @primary-color !important;
opacity: 1 !important;
}

优化搜索高亮

1
2
3
4
/* 搜索结果关键字高亮 */
.DiscussionListItem-main mark {
background: #ffff80 !important;
}