VoceChat:真正“小而美”的私人聊天系统

为什么要搭建私人聊天软件

前些年,我们的团队直接把QQ当作交流工具,在QQ上进行活动,但后来发现QQ在某些方面不是很方便,而且过于臃肿,于是便策划着利用我们现有的一台服务器,自行搭建一个团队内部的讨论平台。我们一开始打算采用当时有较高知名度的DuckChat,但后来我们发现DuckChat早就在2019年初跑路了,网页版只有PC端界面,iOS和Android的App全部失传,而且整个系统存在着各种Bug(例如文件无法发送),运行效率低下,因此只能放弃。

后来偶然发现还有大佬做了个DuckChat的续命版本,修改了一些地方,给其Web端添加了移动端界面适配,勉强可用,由于当时找不到更好的同类作品,我们就采用了这个版本,并一直用到现在,应该已经用了一年多了。不过这毕竟是个五年前的项目,诸如消息发送失败、按钮错位、群人数显示错误、聊天记录一关闭浏览器就全部消失(这还逼着我给它写了个聊天记录自动保存插件)的Bug层出不穷,只能将就着使用了。

一次上文,偶然在网络上看见了推荐其他聊天平台的文章,于是我便开始寻找DuckChat的替代品。我花了很长的时间尝试安装Rocket.Chat,但不知道为什么,包括Snap、Docker安装等方法全都试了一遍过去,没有一个是能够正常安装的,而且Rocket.Chat的体积相当大,有很多我们用不上的功能(我们只是要个纯粹的协作和通讯平台),最后只好选择了放弃——直到有一天,我发现了VoceChat。

什么是VoceChat?

Vocechat 是一款简单、易用的聊天系统,具有轻量级、开源和可自托管等特点。

VoceChat支持独立部署,这就是说,我们可以很轻松的将其部署到自己的服务器上,用户数据等完全由用户自己掌握,传输过程加密。并且,VoceChat是一款真正的轻量级”小而美“聊天软件,它的体积仅为15MB,这样的大小几乎可以塞进任何服务器里。除了作为完全的聊天软件外,VoceChat还可以以插件的形式插入到网页中,提供网页聊天等各种丰富的功能。

VoceChat适用于团队内部交流、个人聊天服务搭建等,也可以用于网站客服、网站内嵌社区等场景。它博众聊天软件之所长,体积小,能力可不小,15MB的体积,却拥有正常聊天所需要的所有必备功能,例如回复、转发、点赞、钉选消息(相当于QQ的收藏消息)等。界面简洁,能够快速上手,且信息、图片、文件等都可以正常发送,手机版App还可以在App内直接预览PDF文件,这些已经秒杀许多同类产品了。

搭建VoceChat非常方便,不需要像我之前安装Rocket.Chat那样麻烦,安装一次就成功了,并且它很少需要特别进行维护,日常维护很方便。还提供Android、iOS端的App,AndroidAPP可以在Google Play(国内要科学上网)下载安装(也可以上官网下载APK),iOS的App可以直接在AppStore内搜索到。

官方搭建了一个 Demo 站点: VoceChat WebAPP ,想要搭建却又不知道VoceChat到底怎么样的可以先去体验一下,这绝对是目前你能找到的最好的私人部署聊天系统了。

如何安装VoceChat?

1.本地搭建体验

如果没有服务器,或者不想马上在服务器上搭建,先在本地电脑上试安装体验一下的,可以先安装 Docker,然后按以下命令安装:

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

安装完后,访问 http://localhost:3009/即可。

2.服务器搭建

我这里以一台4核4G的 CentOS-7.6 服务器和 Docker 的安装方式举例,除了 Docker 外也可以用其他方式安装,详情可以自行移步官网上的文档。

(1)安装 Docker。

没有在服务器上安装 Docker 的,需要先安装 Docker,已经安装过的可以跳过。

国外服务器:

curl -sSL https://get.docker.com/ | sh

国内服务器:

curl -sSL https://get.daocloud.io/docker | sh

安装完毕后,可以输入 docker -v 来查看是否安装完毕。安装后最好输入一下 systemctl start docker 以启动 Docker 服务。

(2)安装和运行 VoceChat。

安装和运行VoceChat只需要输入下面的这一段命令,输入后等待一会,就会自动下载、安装和启动 VoceChat 服务,此时访问 http://服务器IP:3009/即可。

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"403 Forbiddendocker 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"

其中的 -p 3009:3000 一条,前面的 3009 决定了VoceChat运行后占用的端口号,可以自行修改,不过如果服务器有防火墙和策略组的话,要记得放行 3009 端口或者自己设置的对应端口,否则无法访问。

最后一条 --network.frontend_url "https://vocechat.yourdomain.com" 是可选项,用于生成邀请链接,发送邀请邮件等场景,可以不写或在初始化VoceChat界面时填写。

这一切做完后,VoceChat 就安装并且运行在你的服务器上了。

部署完成后,第一次访问 VoceChat 站点,会要进行服务器初始化工作,要求设置管理员账户等。

(3)设置域名代理

安装完后,默认使用服务器IP地址 + 端口的方式访问。如果有安装 Nginx,后期可以用 Nginx 配置HTTP反向代理,将VoceChat代理到域名上,这样就可以通过域名来访问VoceChat了。但是,要注意,反向代理之前要先将域名解析到服务器IP上。

server{
  server_name vocechat.yourdomain.com;
  location / {
        proxy_pass http://127.0.0.1:3009; # 此处端口号取决于前面设置的 VoceChat 运行端口号
        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 配置文件来设置代理。但是,用宝塔面板设置代理一定要记得删掉宝塔创建网站时默认创建的 Nginx 配置文件中的下面两段:

我亲自测试,这两段会导致 VoceChat 的CSS和JS等文件无法加载,从而无法初始化和正常访问。后来测试证明,选中的两段中只有下面那一段要删,上面的可能可以不删。

总结

总而言之,VoceChat 是一款非常优秀的、可以私人部署的小而美的聊天系统,如果你也在为自己的团队搭建聊天系统,我建议你选用 VoceChat。

苏秋-RTC,2023年12月24日

(本文几乎所有文字内容均由本人 苏秋-RTC 原创,未经允许,不应转发和抄袭)

VoceChat 项目信息

  • 23
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
VC做的聊天小程序 // Chat.cpp : 定义应用程序的类行为。 // #include "stdafx.h" #include "Chat.h" #include "ChatDlg.h" #ifdef _DEBUG #define new DEBUG_NEW #endif // CChatApp BEGIN_MESSAGE_MAP(CChatApp, CWinApp) ON_COMMAND(ID_HELP, &CWinApp::OnHelp) END_MESSAGE_MAP() // CChatApp 构造 CChatApp::CChatApp() { // 支持重新启动管理器 m_dwRestartManagerSupportFlags = AFX_RESTART_MANAGER_SUPPORT_RESTART; // TODO: 在此处添加构造代码, // 将所有重要的初始化放置在 InitInstance 中 } // 唯一的一个 CChatApp 对象 CChatApp theApp; // CChatApp 初始化 BOOL CChatApp::InitInstance() { // 如果一个运行在 Windows XP 上的应用程序清单指定要 // 使用 ComCtl32.dll 版本 6 或更高版本来启用可视化方式, //则需要 InitCommonControlsEx()。否则,将无法创建窗口。 INITCOMMONCONTROLSEX InitCtrls; InitCtrls.dwSize = sizeof(InitCtrls); // 将它设置为包括所有要在应用程序中使用的 // 公共控件类。 InitCtrls.dwICC = ICC_WIN95_CLASSES; InitCommonControlsEx(&InitCtrls); CWinApp::InitInstance(); if(!AfxSocketInit()) { AfxMessageBox(_T("加载套接字库失败!")); return FALSE; } AfxEnableControlContainer(); // 创建 shell 管理器,以防对话框包含 // 任何 shell 树视图控件或 shell 列表视图控件。 CShellManager *pShellManager = new CShellManager; // 标准初始化 // 如果未使用这些功能并希望减小 // 最终可执行文件的大小,则应移除下列 // 不需要的特定初始化例程 // 更改用于存储设置的注册表项 // TODO: 应适当修改该字符串, // 例如修改为公司或组织名 SetRegistryKey(_T("应用程序向导生成的本地应用程序")); CChatDlg dlg; m_pMainWnd = &dlg; INT_PTR nResponse = dlg.DoModal(); if (nResponse == IDOK) { // TODO: 在此放置处理何时用 // “确定”来关闭对话框的代码 } else if (nResponse == IDCANCEL) { // TODO: 在此放置处理何时用 // “取消”来关闭对话框的代码 } // 删除上面创建的 shell 管理器。 if (pShellManager != NULL) { delete pShellManager; } // 由于对话框已关闭,所以将返回 FALSE 以便退出应用程序, // 而不是启动应用程序的消息泵。 return FALSE; }

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值