danmu-server
弹幕服务器,其客户端项目见danmu-client。
欲使用此项目,客户端需要使用对应的版本。已发布的服务端均已写明对应的客户端版本号,开发分支内的服务端版本仅对应开发分支的客户端。
功能特色
- 跨平台;
- 房间功能;
- 后台管理;
- 弹幕记录与搜索(需要开启数据库);
- 黑名单功能;
- 关键词替换、拦截功能;
- 弹幕记录;
- 扩展;
- 新浪微博登录扩展(需要开启缓存);
- 自动封禁功能扩展(需要开启缓存);
- 审核扩展;
- 直播拉取扩展
- 删除单条弹幕功能;
- 易于部署,简单高效。
后台截图
一些警告
稳定版请于Release手动下载。
部署方式
检查环境
Nodejs
Nodejs >= 6
数据库
如使用csv
,可无视此节。
默认使用MySQL
数据库。如需使用,需检查MariaDB或MySQL的安装状态。支持5.0+
。安装完成后,请创建相应的数据库。
如使用MongoDB
数据库,请检查MongoDB的安装状态。然后需要在安装完成后执行:npm install mongodb
。
缓存
如不使用新浪微博与自动封禁功能,可无视此节。
默认使用memcached
。如需使用,请检查Memcached(Linux)的安装状态。Windows
用户请自行查找适合的Memcached
版本。
如果要用阿里云开放缓存服务OCS,需要在安装完成后执行:npm install aliyun-sdk
。
直接安装
- 配置MariaDB,创建数据库等,不需要创建数据表。
- 修改
config.js
,使其参数与环境相符。 - 切换到命令行或终端,
cd
到程序所在目录执行npm install
,安装程序依赖库。 - 现在,你可以直接
npm start
启动。
Docker安装
Dockerfile可能年久失修,建议自己用alpine
封装一个。
直接用Docker
安装的话,镜像内是含MariaDB
的。
- 安装Docker。
config.js
调整配置。docker build -t="zsxsoft/danmu-server:" . && docker run -t -i -p 3000:3000 "zsxsoft/danmu-server"
升级
1.0.6 -> 1.1.0
- 在每个房间内增加cdn: false配置
1.0.5 -> 1.0.6
- 在每个房间内增加hostname配置,类型为数组,用于将房间与域名绑定
网页接口
GET /
可以直接发布最简单的弹幕。
GET /advanced
可以发布高级弹幕(需要密码)
GET /manage
可以进行后台管理
GET /realtime
可以实时接收弹幕并直接删除或封禁(需要密码)
配置说明
以下标有*
的配置项,运行时不可在后台修改。
"rooms": {
"房间1": {
* "hostname": ["test.zsxsoft.com", "localhost", "127.0.0.1"],
* "cdn": 是否使用CDN或反向代理(用于获取正确的IP),
* "display": "房间显示名",
* "table": "对应MySQL的数据表、MongoDB的集合",
"connectpassword": "客户端连接密码",
"managepassword": "管理密码",
"advancedpassword": "高级弹幕密码",
"keyword": {
"block": /强制屏蔽关键词,正则格式。/
"replacement": /替换关键词,正则格式/,
"ignore": /忽略词,正则格式/
},
"blockusers": [
"默认封禁用户列表"
],
"maxlength": 弹幕堆积队列最大长度,
"textlength": 每条弹幕最大长度,
* "image": {
* "regex": /图片弹幕解析正则,正则格式,不要修改/ig,
* "lifetime": 每个图片给每条弹幕增加的存货时间
},
"permissions": { // 普通用户允许的弹幕权限
"send": 弹幕开关;关闭后无论普通用户还是高级权限都完全禁止弹幕。,
"style": 弹幕样式开关,
"color": 颜色开关,
"textStyle": CSS开关,
"height": 高度开关,
"lifeTime": 显示时间开关,
}
},
"房间ID2": {
// 同上
}
},
* "database": { // 数据库
* "type": "数据库类型(mysql / mongo / csv / none)",
* "server": " 数据库地址(mysql / mongo)",
* "username": "数据库用户名(mysql / mongo)",
* "password": "数据库密码(mysql / mongo)",
* "port": "数据库端口(mysql / mongo)",
* "db": "数据库(mysql / mongo)",
* "retry": 24小时允许断线重连最大次数,超过则自动退出程序。24小时以第一次断线时间计。(mysql),
* "timeout": 数据库重连延时及Ping(mysql),
* "savedir": "指定文件保存位置(csv)",
},
"websocket": {
"interval": 弹幕发送间隔
"singlesize": 每次弹幕发送数量
},
* "http": {
* "port": 服务器HTTP端口,
* "headers": {}, // HTTP头
* "sessionKey": "随便写点,防冲突的"
},
* "cache": {
* "type": "缓存类型(memcached / aliyun)",
* "host": "缓存服务器地址,可用socket",
* "auth": 打开身份验证,
* "authUser": 身份验证账号,
* "authPassword": 身份验证密码,
},
"ext": {
// 扩展
}
}
扩展
新浪微博登录
"weibo": { // 新浪微博扩展
"clientID": '', // App ID
"clientSecret": '', // App Secret
"callbackURL": 'http://test.zsxsoft.com:3000/auth/sina/callback', // 这里填写的是 网站地址/auth/sina/callback
"requireState": true // 是否打开CSRF防御
}
自动封禁
"autoban": { // 自动封号扩展
"block": 3, // 被拦截超过一定数字自动封号
}
全局审核
"audit": { // 审核扩展
}
直播同步
此扩展基于danmu项目开发,需要安装Python 2.7+ 或 Python 3.5+。在启用前,你首先需要
pip install danmu
才可打开。
"livesync": { // 新浪微博扩展
"房间名": {
"liveUrl": '', // 直播网站地址
}
}
常见问题
数据库相关
{ [Error: Connection lost: The server closed the connection.] fatal: true, code: 'PROTOCOL_CONNECTION_LOST' }
请把MySQL的wait_timeout
设置得大一些。
搭配项目
流程图
协议
The MIT License (MIT)
博文
开发者
zsx - https://www.zsxsoft.com / 博客 - https://blog.zsxsoft.com