我开源了一个短视频应用(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 等. ...
随机推荐
- 从零到一:用Go语言构建你的第一个Web服务
使用Go语言从零开始搭建一个Web服务,包括环境搭建.路由处理.中间件使用.JSON和表单数据处理等关键步骤,提供丰富的代码示例. 关注TechLead,复旦博士,分享云服务领域全维度开发技术.拥有1 ...
- Git-HEAD 的含义
在 Git 中,"HEAD" 是一个特殊的引用,它指向当前所处的分支或提交. 当你进行一些操作时,比如提交代码.切换分支等,HEAD 的指向会随之改变.下面是 HEAD 在不同情况 ...
- 如何用python做一个简单的小游戏 Pygame
当然可以!下面是一个简单的Python游戏开发教程,帮助你入门: 安装Pygame库 Pygame是一个Python游戏开发库,可以帮助你创建游戏窗口.绘制图形.处理用户输入等.你可以使用以下命令在命 ...
- Camera | 11.瑞芯微摄像头采集图像颜色偏绿解决笔记
前言 在实际调试基于瑞芯微平台的camera过程中,发现显示的图片发绿, 现在把调试步骤分享给大家: 1.修改iq文件 sdk中位置: @external/camera_engine_rkaiq/iq ...
- JavaScript设计模式样例九 —— 桥接模式
桥接模式(Bridge Pattern) 定义:是用于把抽象化与实现化解耦,使得二者可以独立变化. 目的:将抽象部分与实现部分分离,使它们都可以独立的变化. 场景:实现系统可能有多个角度分类,每一种角 ...
- JavaScript设计模式样例五 —— 建造者模式
建造者模式(Builder Pattern) 定义:使用多个简单的对象一步一步构建成一个复杂的对象. 目的:将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示. 场景:一些基本部件不 ...
- JMESPath 使用
最近在学习使用 AWS CLI,经常要用到 query 功能.AWS CLI 使用的查询语法是 JMESPath,因此特地在这里记录常用的 JMESPath 语法. JMESPath 是一种查询语言, ...
- spark 先groupby 再从每个group里面选top n
import spark.implicits._ val simpleData = Seq(("James","Sales","NY",90 ...
- c程序设计语言 by K&R(四)输入与输出
一.标准输入.输出 1. 简单的输入\输出机制 从标准输入中一次读取一个字符:int getchar(void) 将字符c送到标准输出中: int putchar(int) 2. 输入重定向 如果程序 ...
- python脚本之requests库上传文件
一.前言 在学习的时候,发现有一个AWD的文件上传执行漏洞,突然想着批量对不同靶机进行操作并get_flag.思路简单,但是没构造 过文件上传的requests 的post请求的payload.便记录 ...