Docker部署Flarum社区
本文最后更新于 2024-10-18,文章内容距离上一次更新已经过去了很久啦,可能已经过时了,请谨慎参考喵。
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 [容器名]
安装插件
安装插件:
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
配置文件默认参数
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
命令,将下面两个文件和一个文件夹所有的内容拷贝到宿主机:
/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;
}