Tinode 是与 mumble – 自托管语音/文字聊天室 和 部署私人通讯软件DuckChat 类似的可以自托管的即时通讯平台,在 Android、iOS 和 Web 端提供即时聊天服务
如果有开放注册的使用需求,需要搭建机器开启了 SMTP 端口并且有 SMTP 服务器,或者使用其他 SMTP 服务,确保能够正常发送邮件
提交注册信息后需要立即验证邮箱,如果不验证邮箱,账户则不会激活,但是注册信息在提交表单后就写入了数据库,如果再用相同信息注册会提示注册信息重复
以下搭建过程使用预编译文件,不需要 SMTP 服务,同时 Tinode 也无法开放注册
下文将展示如何在 Debian 10 下无域名搭建 Tinode 服务端
环境
- Debian 10
参考
步骤
Tinode 提供三种数据库支持:RethinkDB、MySQL 和 MongoDB,这里选择 MySQL
以下指令均在 root 用户下执行,其他用户酌情添加 sudo
安装环境
MySQL
Tinode 要求 MySQL 版本必须在 5.7 以上
执行指令安装
wget https://dev.mysql.com/get/mysql-apt-config_0.8.18-1_all.deb dpkg -i mysql-apt-config_0.8.18-1_all.deb apt udpate apt install mysql-server
安装时选择 MySQL 5.7 版本(而不是8.0),记录数据库密码
配置数据库并运行 Tinode
获取并解压预编译包
在 Tinode - Release 获取最新版本链接
mkdir tinode cd tinode wget https://github.com/tinode/chat/releases/download/v0.17.6/tinode-mysql.linux-amd64.tar.gz tar zxvf tinode-mysql.linux-amd64.tar.gz
配置数据库密码
默认情况下 Tinode 以 root 用户和空密码(不使用密码)连接 MySQL,如果安装 MySQL 时配置了密码,则需要在配置文件中手动添加
编辑项目根目录下的 tinode.conf,进入 DataBase Configuration 部分下的 "store_config" - "adapters" - "mysql",在 "User" 键值对下添加 "Passwd" 键值对
//... "User": "root", "Passwd": "[your mysql password]", // 添加此行 "Net": "tcp", //...
数据库初始化
在项目根目录下执行
./init-db
这里没有选择导入 Tinode 自带的 data.json,如果选择导入 data.json,则可以跳过后续的 新建用户 和 配置用户权限 步骤,直接使用已导入的账户登录
运行 Tinode
在项目根目录下执行
./tinode
Tinode 默认监听 6060 端口(可以在 tinode.conf 中更改端口),浏览器访问 IP:6060 即可开始使用
可以使用 Nginx 等 Web 服务器反代到 80 端口,这里不赘述
新建用户
如果机器没有 SMTP 服务器,或者机器 SMTP 服务端口没有开放,是无法成功注册 Tinode 的(可以在 tinode.conf 配置文件内填写 SMTP 服务器)
Tinode 本身也没有提供管理员账户,所有管理员操作(例如:增删改用户/消息)都需要使用 tn-cli 完成
tn-cli 是 Tinode 官方编写的 python 管理脚本,需要 python 2.7 和 3.4+,以及 PiP 9.0.1+
获取并解压 tn-cli
执行
cd tinode wget https://github.com/tinode/chat/releases/download/v0.17.6/tn-cli.tar.gz tar zxvf tn-cli.tar.gz
安装 python 依赖
在解压目录执行
pip3 install -r requirements.txt
添加新用户
执行
python3 tn-cli.py # 进入 tn-cli # 以下指令在 tn-cli 中执行 acc --uname [your username] --password [your password] --fn [your friendly name] --cred enamil:[your email]
配置用户权限
使用以上指令新建的用户也需要邮箱验证,在没有 SMTP 的情况下可以直接操作数据库来跳过邮箱验证
此操作相当于将对应用户指定为 Tinode 的 root 用户
进入 MySQL
执行
mysql -u root -p # 输入密码
更新数据库
在 MySQL 控制台执行
UPDATE auth SET authlvl=30 WHERE uname='basic:[username]';
可以对多个用户使用
效果
Tinode 登录界面
登录后界面
发送消息
接收消息
How can I use nginx to reverse proxy to port 443?