我开源了一个短视频应用(Go+React)|DouTok2.0 项目介绍
前言
大家好,这里是白泽,拖更了一段时间,抱歉。在 DouTok2.0 可以初步允许大家接入开发之后,这篇文章才得以出炉。
DouTok:一个开源的 web 端的短视频应用,采用微服务架构,包含前后端(React & Go),DouTok 正处在开发初期,目前已经完成了 基础的用户注册、登录、用户信息管理、视频上传、视频列表展示、评论、点赞、收藏等功能。

为什么要有 V2 版本:
例如:DouTok 是字节跳动青训营的参赛作品,但 DouTok1.0 版本的微服务划分不够合理,拆的过于零碎,也许看起来很“微服务”,但与实际工作生产环境上的服务划分却背道而驰,微服务的划分不应过分追求“微”,而是适应项目发展,在完善基本设计的前提下进行拆分。
让 DouTok 继续扩张的另一个卡点是其本身没有前端,只能依赖青训营中提供的“抖声”APP。为了让 DouTok 顺利扩张,所以我们决定开发一个全新的V2版本。在V2版本中,DouTok 减少了服务的划分,增加了前端项目,虽然现阶段依然不够完整,但是已经具备了继续扩张的土壤。
对参与过 DouTok1.0 维护的所有同学表示感谢!

后续规划
前端:
- 功能:页面布局协调,以及事件跳转完善等
- 性能:React 组件优化与提炼等
后端:
- 功能:聊天系统(IM)、视频推荐、消息推送、私信等功能
- 性能:可观测性、压力测试,缓存 or 消息队列接入等
参与贡献
无论你是前端开发者还是后端开发者,都可以参与到 DouTok 的开发中来,我们欢迎你的加入!
仓库地址:https://github.com/cloudzenith/DouTok
如何参与贡献:https://cloudzenith.github.io/DouTok/community
QQ群: 622383022
B站讲解:白泽talk
开源学习仓库:go-learning
快速开始
本教程将带领你从零开始,循序渐进搭建并启动 DouTok 项目,若读者已具备相关知识,可选择性阅读。
所有信息参考文档站(非常详细): https://cloudzenith.github.io/DouTok/docs/quickstart/
项目架构

主要目录
这是一个巨仓项目,所有的服务都在这个仓库中,目录结构如下:
- backend: 后端服务
- frontend: 前端服务
- test: 测试
- deploy: 部署
- docs-site: 文档站
- env: 依赖环境部署
- sql: 数据库脚本
页面展示
- 上传视频

- 视频

- 评论 & 点赞 & 关注

环境准备
Golang 1.22+
Node 14.17+
React.js + Next.js
JetBrains GoLand/WebStorem
VSCode
Docker
必要组件配置及启动
- Consul: 通过
backend/gopkgs/launcher提供能力,所有后端服务均自动注册到Consul中 - Redis: 缓存
- MySQL: 持久化存储
- MinIO: 对象存储
- RocketMQ: 消息队列(不是必须)
- 找到
env/basic.yml文件,通过命令docker-compose -f ./env/basic.yml up -d启动Consul, Redis, MySQL, MinIO
(2、3步不是必须) - 找到
env/rocketmq/broker.conf文件,将brokerIP1修改为本地局域网IP - 找到
env/rocketmq.yml文件,通过命令docker-compose -f ./env/rocketmq.yml up -d启动RocketMQ
MySQL库表结构同步
- 进入
sql目录 - 检查
sql/Makefile文件,其中涉及的MySQL连接需注意应与本地环境一致 - 安装 goose 工具,执行
go install github.com/pressly/goose/v3/cmd/goose@latest - 执行
make up命令,MySQL库表结构会同步到本地
启动后端服务
编译运行
- 进入
backend目录下除gopkgs外的所有服务目录,依次go run cmd/main.go启动服务
镜像运行
- 进入
backend目录下除gopkgs外的所有服务目录,执行make build以编译Docker镜像 - 进入
env目录,检查configs下各个配置文件,应与本地环境保持一致,特别是./baseservice/config.yaml中,minio.default.host需要改成本机局域网IP - 进入
env目录,执行docker-compose -f backend.yml up -d启动所有后端服务
启动前端服务
- 进入
frontend/doutok目录,执行pnpm install安装依赖 - 执行
pnpm dev启动前端服务,通过 http://localhost:23000 访问
小结
持续更新中,欢迎关注。
我开源了一个短视频应用(Go+React)|DouTok2.0 项目介绍的更多相关文章
- 短视频sdk:选择一个靠谱的短视频SDK 你需要了解这些
2017 年,短视频成为了内容创业的新风口,各种短视频 App 如雨后春笋般先后上线.随着互联网内容消费升级,视频越来越像文字.图片一样,成为每一个 App 不可或缺的一部分. 为了能够更好地聚焦于业 ...
- 短视频技术详解:Android端的短视频开发技术
在 <如何快速实现移动端短视频功能?>中,我们主要介绍了当前短视频的大热趋势以及开发一个短视频应用所涉及到的功能和业务.在本篇文章中,我们主要谈一谈短视频在Android端上的具体实现技术 ...
- 10分钟快速上车短视频风口:基于uniapp框架创建自己的仿抖音短视APP
在今年也就是第48次发布的<中国互联网络发展状况统计报告>有这样一个数据,21年的上半年以来,我国我国网民规模达10.11亿,其中短视频用户达8.88亿.碎片化的生活场景下,短视频成为人们 ...
- 国内最简单的短视频SDK
最近阿里百川和趣拍一起合作推出了一个短视频SDK.之前很多厂商可能都是用的Vitamio的短视频SDK.之后我考察过,也做过一些调查,发现Vitamio真的奇贵无比,屌丝公司根本用不起,阿里和趣拍这下 ...
- python爬虫实战:利用scrapy,短短50行代码下载整站短视频
近日,有朋友向我求助一件小事儿,他在一个短视频app上看到一个好玩儿的段子,想下载下来,可死活找不到下载的方法.这忙我得帮,少不得就抓包分析了一下这个app,找到了视频的下载链接,帮他解决了这个小问题 ...
- 如何设计一款优秀的短视频 SDK
2017 年,短视频成为了创业的新风口,各种短视频 App 如雨后春笋般先后上线,视频越来越像文字.图片一样,成为每一个 App 不可或缺的一部分. 1. 包体一定要尽可能小 如何做到尽可能的减小 S ...
- 2018亚太CDN峰会开幕, 阿里云王海华解读云+端+AI的短视频最佳实践
4月11-12日,2018亚太CDN峰会在北京隆重召开,在11日下午的短视频论坛中,阿里云高级技术专家王海华进行了<短视频最佳实践:云+端+AI>的主题演讲,分享了短视频的生命周期关键点和 ...
- CDN高级技术专家周哲:深度剖析短视频分发过程中的用户体验优化技术点
深圳云栖大会已经圆满落幕,在3月29日飞天技术汇-弹性计算.网络和CDN专场中,阿里云CDN高级技术专家周哲为我们带来了<海量短视频极速分发>的主题分享,带领我们从视频内容采集.上传.存储 ...
- 浅谈短视频APP的发展趋势
2014年6月20日,在AppAnnie最新发布5月应用指数中,美拍荣登“非游戏类iOS榜单”全球下载量第一位置,成为全球iOS应用商店最热门APP.能在<AppAnnie应用指数>这份A ...
- 视频剪辑什么鬼?Python 带你高效创作短视频
阅读文本大概需要 10 分钟. 近两年,抖音.快手将短视频推到风口浪尖上,要生产出高质量的视频,离不开视频剪辑这一环节:在全民剪片浪潮中,大众使用最多的剪辑软件如:Pr.FCPX.剪印.Vue 等. ...
随机推荐
- BMC Genomics | 综合代谢组学和转录组学分析揭示了菊花黄酮和咖啡酰奎宁酸的生物合成机制
杭白菊是一种流行的药用和食用植物,主要通过黄酮类和咖啡酰奎宁酸(CQAs)的存在发挥其生物活性.然而,菊花头状花序中黄酮和CQA生物合成的调控机制尚不清楚. 本研究采用高效液相色谱法测定了菊花头状花序 ...
- Linux信号量(1)-SYSTEM V
信号量概念 信号量本质上是一个计数器(不设置全局变量是因为进程间是相互独立的,而这不一定能看到,看到也不能保证++引用计数为原子操作),用于多进程对共享数据对象的读取,它和管道有所不同,它不以传送 ...
- 去除WinForm程序中的Devexpress弹窗
去除WinForm程序中的Devexpress弹窗 /// <summary> /// 应用程序的主入口点. /// </summary> [STAThread] static ...
- 【YashanDB知识库】yasdb jdbc驱动集成druid连接池,业务(java)日志中有token IDENTIFIER start异常
问题现象 客户的java日志中有如下异常信息: 问题的风险及影响 对正常的业务流程无影响,但是影响druid的merge sql功能(此功能会将sql语句中的字面量替换为绑定变量,然后将替换以后的sq ...
- 【YashanDB知识库】用户密码带@字符时exp和imp无法使用
[问题分类]数据导入导出 [关键字]YAS-00404.数据导入导出.密码.特殊字符@.exp.imp [问题描述] 当用户密码带@字符时,使用exp和imp导入导出数据,使用转义符仍然出现报错 且y ...
- OpenAI注册-临时手机号/邮箱
OpenAI 在注册ChatGPT时,发生了一个错误,使用邮箱进行注册后,在注册界面会提示"Not available OpenAI's services are not available ...
- Opensack-T版脚本安装
openStack-train 搭建部署 项目环境: 主机名 外网口(net) 内口(仅主机)s 配置 controller 192.168.220.10/192.168.220.1/24 192.1 ...
- Zabbix-(1)安装
环境: VMware Workstation Pro 16.0 版本 系统 Centos7 内存 2G 处理器 1G 硬盘 20G 网络适配器 NAT 服务器地址:192.168.220.40 1.安 ...
- Google Analytics – GA4 & Tag Manager 概念篇
前言 当我们设计好网站或者 App 后, 我们要怎样知道这个产品用户是否满意呢? 如果发掘潜在的提升空间呢? 等用户反馈? 投诉? 显然不是上策, 更好的方式是观察. 身为一个产品经理, 我只要看着你 ...
- C++ STL queue容器——队列
queue容器 基本概念 queue是一种**先进先出的数据结构,它有两个出口,queue容器允许从一端新增元素,从另一端移除元素. queue容器没有迭代器,所有元素进出都必须符合"先进先 ...