搭建一个属于你自己的 微信吧 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
firefox12
V2EX    分享创造

搭建一个属于你自己的 微信吧

  •  
  •   firefox12 2019-07-06 11:16:46 +08:00 5880 次点击
    这是一个创建于 2291 天前的主题,其中的信息可能已经有所发展或是发生改变。

    Venus

    曾经我尝试做一个类似~~钉钉~~的开源产品。但是在找投资的时候,被告知类似的产品很多,产品并没有太多的意义。所以它在硬盘里又躺了快 1 年吧,最后我想还是放出来吧。

    这是一款 IM 产品,它以网页版的形式提供服务,支持手机端 PC 端。它的功能包括 直接语音留言, 视频聊天,音频聊天,文字聊天,加好友等基本功能。没错,是利用网页直接进行视频聊天,语音聊天。在 webrtc 如此使用广泛的情况下,做到这点很容易。

    说说效果,在局域网里,比如在公司内部,我觉得你可以获得不亚于 QQ 微信的使用体验。视频聊天都会非常正常,效果也不错。如果是互联网上,你文字和语音留言都不成问题,如果要视频,你需要专门提供一个 stun 服务器才有可能。stun 的速度决定了你的效果。坦白地说,利用网页形式 直接进行视频聊天的条件并不成熟。但是 5G 时代,我相信这样的应用会更加容易实现

    我搭建了一个演示网站,可以直接使用

    https://www.meetyoucn.com

    网站首页

    效果大概这样!

    Watch the video]( http://www.iqiyi.com/w_19s8wf4dp5.html)

    部署

    1. 如果 我在 Internet 上部署,我需要做什么?

      首先你需要准备 SSL 证书。然后将证书分别改名为 cert.pem 和 key.pem 。覆盖项目里原有的证书。

      其次,你需要安装一个 redis 服务器作为数据库。

      下载完源码: 在本地看大概这样

      Image text

      代码的位置在 /webroot/html/js/domain.js

      修改代码里的配置

      修改代码

      然后分别重新启动 程序即可。 注意 启动离线语音消息服务器的时候,需要 修改域名部分。

      启动的样子大概这样,

      启动网站

      运行网站

      启动 信令服务器

      运行信令

      启动 IM 服务器 这个需要指定 redis 服务器的地址

      运行 IM

      启动离线语音消息服务器, 注意 这个需要指定完整的域名

      运行离线语言

      比如你的域名是 www.aaa.com 那么你启动离线语音消息服务器的命令就是

      ./upload -hostname=https://www.aaa.com

      注意必须是 https://www.aaa.com 不是 http://www.aaa.com

      注意 在 Internet 上进行视频通信,需要安装 stun,否则视频大概率是会失败的。

      比如你和对方在不同地方使用手机,服务器在 Internet 上,直接文字聊天,语音留言都没有问题,如果没有 stun 服务器,你们直接视频聊天大概率会失败。

      如果你和对方在同一局域网内,使用的服务器在 Internet 上,那么无论文字聊天,语音留言,直接视频是没有问题的。

    2. 如果我有自己的域名和证书, 我想在局域网里部署,我需要做什么?

      同 Internet 部署,没有任何区别

    3. 如果你没有自己域名和证书,但是也想试试局域网部署。

      首先,确认你会安装服务器程序的 IP, 如果 它们的 Ip 是如下 IP 里的一个,那么你可以用这个程序直接安装。

      Image text

    比如我想安装到的服务地址是 192.168.0.1 那么我可以用 www01.meetyoucn.com 作为你的局域网里的域名。

    第一步 修改源码

    代码的位置在 /webroot/html/js/domain.js

    修改代码里的配置

    修改代码

    将域名修改成 www01.meetyoucn.com

    然后分别重新启动 程序即可。 注意 启动离线语音消息服务器的时候,需要 修改域名部分。

    启动的样子大概这样,

    启动网站

    运行网站

    启动 语音聊天的信令服务器

    运行信令

    启动 IM 服务器 这个需要指定 redis 服务器的地址

    运行 IM

    启动离线语音消息服务器, 注意 这个需要指定完整的域名

    启动命令将改成 ./upload -hostname=https://www01.meetyoucn.com

    运行离线语音

    然后你使用 电脑 手机 ipad 打开 https://www01.meetyoucn.com 就可以注册,运行产品了。

    浏览器版本要求

    | | 文字聊天 | 视频聊天 | 操作系统 | | :---------: | ----- | --------------- | ---- | | PC | 所有浏览器 | Firefox, Chrome | 无要求 | | Ipad/Iphone | 所有浏览器 | Safari | 12.0 | | Android | 所有浏览器 | Chrome | 无要求 |

    服务器一共有 5 个。我发现虽然开源过代码,但是我发现大家并没什么兴趣,看来一个可用的产品才是最重要了。

    • 第一个 是 网页部分,这个部分是基于一个 Layim 的产品构建的。我已经购买了源码,你可以放心在上面继续开源使用。
    • 第二个 是一个 Web 服务器, 这个你完全可以用一个 nginx 服务代替。
    • 第三个 是语音留言服务器, 当你进行语音留言的时候,它会帮你将数据存储在 web 服务器上。
    • 第四个 是信令服务器, 主要用于视频聊天时管理双方的信令交互。
    • 第五个 是 IM 服务器,主要负责好友关系处理,聊天这样的服务。

    源码的话,看大家反应吧,如果星多就逐步发布吧。

    所有前端,后端,图片都是一个人鲁的,前端的加载优化没有做。希望有好的建议和意见帮助产品提高。

    有任何问题 都可以邮件 xiaojiaqi.cn#gmail.com

    第 1 条附言    2019-07-07 10:26:44 +08:00
    因为没铜币了,所以 忘了附上 代码地址


    https://github.com/xiaojiaqi/Venus
    11 条回复    2019-09-20 13:21:07 +08:00
    eastrd
        1
    eastrd  
       2019-07-06 16:37:12 +08:00 via Android
    好厉害啊!开发出这么多东西不容易,先前排支持一个!
    有没有考虑容器化+便捷部署,然后卖给公司供内部使用呢?
    firefox12
        2
    firefox12  
    OP
       2019-07-07 16:08:52 +08:00   1
    @eastrd 非常感谢你的建议。 昨天因为没有币了,所以没有回。

    首先 我忘记贴 Github 了

    https://github.com/xiaojiaqi/Venus


    其次按照 @eastrd 的建议, 我把它传到了 dockerhub 上,本来 dockerhub 一直是被墙的,所以我也没想过往上传,今天偶然试了一下 是可以的,就传上去了。

    docker 的使用很简单。

    3 种情况
    第一种, 我就是用镜像测试一下
    首先,假设你没有域名,那么你需要找一个 上图里的 ip,作为你的服务器。
    比如你本地服务器 ip 是 192.168.2.2 那么 www22.meetyoucn.com 就是你可以用的域名

    运行一下命令 就 ok 了
    sudo docker run --env WEBHOST=www22.meetyoucn.com -p 80:80 -p 443:443 -p 8888:8888 -p 8090:8090 -p 8091:8091 -d xiaojiaqi/venus:0.1.0
    这种玩法的缺点在于,容器重启 资料就没了。

    第二种情况, 我本地有一个 redis 服务器,我想把数据保留下来
    假设我的 redis 是 192.168.1.1 我的本地服务器还是 192.168.2.2, 那么域名就仍然是 www22.meetyoucn.com

    运行以下命令
    sudo docker run --env WEBHOST=www22.meetyoucn.com --env REDIS=192.168.1.1:6379 -p 80:80 -p 443:443 -p 8888:8888 -p 8090:8090 -p 8091:8091 -d xiaojiaqi/venus:0.1.0

    第三种情况, 我有一个自己的证书, 我想用自己的域名
    那么你需要把 cert.pem key.pem 两个挂载进系统

    差不多就是这样

    sudo docker run -v /local/cert.pem:/app/cert.pem -v /local/key.pem:/app/key.pem --env WEBHOST=www.myhost.com --env REDIS=192.168.2.30:6379 -p 80:80 -p 443:443 -p 8888:8888 -p 8090:8090 -p 8091:8091 -d xiaojiaqi/venus:0.1.0



    昨天有几个人加了 至尊宝的好友,可惜 上线太晚,抱歉。
    firefox12
        3
    firefox12  
    OP
       2019-07-07 16:10:14 +08:00   1
    使用 docker push xiaojiaqi/venus:0.1.0 下载镜像!

    https://cloud.docker.com/repository/registry-1.docker.io/xiaojiaqi/venus
    gaigechunfeng
        4
    gaigechunfeng  
       2019-07-09 10:32:16 +08:00
    感谢楼主,这个东西挺有技术含量的。
    我 star 了,以后如果项目需要,会告诉并送上感谢 :D
    zxcdsaz
        5
    zxcdsaz  
       2019-07-09 11:06:07 +08:00
    厉害了,star,watch 一条龙
    wedojava
        6
    wedojava  
       2019-07-09 13:09:15 +08:00
    已经 start,想问下,开发所用技术栈是?
    firefox12
        7
    firefox12  
    OP
       2019-07-09 15:31:03 +08:00
    @wedojava 就是 golang 写服务器,js 写了前端, 后来学了一下 typescript 把 js 转成了 js
    haozes
        8
    haozes  
       2019-07-09 16:30:20 +08:00   1
    真巧,最近也写了一个
    https://sspai.com/post/55560

    支持语音,文字,图片,视频,也用 stun,webrtc 服务,不过只支持 iOS
    cepro
        9
    cepro  
       2019-07-11 11:28:43 +08:00
    虽然类似的产品很多,但是需求也很旺盛。
    建议你去找一下细分垂直领域的机会,然后拆解或添加功能,重新包装,再推出去。
    nicoljiang
        10
    nicoljiang  
    PRO
       2019-07-12 19:07:05 +08:00
    支持一下,给大佬送个币~
    hewang42
        11
    hewang42  
       2019-09-20 13:21:07 +08:00
    很厉害啊 冒昧一问
    有兴趣把这个项目制作成课程吗 shiyanlou.com
    wechat : shiyanloukecheng
    溜了溜了
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2903 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 14:11 PVG 22:11 LAX 07:11 JFK 10:11
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86