Bbs


原文链接: Bbs

b3log/symphony

环境准备

安装 JDK,版本至少需要 JDK8
安装 MySQL,版本至少需要 5.6
安装 Tomcat,版本至少需要 9
安装 Maven,下载解压后设置 bin 目录到 PATH 环境变量中

编译项目

下载源码 https://github.com/b3log/symphony/archive/3.0.0.tar.gz

解压后按需修改 src/main/resources/local.properties 中的数据库口令配置
            ./WEB-INF/classes/local.properties
jdbc.username=root
jdbc.password=

执行 mvn install 编译打包,完成后在 target 目录下将生成 symphony.war

部署

手动新建数据库 b3log_symphony ,字符集用 utf8mb4,排序规则 utf8mb4_general_ci
将 war 包部署到 Tomcat/Jetty 的 webapps 目录下,然后启动服务器,注意查看 logs 目录下的日志情况
浏览器访问 http://localhost:8080/symphony
默认的管理员账号为 admin/admin

symphony 配置 nginx 代理 websocket 连接端口

map $http_upgrade $connection_upgrade { 
    default upgrade;
    '' close; 
    } 
    
server { 
    ... 
    location / { 
        ... 
        proxy_set_header Upgrade $http_upgrade; 
        proxy_set_header Connection $connection_upgrade; 
        } 
} 

Sym 配置项说明

概述

配置文件 symphony.properties 是 Sym 的功能配置文件,所有影响界面展示、功能使用的配置项都在这里。

该配置文件在源码目录中位于 src/main/resources/ 目录下;在 war 包中位于 WEB-INF/classes/ 目录下。
注意事项

该文件使用 Unicode 进行编码
编辑后需要重启服务器才能生效

配置项说明

下面按配置文件中的注释分段进行说明。
Key

keyOfSymphony=dev_key:对外接口调用时需要的 key,生产环境必须修改,修改后请同步修改 cron.xml

Post

minStepArticleTime=10000:发布帖子最小间隔时长,单位毫秒
minStepCmtTime=5000:发布回帖最小间隔时长,单位毫秒
minStepChatTime=5000:发布聊天最小间隔时长,单位毫秒
newbieFirstArticle=0:新手帖需要注册后多久才允许发布,单位毫秒

Pagination & Display

defaultPaginationCnt=20:分页每页显示条数
defaultPaginationWindowSize=10:分页页号显示数

Index & Side

indexListCnt=18:首页列表显示条数
indexPerfectCnt=36:首页优选列表显示条数
trendTagsCnt=18:引用最多的标签显示条数
newTagsCnt=28:最新标签显示条数
indexArticlesCnt=20:帖子列表显示条数
indexArticleParticipantsCnt=7:帖子参与者显示数
latestArticlesWindowSize=10:帖子列表分页页号显示数
latestArticleParticipantsCnt=7:帖子参与者显示数
sideHotArticlesCnt=10:近期热议显示条数
sideRandomArticlesCnt=10:随便看看显示条数
sideTagsCnt=28:标签显示条数
sideRelevantArticlesCnt=15:相关帖子显示条数
sizeLatestCmtsCnt=10:最新回帖显示条数

以上有的配置项代码是被注释掉的,请以最新源码为准。
User Home

userHomeArticlesCnt=30:用户主页帖子列表每页显示条数
userHomeArticlesWindowSize=10:用户主页帖子列表分页页号显示数
userHomeCmtsCnt=30:用户主页回帖列表每页显示条数
userHomeCmtsWindowSize=10:用户主页回帖列表分页页号显示数
userHomeFollowingUsersCnt=30:用户主页关注用户列表每页显示条数
userHomeFollowingUsersWindowSize=10:用户主页关注用户列表分页页号显示数
userHomeFollowingTagsCnt=30:用户主页关注标签列表每页显示条数
userHomeFollowingTagsWindowSize=10:用户主页关注标签列表分页页号显示数
userHomeFollowingArticlesCnt=30:用户主页收藏帖子列表每页显示条数
userHomeFollowingArticlesWindowSize=10:用户主页收藏帖子列表分页页号显示数
userHomeFollowersCnt=30:用户主页关注者列表每页显示条数
userHomeFollowersWindowSize=10:用户主页关注者列表分页页号显示数
userHomePointsCnt=30:用户主页积分列表每页显示条数
userHomePointsWindowSize=10:用户主页积分列表分页页号显示数

Notifications

replyNotificationsCnt=20:回复通知列表每页显示条数
replyNotificationsWindowSize=10:回复通知页列表分页页号显示数
atNotificationsCnt=20:艾特通知列表每页显示条数
atNotificationsWindowSize=10:艾特通知页列表分页页号显示数
commentedNotificationsCnt=20:回帖通知列表每页显示条数
commentedNotificationsWindowSize=10:回帖通知页列表分页页号显示数
followingNotificationsCnt=20:关注通知列表每页显示条数
followingNotificationsWindowSize=10:关注通知页列表分页页号显示数
pointNotificationsCnt=20:积分通知列表每页显示条数
pointNotificationsWindowSize=10:积分通知页列表分页页号显示数
broadcastNotificationsCnt=20:广播通知列表每页显示条数
broadcastNotificationsWindowSize=10:广播通知页列表分页页号显示数
sysAnnounceNotificationsCnt=20:系统公告通知列表每页显示条数
sysAnnounceNotificationsWindowSize=10:系统公告通知页列表分页页号显示数

Article Comment

articleCommentsPageSize=30:回帖列表每页显示条数
articleCommentsWindowSize=10:回帖列表分页页号显示数

Tags Wall

tagsWallTrendCnt=30:标签墙热门标签显示数
tagsWallColdCnt=30:标签墙冷门标签显示数

标签墙访问路径:/tags
Tag Articles

tagArticlesWindowSize=10:标签帖子列表分页页号显示数
tagParticipantsCnt=7:标签参与者显示数
tagArticleParticipantsCnt=7:标签帖子列表参与者显示数
tagRelatedTagsCnt=7:相关标签显示数
tagRelatedWeight=1:相关标签权重阈值,只有大于等于这个值才认为是相关标签

City

cityArticlesWindowSize=10:同城帖子列表分页页号显示数
cityArticleParticipantsCnt=7:同城帖子列表参与者显示数
cityUserPageSize=30:同城用户列表每页显示条数
cityUsersWindowSize=10:同城用户列表分页页号显示数

Top Ranking List

topBalanceCnt=20:积分余额排行榜显示条数
topConsumptionCnt=20:积分消费排行榜显示条数
topCheckinCnt=20:签到达人排行榜显示条数

Chat Room

chatRoom.msgCnt=40:聊天室消息显示条数

Skins

skinDirName=classic:默认的主题
mobileSkinDirName=mobile:默认的移动端主题

Default User Avatar

defaultThumbnailURL=http://7xjz0r.com1.z0.glb.clouddn.com/user-thumbnail.png:默认用户头像(头像生成失败的情况下会用这个头像)

Stie Visit Statistic Code

siteVisitStatCode= 第三方统计代码,比如百度统计

Qiniu

qiniu.enabled=false:是否启用七牛云存储
qiniu.accessKey=:七牛云 Access Key
qiniu.secretKey=:七牛云 Secret Key
qiniu.domain=http://7xjz0r.com1.z0.glb.clouddn.com:七牛云访问域名
qiniu.bucket=symphony-dev:七牛云 Bucket
upload.img.maxSize=1048576:上传图片最大大小,单位字节
upload.file.maxSize=104857600:上传文件最大大小,单位字节
upload.dir=./upload/:上传本地服务器目录路径,如果启用了七牛云则优先使用七牛云

注意:

生产环境启用上传本地必须修改 upload.dir,使用绝对路径指定文件存放路径,不要指定到容器下
生产环境尽量使用单独的域名来获取上传的文件,单独处理流量,也避免出现安全隐患

Point

pointInit=500:用户注册后赠送的积分值
pointAddArticle=20:添加帖子需要消耗的积分值
pointUpdateArticle=5:更新帖子需要消耗的积分值
pointAddComment=5:回帖需要消耗的积分值
pointUpdateComment=5:更新回帖需要消耗的积分值
pointAddSelfArticleComment=2:自己回自己帖子时需要消耗的积分值
pointInviteRegister=200:邀请注册可获赠的积分值
pointActivityCheckinMin=5:签到活动可获赠的最小积分值
pointActivityCheckinMax=20:签到活动可获赠的最大积分值
pointActivityCheckinStreak=200:连续签到可获赠的积分值
pointThankComment=15:感谢回帖积分值
pointAddArticleBroadcast=100:发布同城广播需要消耗的积分值
pointAddArticleReward=20:启用帖子打赏区需要消耗的积分值
pointAtParticipants=3:使用艾特参与者功能时每个艾特需要消耗的积分值
pointStickArticle=100:指定帖子需要消耗的积分值
pointThankArticle=20:感谢帖子需要消耗的积分值
stickArticleTime=1800000:置顶帖子的时长,单位毫秒
pointActivityCharacter=5:写字活动可获赠的积分值
pointDataExport=100:数据导出需要消耗的积分值
pointInvitecode=100:购买邀请码需要消耗的积分值
pointInvitecodeUsed=200:邀请码被使用可获赠的积分值
pointActivityEatingSnake=20:贪吃蛇活动需要消耗的积分值
pointActivityEatingSnakeCollectMax=50:贪吃蛇活动可获赠的最大积分值
pointPerfectArticle=100:帖子上优选可获赠的积分值
pointActivityGobang=1:五子棋活动需要消耗的积分值
pointTransferMin=3000:允许使用积分转账功能的积分余额阈值
pointExchangeMin=5000:允许将积分兑换为红包的最小积分余额阈值
pointExchangeUnit=150:积分兑换红包 ¥1 所需积分值

Activity

activity1A0001Closed=false:是否关闭上证指数博彩活动
activity1A0001LivenessThreshold=17.5:参与上证指数博彩活动所需活跃度最小阈值

领取昨日活跃奖励积分相关参数:

activitYesterdayLivenessReward.activity.perPoint=5
activitYesterdayLivenessReward.article.perPoint=20
activitYesterdayLivenessReward.comment.perPoint=5
activitYesterdayLivenessReward.pv.perPoint=0.5
activitYesterdayLivenessReward.reward.perPoint=10
activitYesterdayLivenessReward.thank.perPoint=15
activitYesterdayLivenessReward.vote.perPoint=5
activitYesterdayLivenessReward.acceptAnswer.perPoint=10
activitYesterdayLivenessReward.maxPoint=300

Mail channel: sendcloud or aliyun or local

mail.channel=local:邮件渠道
mail.batch.articleSize=16:批量邮件推送帖子条数

SendCloud Mail channel

mail.sendcloud.apiUser=:SendCloud 渠道 API User
mail.sendcloud.apiKey=:SendCloud 渠道 API Key
mail.sendcloud.from=account@hacpai.com:SendCloud 发信人邮件地址
mail.sendcloud.batch.apiUser=:SendCloud 渠道批量 API User
mail.sendcloud.batch.apiKey=:SendCl 渠道批量 API Key
mail.sendcloud.batch.from=weekly@symphony.b3log.org:SendCloud 渠道批量发信人邮件地址

Aliyun Mail channel

mail.aliyun.accessKey=:阿里云渠道 Access Key
mail.aliyun.accessSecret=:阿里云渠道 Access Secret
mail.aliyun.from=account@hacpai.com:阿里云渠道发信人邮件地址
mail.aliyun.batch.from=weekly@symphony.b3log.org:阿里云渠道批量发信人邮件地址

Local Mail channel

mail.local.isdebug=true:设置为 debug 模式时,后台控制台会输出邮件发送过程
mail.local.transport.protocol=smtp:传输协议使用 smtp
mail.local.host=smtp.163.com:smtp 邮件服务器
mail.local.port=25:smtp 端口号设置
mail.local.smtp.auth=true:是否开启认证
mail.local.smtp.ssl=true:是否启用 SSL
mail.local.smtp.starttls.enable=false:是否启用 TLS
mail.local.smtp.sender=yourAccount@163.com:发送者的 Email
mail.local.smtp.username=:发送者名称
mail.local.smtp.passsword=:邮件验证密码,126 的 STMP 服务的客户端密码需要自己开通,不是登录密码,换成你自己的
mail.local.saved.eml.path=D:/:邮件保存目录,绝对路径

不推荐使用本地邮件渠道,送达率非常低,推荐使用 SendCloud。
Baidu

baidu.lbs.ak=:百度地图 API Access Key,获取用户所在城市需要配置该项
baidu.data.token=:百度搜索引擎推送 Token,对 SEO 有帮助
baidu.yuyin.apiKey=:百度语音 API Key,需要小薇语音预览功能需要配置该项
baidu.yuyin.secretKey=:百度语音 API Secret

BosonNLP

boson.token=:玻森自然语言处理 Token,用于发帖时获取帖子标签进行自动填充 https://bosonnlp.com

Geetest

geetest.enabled=false:是否启用极验 http://www.geetest.com
geetest.id=:极验 ID
geetest.key=:极验 Key

目前这个验证码只有在每日签到的时候使用。
Elasticsearch

es.enabled=false:是否启用 ES
es.server=http://localhost:9200:ES 服务地址

Algolia

algolia.enabled=false:是否启用 Algolia,https://www.algolia.com
algolia.appId=:Algolia APP ID
algolia.searchKey=:Algolia Search Key
algolia.adminKey=:Algolia Admin Key
algolia.index=:Algolia Index

Turing Robot

turing.enabled=true:是否启用图灵机器人小薇
turing.api=http://www.tuling123.com/openapi/api:图灵机器人接口地址
turing.key=:图灵机器人 Key
turing.name=V:图灵机器人用户名
turing.avatar=http://7xjz0r.com1.z0.glb.clouddn.com/robot_avatar.jpg:图灵机器人头像地址

XiaoV

xiaov.enabled=false:是否启用小薇服务推送
xiaov.api=http://hpxiaov.tunnel.qydev.com:小薇服务地址
xiaov.key=dev_key:小薇服务 Key

Reserved

reservedTags=Announcement, 回收站:保留标签,英文状态下逗号分隔
systemAnnounce=Announcement:系统公告标签
reservedUserNames=admin,participants,all,Bot,someone,b3log,hacpai,api,console:保留的用户名列表,英文状态下逗号分隔

White list

whitelist.tags=Elasticsearch,CoffeeScript,C#:标签白名单,不进行格式校验,英文状态下逗号分隔

WebSocket Scheme

websocket.scheme=ws:WebSocket 协议配置,ws/wss

Cache

cache.articleCnt=256:帖子缓存最大条数
cache.commentCnt=1024:回帖缓存最大条数

Performance Threshold

perfromance.threshold=500:性能监测最小阈值,单位毫秒,超过这个值就会在日志中打印相关监控信息以帮助性能问题排查

Cookie

cookie.secret=BEYOND:Cookie 加密密钥,生产环境建议修改

Anonymous

anonymous.point=3000:使用匿名发帖、回帖最小积分余额阈值
anonymousViewSkips=/tag/*,/domains/,/tags,/statistic,/domain/*,/perfect,/recent,/hot,/timeline,/community,/member/*,\ /api/v2/articles/**,/api/v2/domains,/api/v2/domain/*,/api/v2/tags,/api/v2/tag/*,/api/v2/user/*:跳过是否允许匿名浏览的路径,是否允许匿名浏览请参看管理后台中的其他管理
anonymousViewURIs=7:在不允许匿名浏览的情况下最多能浏览多少个路径

Invitecode

invitecode.expired=259200000:用户积分购买的邀请码会在多长时间内过期,单位毫秒

Tag

tag.maxTagTitleLength=12:标签校验允许最大长度

Forge

forge.link.maxTagCnt=50:链接熔炉最大显示标签数
forge.link.maxCnt=20:链接熔炉最大显示条数
forge.link.tagRefCnt=10:链接熔炉标签引用计数

这个功能目前已经停用。
IPFS

ipfs.dir=:IPFS 数据存储目录路径
ipfs.bin=:IPFS 可执行文件路径

关于 IPFS 请参考:IPFS 入门笔记
Macro head code

macroHeadPCCode=:PC 端 head 标签插入代码
macroHeadMobileCode=:移动端 head 标签插入代码

用于要在全局 head 标签插入代码的场景下。
Footer code

footerPCCode=:PC 端 footer 部分插入代码
footerMobileCode=:移动端 footer 部分插入代码

Permission

访问路径对应所需权限的配置。

`