Flarum问答社区

前言

中文站:https://flarum.org.cn/

Flarum 是一款非常简洁的开源论坛软件。 它响应快速、简便易用,拥有打造一片成功的社区所需的所有功能。 它也极其可扩展,允许达到终极的可定制性。

Flarum 的前身是 esoTalkFluxBB, 它生来就被设计如此:

  • 快速、简单。 不杂乱不臃肿,没有复杂的依赖关系。 Flarum 使用 PHP 构建,因此很容易被部署。 界面采用高性能且小巧的 JavaScript 框架 Mithril
  • 漂亮、响应式。 以人为本的论坛软件。 Flarum 被精心设计以在不同平台间保持一致性和直观性,开箱即用。
  • 强大、可扩展。 您可以客制化、扩展或集成 Flarum 以满足您的社区需求。 Flarum 基于 MIT 协议 发布。
  • 免费、开源。 Flarum 以 MIT 许可证 发布。

新建安全组

打开控制台

打开莱卡云:https://www.lcayun.com

新建安全组

开启安全组

安装Flarum

安装Flarum的方式有两种,一个是Docker一个是直接安装,Docker方式安装方便,快速,直接拉取镜像一个命令就可以快速启动,但稳定性不如直接安装。直接安装就是环境比较复杂,但比较稳定。

Docker方式安装

编写docker-compose

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
version: '3.1'

services:
mysql:
image: mysql:8.0.26
container_name: flarum-db
ports:
- "5308:3306"
environment:
MYSQL_DATABASE: flarum
MYSQL_ROOT_PASSWORD: dbpassword
command: --character-set-server=utf8mb4 --collation-server=utf8mb4_general_ci
privileged: true

app:
image: mondedie/flarum:latest
container_name: flarum
ports:
- "5334:8888"
environment:
FORUM_URL: 'http://172.192.168.2.5:5334'
DB_HOST: 'mysql'
DB_USER: 'root'
DB_PASS: 'thisispassword'
FLARUM_ADMIN_USER: 'admin'
FLARUM_ADMIN_PASS: 'fsd7fsd5f44'
FLARUM_ADMIN_MAIL: 'asd1464@qq.com'
FLARUM_TITLE: '问答小助手'
links:
- mysql

部署docker-compose

02-启动docker-compose-20230510-252

看到上面这个绿色的done表示部署成功了。

然后去浏览器打开网站查看:http://172.192.168.2.5:5334

设置数据库及用户

  • Forum Title:平台标题
  • MySQL Host:mysql
  • MySQL Database:flarum
  • MySQL Username:root
  • MySQL Password:dbpassword
  • Admin Username:admin
  • Admin Email:asd1464@qq.com
  • Admin Password:fsd7fsd5f44
  • Confirm Password:fsd7fsd5f44

Table Prefix不用填写也可以。

03-注册-20230510-692

直接安装

前言

我下面使用的环境为CentOS 7,Mysql 5.7.42,PHP 8.0.28,composer 2.5.5。

使用本机直接安装,需要的环境:

  • PHP
  • PHP composer
  • Nginx
  • Mysql

下面安装flarum的版本为正式版V 1.7

安装环境

需要安装以上四个环境,你可以看我另一篇文章的环境安装。

linux环境配置:https://blog.hikki.site/111f4f09.html

安装PHP

PHP安装依赖可能比较麻烦,下面给出相关教程。

1. 安装PHP

1
2
3
sudo yum -y install epel-release
sudo yum -y install https://mirrors.aliyun.com/remi/enterprise/remi-release-7.rpm
sudo yum -y install yum-utils

2.切换到PHP8 remi源

1
sudo yum-config-manager --enable remi-php80

3. 安装PHP相关扩展

在安装PHP相关依赖时,可以将下面这部分的PHP扩展添加进去,在yum源中,PHP的扩展可以通过yum安装。

1
sudo yum install  php-cli php-fpm php-mysqlnd php-zip php-devel php-gd php-mbstring php-curl php-xml php-pear php-bcmath php-json php-redis  --skip-broken

4. 创建PHP全局命令

安装后的PHP,默认安装在/usr/bin/php位置下,但CentOS 7默认快捷启动是在/usr/local/bin位置才有效,所以,要创建PHP全局命令,就要创建一个PHP启动程序在/usr/local/bin位置下,我们可以直接复制一个PHP启动文件过去就可以了。

1
cp /usr/bin/php /usr/local/bin/php

5. 启动PHP

1
systemctl start php-fpm

安装Composer

1. 下载安装脚本

1
2
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php -r "if (hash_file('sha384', 'composer-setup.php') === '906a84df04cea2aa72f40b5f787e49f22d4c2f19492ac310e8cba5b96ac8b64115ac402c8cd292b8a03482574915d1a8') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"

2. 执行安装

1
php composer-setup.php

3. 删除安装脚本

1
php -r "unlink('composer-setup.php');"

4. 设置Composer全局命令

1
sudo mv composer.phar /usr/local/bin/composer

创建数据库

1. 进入数据库

1
mysql -uroot -p

回车之后需要输入root用户密码

2. 创建数据库

1
create database db_flarum;

3. 创建db_flarum专用的用户

1
create user 'flarum'@'localhost' identified by '7c6fwgLskw+';

创建一个用户名为flarum,密码为7c6fwgLskw+的用户。

4. 设置db_flarum数据库归flarum用户所有

1
grant all on db_flarum.* to 'flarum'@'localhost';

5. 刷新权限

1
flush privileges;

创建Flarum项目

1. 创建flarum目录

1
mkdir -p /www/flarum

2. 进入flarum目录

1
cd /www/flarum

3. 初始化flarum项目

1
composer create-project flarum/flarum .

初始化后的flarum是没有config.php的配置文件的,flarum会检测config.php配置文件是否存在,如果存在,则直接使用,若不存在,则打开web页面会自动创建的,所以,不需要刻意去创建这个配置文件。

4. 设置权限

1
chmod -R 777 /www/flarum

先赋予flarum文件夹777权限,因为初始化时没有创建config.php文件,flarum需要有创建config.php文件的权限,而创建这个文件的用户是apache,该用户需要有权限7,所以就先设置777,后面初始化完再将权限改为775。

如果你还有www用户或者www-data用户,则继续赋予权限

1
chown -R www:www /www/flarum

配置Nginx

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
# 问答平台
server {
listen 80;
server_name hikki.site; # 你的域名
return 301 https://$server_name$request_uri;

}
server {
listen 443 ssl;
server_name hikki.site; # 你的域名
# 资源
include /www/flarum/.nginx.conf;
root /www/flarum/public; # flarum下的public
index index.html index.php;

# SSL证书
ssl_certificate cert/guangruan.life/cert.pem;
ssl_certificate_key cert/guangruan.life/key.pem;
# 最大文件
client_max_body_size 1024M;
# 日志
access_log /usr/local/nginx/logs/access.log;
error_log /usr/local/nginx/logs/error.log;


# php-fpm
location ~* \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_split_path_info ^((?U).+\.php)(/?.+)$;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
include fastcgi_params;
}
}

我在本地配置了SSL证书,如果你没有证书,则你可以将下面的server块中的SSL证书部分去掉,再将监听443的端口改为80端口即可。

打开web页面

打开页面后,应该是没有任何异常的,,如果有异常报错,查看相关异常信息,再到flarum社区查找解决方法。

  • Forum Title:平台标题
  • MySQL Host:127.0.0.1
  • MySQL Database:db_flarum
  • MySQL Username:flarum
  • MySQL Password:dbpassword
  • Table Prefix:tb_(选填,需要自定义表前缀可以填)
  • Admin Username:admin(论坛管理员用户名)
  • Admin Email:asd1464@qq.com(论坛管理员邮箱)
  • Admin Password:fsd7fsd5f44(论坛管理员密码)
  • Confirm Password:fsd7fsd5f44

image-20230514133448788

安装插件

汉化论坛

进入flarum项目根目录

1
cd /www/flarum
使用Docker方式部署

1. 进入容器

1
docker exec -it flarum sh

2. 进入Flarum程序目录

1
cd flarum/app/

设置阿里云下载服务

composer默认的库不在国内,如果你是国内的服务器,下载速度可以不理想,你可以切换到国内的阿里云库,全局安装阿里云的网络下载服务

1
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/

安装中文插件

1
composer require flarum-lang/chinese-simplified:*

04-安装中文插件-20230510-110

建立全站中文搜索

进入MySQL数据库

使用Docker方式部署

1. 进入MySQL的容器

1
docker exec -it flarum-db /bin/bash

进入mysql数据库

1
mysql -uflarum -phBf4sdf14
  • 用户名:flarum
  • 密码:hBf4sdf14

注意,-u和后面的用户名是没有空格的,是连在一起的。

-p和后面的面也是连在一起的,没有空格

建立索引

进入了mysql数据库后,分别执行下面四条mysql语句

1
2
3
4
5
6
7
8
9
use db_flarum -- 进入db_flarum

ALTER TABLE tb_posts DROP INDEX content;

CREATE FULLTEXT INDEX tb_content ON `tb_posts` (`content`) WITH PARSER ngram;

ALTER TABLE tb_discussions DROP INDEX title;

CREATE FULLTEXT INDEX title ON `tb_discussions` (`title`) WITH PARSER ngram;

tb_posts、tb_discussions是数据表,如果你你在建立站时没有设置表前缀的话,则表名是和我一样的。

清除缓存

仪表盘-->工具-->清除缓存

07-清除缓存-20230510-738

测试效果

可以搜索到中文的内容了。

08-测试搜索-20230510-056

配置其他信息

邮箱激活用户

Flarum默认使用邮箱激活用户,用户在注册时,会发送一条链接到用户注册的邮箱,用户需要点击链接才激活账号,但在这之前,你需要配置一个发送邮件的邮箱信息。

地址:邮箱地址

驱动:smtp

主机:smtp.163.com

端口:465

加密协议:ssl

用户名:aa1341151056@163.com

密码:ITGDHERHSDPVX

安装其他插件

  1. 进入容器
  2. 进入Flarum程序目录
  3. 安装插件

进入flarum项目根目录

1
cd /www/flarum
使用Docker方式部署

1. 进入容器

1
docker exec -it flarum sh

2. 进入Flarum程序目录

1
cd flarum/app/

安装插件

安装插件前建议设置阿里云下载仓库,不然下载速度会有点慢,如果设置过就不需要重复设置

根据自己的需求安装对应的插件。

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
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
# 简体中文支持
composer require flarum-lang/chinese-simplified:*

# 最佳回复插件安装 -- 需要开启后点击保存才有效果 -- 帖子内部的回复置顶功能,非常好用
composer require fof/best-answer:*

# 安装文件上传扩展插件,开启上传插件,支持 copy images -- 可以直接复制图片拷贝到帖子内部
composer require fof/upload:*

# 使用邀请码注册
composer require fof/doorman:*

# 微信登录(需要微信开发者资质才可以使用)
composer require nomiscz/flarum-ext-auth-wechat

# 投票插件 -- 需要设置参与投票的人可以有哪些
composer require fof/polls:*

# 精华帖 - 推送到首页
composer require fof/frontpage:*


# 头像徽章插件
composer require fof/ignore-users:*

# 开启私密主题 -- 效果不是很理想
composer require fof/byobu:*

# 自定义头像 -- 比如可以选择危化镖局的卡通头像(需要提前上传)
composer require clarkwinkelmann/flarum-ext-predefined-avatars:*

# 自定义邮件模板
composer require fof/pretty-mail:"*"

# 欢迎用户小部件,携带个人统计信息
composer require justoverclock/flarum-ext-welcomebox:*

# 传统板块插件
composer require askvortsov/flarum-categories:*

# 表情插件 -- 需要禁用掉自带的表情,不然会很怪异
composer require clarkwinkelmann/flarum-ext-emojionearea:*

# 同意条款
composer require fof/terms

# 帖子内容摘要
composer require ianm/synopsis

# 个人、群发邮件
composer require clarkwinkelmann/flarum-ext-mailing

# 预定义用户头像,允许用户从预定义头像库中选中一张作为自己的论坛头像
composer require clarkwinkelmann/flarum-ext-predefined-avatars:*

# 昵称功能,默认自带
# 需要到 常规功能模块里打开 User Display Name ,才能修改昵称

# 在首页生成用户管理 -- 如果是内部使用,可以关闭掉注册口邮件回复和激活功能,通过这里激活用户
composer require fof/user-directory:*

# 允许修改作者 -- 调整发布帖子的人
composer require clarkwinkelmann/flarum-ext-author-change:*

# 版主警告
composer require askvortsov/flarum-moderator-warnings

# 社交分享
composer require fof/share-social

# 对很久的帖子发出警告
composer require fof/prevent-necrobumping

# 自动审批
composer require askvortsov/flarum-auto-moderator:*

# 超级置顶
composer require the-turk/flarum-stickiest:^2.0.1

# 预定义标签发表模板
composer require askvortsov/flarum-discussion-templates

# 帖子书签
composer require clarkwinkelmann/flarum-ext-bookmarks

# 根据前置批准的数量,后续自动审批
composer require clarkwinkelmann/flarum-ext-first-post-approval

# 首页右侧热门帖子
composer require justoverclock/hot-discussions:"*"

# 短时间防止重复帖子
composer require the-turk/flarum-nodp

# 代码风格
composer require ffans/clipboardjs

# 自定义导航链接
composer require fof/links

# 用户自定义签名
composer require fof/user-bio:"*"

# 图片幻灯片
composer require darkle/fancybox

# 个人主页留言板
composer require fof/moderator-notes:"*"

# 广告
composer require afrux/news-widget:"*"

# 在线人数
composer require afrux/online-users-widget:"*"

# 过去一个月热门用户
composer require afrux/top-posters-widget:"*"

# 帖子增加首图卡片展示功能 -- 开启后会报错,要稍微等会,就能安装正常
composer require dem13n/discussion-cards:*

# 信任等级,可以提供一个等级设置,根据什么样的条件达成什么样的权限设置
composer require askvortsov/flarum-trust-levels:*

# 达成什么成就,就会在回复或发布的主题底下形成一排的成就图标!!! 点击启动时会报错,也是需要安装等待会才能正常
composer require malago/flarum-achievements:*

# 论坛统计功能 -- 还可以设置允许看到的人的权限
composer require fof/forum-statistics-widget:*

# markdown 表格功能扩展
composer require kvothe/pipetables

可能有部分插件已失效

已失效插件

1
2
# 图片放大 缩小 -- 只有这个库支持 fof 图片放大缩小扩展!!! -- 点击图片可放大查阅(已失效)
composer require phenomlab/fancybox-wrapper:*

登录回复可见插件

解决方案:https://discuss.flarum.org.cn/d/2565

常用指令

凡是跟插件composer有关的,必须进入到容器中里面的flarum/app/目录下执行

安装完成插件后有异常时执行

1
php flarum cache:clear

更新插件

1
composer update fof/best-answer

卸载插件

格式:composer remove 插件名

1
composer remove fof/best-answer

使用Docker部署MySQL

有些同学可能想直接部署flarum,但又想使用Docker部署MySQL,比如我,经过使用后,我发现直接在真机部署MySQL,占用内存太大了,我的服务器顶不住,于是就将真机上的MySQL数据库导出来,然后导入到Docker部署的MySQL中,这样可以减少一点内存支出,事实证明,这样确实可以减少部分的内存支出,话不多说,直接开始。

导出MySQL数据库

由于我之前在MySQL数据中,添加了一个flarum用户,用于专门管理db_flarum数据库,flarum用户只有管理db_flarum数据库,这样可以提高数据库的安全性。

于是,在导出数据库时需要考虑,我应该怎么做,才可以避免到时候导入Docker数据库时不需要重新添加flarum用户,并且设置权限?

经过相关学习,我大概了解到,MySQL程序中,有一个名为mysql的数据库,我们的用户信息都存储在mysql库中,我们给flarum用户设置db_flarum数据库的权限的相关信息,都存储在mysql这个数据库中,这么思路就清晰了,我们只需要导出mysql数据库和db_flarum数据库就可以了。

进入MySQL程序

我们先进入MySQL程序探一番,进入flarum用户。

1
mysql -uflarum -p

输入上面命令进入MySQL程序,需要输入flarum用户的密码,

查看当前用户全部数据库

1
2
3
4
5
6
7
8
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| db_flarum |
+--------------------+
2 rows in set (0.00 sec)

可以看到,flarum用户只能查看到information_schemadb_flarum数据库,没有发现mysql数据库,说明权限还不够,需要root权限才可以看到mysql数据库。

那这个information_schema数据库是干嘛的呢?为什么我们没有创建他也会存在?

information_schema 存储关于 MySQL 数据库中所有对象(如表,列,索引等)的元数据信息,提供了一种标准化的方式来查询 MySQL 中的数据库结构信息;

导出数据库

1. 创建dbs存储数据库

1
mkdir -p /opt/dbs/

我们使用mysqldump 命令来导出数据库,回车之后需要输入root用户密码。

2. 导出db_flarum数据库

1
mysqldump -uroot -p db_flarum > /opt/dbs/db_flarum.sql

3. 导出mysql数据库

1
mysqldump -uroot -p mysql > /opt/dbs/mysql.sql

部署MySQL数据库

编写docker-compose

1. 创建一个mysql的文件夹,并进入文件夹

1
mkdir -p /home/docker/mysql/{mydir,db,conf,init} && cd /home/docker/mysql

2. 编写mysql配置信息

在conf目录下,新建一个my.cnf配置文件,将以下内容写入到my.cnf配置文件中。

1
2
3
4
5
6
7
8
9
10
11
[mysqld]
user=mysql
default-storage-engine=INNODB
character-set-server=utf8
character-set-client-handshake=FALSE
collation-server=utf8_unicode_ci
init_connect='SET NAMES utf8'
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8

3. 将需要恢复的数据库sql文件放到init文件夹中

将刚刚导出的sql文件复制到init文件夹中。

1
cp /opt/dbs/* ./init/

4. 编写docker-compose.yml

将以下文件写入到mysql目录下的docker-com.yml。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
version: '3'
services:
mysql5.6:
restart: always
image: mysql:5.7.18
container_name: mysql-5.7.18
volumes:
- ./mydir:/mydir
- ./db:/var/lib/mysql
- ./conf/my.cnf:/etc/my.cnf
- ./init:/docker-entrypoint-initdb.d # 数据库还原目录 可将需要还原的sql文件放在这里
environment:
MYSQL_ROOT_PASSWORD: fv1sa5 # root用户密码,和之前数据库的密码一样
MYSQL_USER: flarum # 新建一个flarum用户,和之前数据库的用户名一样
MYSQL_PASSWORD: 7c1fhaiw # flarum用户密码,和之前数据库的密码一样
MYSQL_DATABASE: db_flarum # 新建一个db_flarum数据库
TZ: Asia/Shanghai
ports:
- 3506:3306 # 宿主机:容器

配置flarum

查看docker容器IP地址

使用ip addr show docker0查找docker容器的IP地址。

1
2
3
4
5
6
7
[root@ECS-4 flarum]# ip addr show docker0
6: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
link/ether 02:42:33:cd:b9:61 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
valid_lft forever preferred_lft forever
inet6 fe80::42:33ff:fecd:b961/64 scope link
valid_lft forever preferred_lft forever

从上面可以看到,docker容器IP地址为172.17.0.1,那我们在flarum站点配置主机地址为172.17.0.1就好了

配置flarum

打开flarum站点,修改config.php配置,只需要修改两个地方:

  1. host:主机地址,将localhost改为刚刚查询docker容器的IP地址,也就是172.17.0.1
  2. port:主机端口,就是MySQL容器部署对外开放的端口,改为3506

usernamepassword,你要是在部署数据库时,没有修改的话,那这里的数据库用户名和密码也不用修改。

注意:我之前在本机安装数据库时,数据库名我设置为db_flarum,数据表前缀我设置为tb_,你要根据自己的情况来修改前缀

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
<?php return array (
'debug' => false,
'database' =>
array (
'driver' => 'mysql',
'host' => '172.17.0.1',
'port' => 3506,
'database' => 'db_flarum',
'username' => 'flarum',
'password' => '7c1fhaiw',
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => 'tb_',
'strict' => false,
'engine' => 'InnoDB',
'prefix_indexes' => true,
),
'url' => 'https://XXXX',
'paths' =>
array (
'api' => 'api',
'admin' => 'admin',
),
'headers' =>
array (
'poweredByHeader' => true,
'referrerPolicy' => 'same-origin',
),
);

修改完打开flarum站点就可以看到了。

文章参考

flarum镜像

开源论坛 flarum 的快速创建 - docker版

建立文章索引

Flarum从零安装教程【保姆级教程】

常用插件

本文章来源于我的博客:https://blog.hikki.site