简介 VoceChat

VoceChat 是一款支持独立部署的个人云社交媒体聊天服务。15MB 的大小可部署在任何的服务器上,部署简单,很少需要维护。前端可以内嵌到自己的网站下,数据完全由用户自己掌握,传输过程加密。VoceChat 从 Slack, Discord, RocketChat, Solid, Matrix 等产品和规范中博采众长,适用于团队内部交流,个人聊天服务,网站客服,网站内嵌社区的场景。

我们认为 Web 3.0 去中心化的第一步是基于个人云的去平台化,通过个性化的计算与个性化的存储,让个人和组织拥有自己的平台,所以 VoceChat 的定位是能轻易部署在私有云上的社交协作程序。

团队国际化,远程合作,贡献者来自中、美、巴西等地区, VoceChat 是一个开放的、赋能用户的产品,欢迎大家点 star 关注,提 issues,或者以其他形式参与贡献。

项目组成:

名称技术项目License说明
服务端:Rustvocechat-server(暂未开源)待定聊天服务端,支持主流平台: Linux x86\_64, Windows 32/64, Arm32, Arch64
客户端:Fluttervocechat-clientApache-2.0聊天客户端,支持 Android, iOS 平台的客户端
Web:Reactvocechat-webGPL-3.0聊天功能的浏览器版本,整合了管理
Web-SDK:Reactvocechat-web-sdk(暂未开源)GPL-3.0可以整合到其他 Web 产品中,使其赋能聊天功能

功能列表 & 计划

  • 群聊、私聊 / 2021-Q4
  • 引用, at / 2021-Q4
  • 图片、大文件传输 / 2021-Q4
  • 置顶 / 2022-Q1
  • 转发 / 2022-Q1
  • 收藏 / 2022-Q1
  • 阅后即焚(高级功能) / 2022-Q1
  • 语音(高级功能)/ 2022-Q4
  • 视频(高级功能)/ 2022-Q4

Docker 安装 VoceChat

重要提示

请确认你的系统架构:默认安装 linux/amd64,如果是 linux/arm64,请拉取privoce/vocechat-server:latest-arm64

本地快速体验

提示

假如没有服务器,但是在本地电脑装有 Docker,可以执行以下命令行,快速体验 VoceChat

docker run -d --restart=always \
  -p 3009:3000 \
  --name vocechat-server \
  privoce/vocechat-server:latest

浏览器访问: http://localhost:3009/

服务器部署

提示

请提前准备好一个域名,以下用vocechat.yourdomain.com举例

Docker + Nginx

运行 VoceChat

docker run -d --restart=always \
  -p 3009:3000 \
  --name vocechat-server \
  -v ~/.vocechat-server/data:/home/vocechat-server/data \
  privoce/vocechat-server:latest \
  --network.frontend_url "https://vocechat.yourdomain.com"

提示

  • -v ~/.vocechat-server/data:/home/vocechat-server/data目的是将docker内的数据映射出来,作用是后续vocechat-server升级同时保留已有数据,~/.vocechat-server/data只是举例,可自行定义。
  • network.frontend_url用于生成邀请链接,发送邀请邮件等场景,为可选参数,是个带网络协议的域名,所以不要忘了根据实际情况加协议http(s)。如果部署时未指定,也可在初始化Server流程时设置。

配置 Nginx http 反向代理

在 Nginx 配置文件目录(一般在/etc/nginx/conf.d)新建 Nginx 配置文件vocechat.yourdomain.com.conf,并配置好 http 请求:

server{
  server_name vocechat.yourdomain.com;
  location / {
        proxy_pass http://127.0.0.1:3009; # 此处端口号取决于docker运行的对外端口号
        proxy_redirect off;
        proxy_set_header        Host    $host;
        proxy_set_header        X-Real-IP       $remote_addr;
        proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
        proxy_max_temp_file_size 0; # 关掉硬盘缓存,增加写速度
        # SSE 相关配置
        proxy_http_version 1.1;
        proxy_set_header Connection '';
    }
}

检查配置文件的语法:nginx -t,没问题后,启用新增配置:nginx -s reload。此时,浏览器访问http://vocechat.yourdomain.com,能够进入初始化页面,即为配置成功。

配置

基本原理:让 Nginx 监听 443 端口,证书配置在 Nginx,通过 host 转发给 vocechat-server:3009,此时 vocechat-server 接受的依旧是 http。

┌─────────┐                  ┌─────────┐        ┌─────────┐│         │                  │  Nginx  │        │         ││ Client  ├─────────────────►│    CA   ├──────► │ vocechat││         │                  │   443   │        │   3000  │└─────────┘                  └─────────┘        └─────────┘

启用 https 有多种方式,此处我们推荐使用certbot,借助 certbot 可以自动生成证书并自动添加到对应域名的 Nginx 配置文件,完成 https 的启用。

Certbot 的使用

访问 https://certbot.eff.org/instructions ,请自行选择服务器环境,完成安装:

certbot install

使用以下命令,certbot 会列出已有的 Nginx 配置,选择对应的域名,获取证书,并让 certbot 自动编辑该 Nginx 配置文件,一键开启 https 访问:

# 如果非root用户,把sudo加上
sudo certbot certonly --nginx

此时,配置文件vocechat.yourdomain.com.conf已变为:


server{
    server_name vocechat.yourdomain.com;
    location / {
        proxy_pass http://127.0.0.1:3009; # 此处端口号取决于docker运行的对外端口号
        proxy_redirect off;
        proxy_set_header        Host    $host;
        proxy_set_header        X-Real-IP       $remote_addr;
        proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
        proxy_max_temp_file_size 0; # 关掉硬盘缓存,增加写速度
        # SSE 相关配置
        proxy_http_version 1.1;
        proxy_set_header Connection '';
    }
    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/vocechat.yourdomain.com/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/vocechat.yourdomain.com/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

}
server{
    if ($host = vocechat.yourdomain.com) {
        return 301 https://$host$request_uri;
    } # managed by Certbot
  listen 80;
  server_name vocechat.yourdomain.com;
    return 404; # managed by Certbot
}

重载 Nginx 配置(nginx -s reload)之后,此时,浏览器访问http://vocechat.yourdomain.com会自动切换为 https,即https://vocechat.yourdomain.com

Docker

vocechat-server 支持自动申请 https 证书(借助CertBot),使用该部署方式有两个前提:

  • 服务器 443 端口没有被占用
  • 准备一个域名,并已解析到该服务器 IP。
mkdir -p ~/.vocechat-server/data
docker run -d --restart=always \
  -p 443:443 \
  --name vocechat-server \
  -v ~/.vocechat-server/data:/home/vocechat-server/data \
  privoce/vocechat-server:latest \
  --network.bind "0.0.0.0:443" \
  --network.domain "vocechat.yourdomain.com" \
  --network.tls.type "acme_tls_alpn_01" \
  --network.tls.acme.cache_path "/home/vocechat-server/data/cert"

参数说明:

  • network.bind: 服务端绑定的 IP 和端口,0.0.0.0 为所有 IP
  • network.domain: 域名
  • network.type: TLS 验证方式,这里为 acme_tls_alpn_01,更多请参考代码目录 config/config.toml
  • network.tls.acme.cache_path: 证书存放位置。
  • network.tls.acme.directory_url: 默认的验证机构,可选,默认 https://acme-v02.api.letsencrypt.org/directory

访问:https://vocechat.yourdomain.com/,完成初始化 。

如果 80/443 端口被 Nginx 占用, 请参考 Docker + Nginx

其他相关命令

停止服务docker stop vocechat-server

docker stop vocechat-server

查看日志

docker logs -f vocechat-server

备份数据

cp -rf ~/.vocechat-server/data ~/.vocechat-server/backup

升级server版本(更新docker镜像)

docker stop vocechat-serverdocker rm vocechat-serverdocker pull privoce/vocechat-server:latest# 这里改为自己之前部署执行过的docker命令行docker run -d --restart=always \  -p 3009:3000 \  --name vocechat-server \  -v ~/.vocechat-server/data:/home/vocechat-server/data \  privoce/vocechat-server:latest \  --network.frontend_url "https://vocechat.yourdomain.com"

进入 Docker 内部

docker exec -it vocechat-server /bin/shcd /home/vocechat-server/data

移动 APP 与挂件

部署成功 vocechat,并且已完成初始化工作,可以继续安装使用我们的移动 APP,具体使用请移步:使用 VoceChat APP;还可以很方便地借助挂件,把聊天场景拓展到任意网站。具体请参看 使用挂件

最后修改:2023 年 05 月 09 日
如果觉得我的文章对你有用,请随意赞赏