前言

感觉工作以后好像都没啥机会写博客了,最近公司又是春节、又是冬奥,忙完业务还有文档要沉淀,业余时间我还要拿来维护Sonic的项目,其余空闲时间还得补充一些理论知识,实在是累得不行= =、

最近给Sonic搭建了一个社区,用的Flarum,中间也踩了一些小坑,干脆在此记录下了。

实际成果见:https://sonic-cloud.wiki (1.1.1版本)


Q:为什么不用Discuz! Q
A:在没看到Flarum前觉得还可以,但找到Flarum后,感觉Flarum更符合需求。如果对付费功能(如付费注册,付费后才看到百度云链接)的站点可以考虑Discuz! Q

Q:为什么不用Discuz! X
A:相信这是最常见的论坛了,很多破解资源(吾爱破解、游戏机破解、某DM)的网站都喜欢用这个,但他的前端着实把我丑哭了,也是对付费功能有需求的才考虑使用。


论坛上线须知

  • 在内陆,个人备案开设论坛是违法的,如果你先以其它名义先通过备案,之后再换成论坛,那么在管局年审 or 被人举报之后,大概率翻车。
  • 如果你想在不想备案 or 只有个人备案怎么办呢?
    • 第一种解决方式,也是最推荐的,就是买香港的服务器,因为一国两制的特殊性,香港的服务器是不用备案的。
    • 第二种解决方式,直接购买国外的VPS,推荐KVM架构的,因为当你要装锐速 or BBR之类的加速软件兼容性会十分好;国外的服务器也不用备案,但被GFW ban掉/DNS污染 的几率很高。

安装参考

原生论坛安装(没有插件)

完全参照:https://discuss.flarum.org.cn/d/2195

你以为我会重新写一个?不存在的🤣

  • 目前安装均以1.1.1版本为准,因为插件可能随时废弃,如果遇到安装失败的,请自行到社区查询

安装插件

  • 安装前提:请务必把源切换会官网,不要使用上面教程的阿里镜像,实测阿里的镜像装一些插件会出问题。
  • 执行以下命令即可切换:
composer config -g repo.packagist composer https://repo.packagist.org

  • 执行安装命令时,请确保在网站根目录下执行(就是安装目录),比如下面这个目录:
    image.png
  • 另外,安装完插件后请务必清理缓存,不然部分插件会出现很诡异的效果,即在网站根目录下执行php flarum cache:clear,下面的每条命令后我都会带上。

这里只介绍Sonic用到的插件,所有安装命令、原作者帖子都如下:


# 图片放大
# https://discuss.flarum.org.cn/d/2914
composer require darkle/fancybox
php flarum cache:clear

# 简体中文(不要漏了全局设置) 
# https://discuss.flarum.org.cn/d/1211
composer require flarum-lang/chinese-simplified
php flarum cache:clear

# 第三方登录
# https://discuss.flarum.org.cn/d/2529
composer require fof/oauth
php flarum cache:clear

# SEO设置提醒
# https://discuss.flarum.org.cn/d/1715
composer require v17development/flarum-seo
php flarum cache:clear

# sitemap网站地图
# https://discuss.flarum.org.cn/d/1563
composer require fof/sitemap
php flarum cache:clear

# 表情包
# https://discuss.flarum.org.cn/d/1213
composer require clarkwinkelmann/flarum-ext-emojionearea
php flarum cache:clear

# 上传文件
# https://discuss.flarum.org.cn/d/1292
composer require fof/upload
php flarum cache:clear

# 上传支持七牛
# https://discuss.flarum.org.cn/d/1292/150
composer require overtrue/flysystem-qiniu:^1.0
php flarum cache:clear

# 导航栏
# https://discuss.flarum.org.cn/d/1350
composer require fof/links
php flarum cache:clear

# 草稿箱
# https://discuss.flarum.org.cn/d/1320
composer require fof/drafts
php flarum cache:clear

# 邮件美化
# https://discuss.flarum.org.cn/d/1299
composer require fof/pretty-mail
php flarum cache:clear

# 敏感词过滤(Sonic社区没开)
# https://discuss.flarum.org.cn/d/1252
composer require fof/filter
php flarum cache:clear

# 新内容发布通知
# https://discuss.flarum.org/d/20917-friendsofflarum-subscribed
composer require "fof/subscribed:*"
php flarum cache:clear

# 等级插件
# https://discuss.flarum.org/d/27869-level-ranks
composer require ianm/level-ranks:"*"
php flarum cache:clear

# 月度水王(Sonic社区没开)
# https://discuss.flarum.org/d/28404-afrux-top-posters-widget
composer require afrux/top-posters-widget:"*"
php flarum cache:clear

# 可以设置帖子的最佳回复
# https://discuss.flarum.org.cn/d/1323
composer require fof/best-answer
php flarum cache:clear

# 论坛简单数据(显示总主题数、用户数、回复数)
# https://discuss.flarum.org/d/28403-afrux-forum-stats-widget
composer require afrux/forum-stats-widget:"*"
php flarum cache:clear

# 热门
# https://discuss.flarum.org/d/28867-hot-discussions-widget
composer require justoverclock/hot-discussions:"*"
php flarum cache:clear

# 记录发帖ip(依赖下面的「ip黑名单」插件,点击帖子头像右边的时间「xxx前」就会弹出ip记录)
# https://discuss.flarum.org/d/21493-friendsofflarum-geoip
composer require fof/geoip:"*"
php flarum cache:clear

# ip黑名单
# https://discuss.flarum.org/d/20949-friendsofflarum-ban-ips
composer require fof/ban-ips:"*"
php flarum cache:clear

# 标签订阅
# https://discuss.flarum.org/d/20525-friendsofflarum-follow-tags
composer require fof/follow-tags
php flarum cache:clear

# 显示在线人数(比较丑,Sonic社区用下面另一个在线插件替代了)
# https://discuss.flarum.org/d/8302-online-users-extension
composer require antoinefr/flarum-ext-online
php flarum cache:clear

# 公告插件
# https://discuss.flarum.org/d/28405-afrux-news-widget
composer require afrux/news-widget:"*"
php flarum cache:clear

# 浏览量
# 无链接
composer require michaelbelgium/flarum-discussion-views
php flarum cache:clear

# 用户个性签名
# 无链接
composer require fof/user-bio
php flarum cache:clear

# 用户列表
# https://discuss.flarum.org/d/25386-group-list
composer require clarkwinkelmann/flarum-ext-group-list
php flarum cache:clear

# 帖子发布者更改
# https://discuss.flarum.org/d/21731-discussion-and-post-author-and-date-change
composer require clarkwinkelmann/flarum-ext-author-change
php flarum cache:clear

# 合并主题(帖子)
# https://discuss.flarum.org/d/19460-friendsofflarum-merge-discussions
composer require fof/merge-discussions
php flarum cache:clear

# 超级置顶,要先设置置顶,再设置超级置顶
# https://discuss.flarum.org.cn/d/3400
composer require the-turk/flarum-stickiest:^2.0.1
php flarum cache:clear

# 在线用户插件(简约版)
# https://discuss.flarum.org/d/28402-afrux-online-users-widget
composer require afrux/online-users-widget:"*"
php flarum cache:clear

# 用户勋章(Sonic社区没开)
# https://discuss.flarum.org/d/26449-user-badges
composer require v17development/flarum-user-badges
php flarum cache:clear

# 新注册用户默认开启邮件回复
# https://discuss.flarum.org/d/18607-friendsofflarum-default-user-preferences
composer require fof/default-user-preferences
php flarum cache:clear

# 推送插件
# https://discuss.flarum.org.cn/d/2100
composer require flarum/pusher
php flarum cache:clear

以上命令只要复制再粘贴到网站根目录就可以全部打包下载了,之后到后台域名/admin开启即可。


论坛底部的鱼


支持中文搜索

  • 原生的论坛是不支持中文搜索的。
  • 社区有很多中文搜索的方案,但大多数都要安装新的软件,如es,xunsearch等等,对内存的占用比价大,有硬件条件的小伙伴可以试试。
  • Sonic社区使用的方案是mysql的全文索引,参考:https://discuss.flarum.org.cn/d/1216

开启调度器


支持视频

!!!注意,要兼容视频播放是要手动改php代码,因为社区代码一直在更新,所以可能在未来的版本中,目前的做法会过时,如遇到问题,还请自行调试,推荐每跟着下面的代码改动一次,就立刻在网站根目录执行一次php flarum cache:clear,然后刷新下论坛首页看有没有报错。

当前以1.1.1版本为准

上面的方法是目录覆盖的,风险极高,不建议直接尝试


  • 首先,在upload插件的resources目录下的插件模板增加video.blade.php
    image.png
  • video.blade.php内容如下:
<figure class="upl-tpl" data-uuid="{@uuid}">
	<video controls style="width:100%;"><source src="{@url}" type="video/mp4">您的浏览器不支持 HTML5 视频,请下载Chrome或者Edge浏览器。</video>
  <figcaption>
    <span class="upl-title"><i class="far fa-file-video"></i>{SIMPLETEXT1}</span>
    <span class="upl-size"><i class="fas fa-cloud-download-alt"></i>{SIMPLETEXT2}</span>
    <span class="upl-link"><a href="{@url}" title="{SIMPLETEXT1}" target=_blank><i class="fas fa-external-link-alt"></i></a></span>
  </figcaption>
</figure>

  • upload插件的src目录下的插件模板添加VideoTemplate.php
    image.png
  • VideoTemplate.php内容如下(我继承类和覆写都照着同级目录下的ImageTemplate.php写的,因为两者都是BBCode渲染的多媒体资源)
<?php

namespace FoF\Upload\Templates;

use FoF\Upload\File;

class VideoTemplate extends AbstractTextFormatterTemplate
{
    /**
     * @var string
     */
    protected $tag = 'video';

    /**
     * {@inheritdoc}
     */
    public function name(): string
    {
	return 'MP4 Video';
    }

    /**
     * {@inheritdoc}
     */
    public function description(): string
    {
	return 'MP4 Video';
    }

    /**
     * The xsl template to use with this tag.
     *
     * @return string
     */
    public function template(): string
    {
        return $this->getView('fof-upload.templates::video');
    }

    /**
     * The bbcode to be parsed.
     *
     * @return string
     */
    public function bbcode(): string
    {
        return '[upl-video uuid={IDENTIFIER} size={SIMPLETEXT2} url={URL}]{SIMPLETEXT1}[/upl-video]';
    }
}
  • 接着改引用模板的代码,即DefaultDownloader.php,所在目录如下
    image.png

  • 改动点如下(其实就是import一下刚刚写的代码,然后再创建实例):
    image.png

  • 之后在网站根目录执行如下命令(一定要执行,否则可能导致BBCode不会渲染新的php代码):

composer dump-autoload
php flarum cache:clear
  • 之后到后台的Upload插件就会发现多了Video的选项👇🏻:
    image.png

  • 保存新的配置后即可嵌入自己上传的视频:
    QQ20220114-013310-HD

Q.E.D.