title: Docker部署Flarum社区
top_img: false
tags:
  - Docker
  - Flarum
categories:
  - 前端
cover: '/upload/cdn5files/202403112011137.png'
abbrlink: 77b13f05
date: 2024-03-11 20:10:51
copyright:
comments:

前言

自从有了服务器之后一直有点蠢蠢欲动,纯静态博客已经满足不了我了,搭建一个轻社区的想法疯狂的在脑子里生长,今天突然有个机会了解到了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/

第二步:拉取镜像

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

第三步:写配置文件

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

cd进入新建好的文件夹

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

vim docker-compose.yml

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

#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

建议删除注释食用

第四步:启动

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

第五步:访问

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

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

sudo docker compose down

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

sudo docker compose up -d

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

更新

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

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

sudo docker compose up -d

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

查看日志:

sudo docker logs -f [容器名]

安装插件

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

安装插件:

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

移除插件:

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

列出扩展列表:

sudo docker exec -ti flarum extension list

首先安装中文插件:

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

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

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

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

安装标题搜索插件:

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

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

安装图片上传插件:

sudo docker exec -ti flarum extension require fof/upload

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

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

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

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

开启后效果:

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

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

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

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

## 已安装
#黑暗模式
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
#用户等级
foskym/flarum-custom-levels

配置文件默认参数

UIDFlarum user idoptional991
GIDFlarum group idoptional991
DEBUGFlarum debug modeoptionalfalse
FORUM_URLForum URLrequirednone
DB_HOSTMariaDB instance ip/hostnameoptionalmariadb
DB_USERMariaDB database usernameoptionalflarum
DB_NAMEMariaDB database nameoptionalflarum
DB_PASSMariaDB database passwordrequirednone
DB_PREFFlarum tables prefixoptionalnone
DB_PORTMariaDB database portoptional3306
FLARUM_PORTPort to run Flarum on inside the containeroptional8888
UPLOAD_MAX_SIZEThe maximum size of an uploaded fileoptional50M
PHP_MEMORY_LIMITPHP memory limitoptional128M
OPCACHE_MEMORY_LIMITOPcache memory size in megabytesoptional128
LOG_TO_STDOUTEnable nginx and php error logs to stdoutoptionalfalse
GITHUB_TOKEN_AUTHGithub token to download private extensionsoptionalfalse
PHP_EXTENSIONSInstall additional php extensionsoptionalnone

debug

插件状态数据丢失

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

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

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

/flarum/app/vendor
/flarum/app/composer.json
/flarum/app/composer.lock

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

 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警告

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样式优化:

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

优化搜索高亮

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