我开源了一个短视频应用(Go+React)|DouTok2.0 项目介绍
<h2 id="前言">前言</h2><p>大家好,这里是白泽,拖更了一段时间,抱歉。在 DouTok2.0 可以初步允许大家接入开发之后,这篇文章才得以出炉。</p>
<blockquote>
<p>DouTok:一个开源的 web 端的短视频应用,采用微服务架构,包含前后端(React & Go),DouTok 正处在开发初期,目前已经完成了 基础的用户注册、登录、用户信息管理、视频上传、视频列表展示、评论、点赞、收藏等功能。</p>
</blockquote>
<p><img src="https://baize-blog-images.oss-cn-shanghai.aliyuncs.com/img/image-20241030091521273.png"></p>
<p>为什么要有 V2 版本:</p>
<p>例如:<strong>DouTok</strong> 是字节跳动青训营的参赛作品,但 <strong>DouTok1.0</strong> 版本的微服务划分不够合理,拆的过于零碎,也许看起来很“微服务”,但与实际工作生产环境上的服务划分却背道而驰,微服务的划分不应过分追求“微”,而是适应项目发展,在完善基本设计的前提下进行拆分。</p>
<p>让 <strong>DouTok</strong> 继续扩张的另一个卡点是其本身没有前端,只能依赖青训营中提供的“抖声”APP。为了让 <strong>DouTok</strong> 顺利扩张,所以我们决定开发一个全新的V2版本。在V2版本中,<strong>DouTok</strong> 减少了服务的划分,增加了<strong>前端项目</strong>,虽然现阶段依然不够完整,但是已经具备了继续扩张的土壤。</p>
<p>对参与过 <strong>DouTok1.0</strong> 维护的所有同学表示感谢!</p>
<p><img src="https://baize-blog-images.oss-cn-shanghai.aliyuncs.com/img/image-20241029233433568.png"></p>
<h2 id="后续规划">后续规划</h2>
<ul>
<li>
<p>前端:</p>
<ul>
<li>功能:页面布局协调,以及事件跳转完善等</li>
<li>性能:React 组件优化与提炼等</li>
</ul>
</li>
<li>
<p>后端:</p>
<ul>
<li>功能:聊天系统(IM)、视频推荐、消息推送、私信等功能</li>
<li>性能:可观测性、压力测试,缓存 or 消息队列接入等</li>
</ul>
</li>
</ul>
<h2 id="参与贡献">参与贡献</h2>
<p>无论你是<strong>前端开发者</strong>还是<strong>后端开发者</strong>,都可以参与到 <strong>DouTok</strong> 的开发中来,我们欢迎你的加入!</p>
<p>🌟 <strong>仓库地址</strong>:https://github.com/cloudzenith/DouTok</p>
<p>🔥 如何参与贡献:https://cloudzenith.github.io/DouTok/community</p>
<p>🐧 QQ群: 622383022</p>
<p>📺 B站讲解:白泽talk</p>
<p>🔑 开源学习仓库:go-learning</p>
<h2 id="快速开始">快速开始</h2>
<p>本教程将带领你从零开始,循序渐进搭建并启动 <code>DouTok</code> 项目,若读者已具备相关知识,可选择性阅读。</p>
<p>所有信息参考文档站(非常详细): https://cloudzenith.github.io/DouTok/docs/quickstart/</p>
<h2 id="项目架构">项目架构</h2>
<p><img src="https://baize-blog-images.oss-cn-shanghai.aliyuncs.com/img/image-20241029222657307.png"></p>
<h2 id="主要目录">主要目录</h2>
<p>这是一个巨仓项目,所有的服务都在这个仓库中,目录结构如下:</p>
<ul>
<li>backend: 后端服务</li>
<li>frontend: 前端服务</li>
<li>test: 测试</li>
<li>deploy: 部署</li>
<li>docs-site: 文档站</li>
<li>env: 依赖环境部署</li>
<li>sql: 数据库脚本</li>
</ul>
<h2 id="页面展示">页面展示</h2>
<ul>
<li>上传视频</li>
</ul>
<p><img src="https://baize-blog-images.oss-cn-shanghai.aliyuncs.com/img/image-20241030000520491.png"></p>
<ul>
<li>视频</li>
</ul>
<p><img src="https://baize-blog-images.oss-cn-shanghai.aliyuncs.com/img/image-20241029235126428.png"></p>
<ul>
<li>评论 & 点赞 & 关注</li>
</ul>
<p><img src="https://baize-blog-images.oss-cn-shanghai.aliyuncs.com/img/image-20241029235154405.png"></p>
<h2 id="环境准备">环境准备</h2>
<ol>
<li>
<p>Golang 1.22+</p>
<blockquote>
<ul>
<li>https://golang.org/dl/</li>
<li>https://golang.google.cn/dl/</li>
</ul>
</blockquote>
</li>
<li>
<p>Node 14.17+</p>
<blockquote>
<ul>
<li>https://nodejs.org/en/download/</li>
</ul>
</blockquote>
</li>
<li>
<p>React.js + Next.js</p>
<blockquote>
<ul>
<li>https://reactjs.org/</li>
<li>https://nextjscn.org/</li>
</ul>
</blockquote>
</li>
<li>
<p>JetBrains GoLand/WebStorem</p>
<blockquote>
<ul>
<li>https://www.jetbrains.com/</li>
</ul>
</blockquote>
</li>
<li>
<p>VSCode</p>
<blockquote>
<ul>
<li>https://code.visualstudio.com/</li>
</ul>
</blockquote>
</li>
<li>
<p>Docker</p>
<blockquote>
<ul>
<li>https://www.docker.com/products/docker-desktop</li>
</ul>
</blockquote>
</li>
</ol>
<h2 id="必要组件配置及启动">必要组件配置及启动</h2>
<ul>
<li>Consul: 通过<code>backend/gopkgs/launcher</code>提供能力,所有后端服务均自动注册到Consul中</li>
<li>Redis: 缓存</li>
<li>MySQL: 持久化存储</li>
<li>MinIO: 对象存储</li>
<li>RocketMQ: 消息队列(不是必须)</li>
</ul>
<ol>
<li>找到<code>env/basic.yml</code>文件,通过命令<code>docker-compose -f ./env/basic.yml up -d</code>启动Consul, Redis, MySQL, MinIO<br>
(2、3步不是必须)</li>
<li>找到<code>env/rocketmq/broker.conf</code>文件,将<code>brokerIP1</code>修改为本地局域网IP</li>
<li>找到<code>env/rocketmq.yml</code>文件,通过命令<code>docker-compose -f ./env/rocketmq.yml up -d</code>启动RocketMQ</li>
</ol>
<h2 id="mysql库表结构同步">MySQL库表结构同步</h2>
<ol>
<li>进入<code>sql</code>目录</li>
<li>检查<code>sql/Makefile</code>文件,其中涉及的MySQL连接需注意应与本地环境一致</li>
<li>安装 goose 工具,执行<code>go install github.com/pressly/goose/v3/cmd/goose@latest</code></li>
<li>执行<code>make up</code>命令,MySQL库表结构会同步到本地</li>
</ol>
<h2 id="启动后端服务">启动后端服务</h2>
<h3 id="编译运行">编译运行</h3>
<ol>
<li>进入<code>backend</code>目录下除<code>gopkgs</code>外的所有服务目录,依次 <code>go run cmd/main.go</code> 启动服务</li>
</ol>
<h3 id="镜像运行">镜像运行</h3>
<ol>
<li>进入<code>backend</code>目录下除<code>gopkgs</code>外的所有服务目录,执行<code>make build</code>以编译Docker镜像</li>
<li>进入<code>env</code>目录,检查<code>configs</code>下各个配置文件,应与本地环境保持一致,特别是 <code>./baseservice/config.yaml</code> 中,<code>minio.default.host</code> 需要改成本机局域网IP</li>
<li>进入<code>env</code>目录,执行<code>docker-compose -f backend.yml up -d</code>启动所有后端服务</li>
</ol>
<h2 id="启动前端服务">启动前端服务</h2>
<ol>
<li>进入<code>frontend/doutok</code>目录,执行<code>pnpm install</code>安装依赖</li>
<li>执行<code>pnpm dev</code>启动前端服务,通过 http://localhost:23000 访问</li>
</ol>
<h2 id="小结">小结</h2>
<p>持续更新中,欢迎关注。</p>
</div>
<div id="MySignature" role="contentinfo">
如果有任何意见请在评论区积极留言<br><br>
来源:https://www.cnblogs.com/YLTFY1998/p/18515662
頁:
[1]