Star 历史趋势
数据来源: GitHub API · 生成自 Stargazers.cn
README.md

feedsystem_video_go

基于 Go + Vue 3 的短视频 Feed 系统,含账号、视频、点赞、评论、关注、Feed 流、私信、通知,支持 Redis 缓存、RabbitMQ 异步 Worker、分片上传、SSE 实时推送、Docker Compose 部署。

更完整的视频 Feed 流系统项目

LeoninCS/GCFeed 是更为全面完整的视频 Feed 流系统项目,覆盖更丰富的业务能力与工程实践。

功能

模块功能
账号注册、登录、Refresh Token、改名、改密、登出、头像上传、个人简介、主页统计
视频普通上传、5MB 分片上传、断点续传、封面上传、发布、作者作品、详情缓存、#话题标签
点赞点赞、取消点赞、是否已赞、已赞列表、RabbitMQ 异步落库、热度更新、SSE 通知
评论发布、删除、列表、@username 提及通知、RabbitMQ 异步落库、热度更新
关注关注、取关、粉丝列表、关注列表、粉丝/关注计数、SSE 通知
Feed推荐流、关注流、点赞榜、热榜、话题流、冷热分离、游标分页、短视频沉浸播放
私信发送私信、按对端用户查看最近 50 条会话
通知点赞/评论/关注事件通知、提及通知、SSE 实时推送、通知列表、未读计数、已读标记
工程Docker Compose、start.sh、API/Worker 拆分运行、限流、pprof、健康检查

Docker Compose 一键启动

docker compose up -d --build

访问:

  • 前端:http://localhost:5173
  • 后端 API:http://localhost:8080
  • RabbitMQ 管理台:http://localhost:15672admin / password123

Docker Compose 会读取 .env,缺省使用 feedsystem-dev-secret-key。生产环境请修改 JWT_SECRET

脚本启动

./start.sh

start.sh 默认启动 RabbitMQ、Redis、后端 API、Worker 与前端。常用开关:

START_FRONTEND=0 ./start.sh       # API + Worker
START_WORKER=0 ./start.sh         # API + 前端
STOP_DOCKER=1 ./start.sh          # 退出时停止脚本拉起的 compose 服务
CONFIG_PATH=configs/config.yaml ./start.sh

本地开发

# 启动依赖
docker compose up -d mysql redis rabbitmq

# 后端
cd backend
CONFIG_PATH=configs/config.compose-local.yaml go run ./cmd

# Worker
CONFIG_PATH=configs/config.compose-local.yaml go run ./cmd/worker

# 前端
cd frontend
npm install && npm run dev

CI

GitHub Actions 配置位于 .github/workflows/ci.yml,在 Pull Request 以及推送到 mainmaster 时运行。

  • 后端:Go 1.24.x,执行 go mod downloadgo vet ./...go test -race -count=1 ./...
  • 前端:Node.js 22,执行 npm cinpm run build

接口清单

账号 /account

方法路径鉴权说明
POST/register注册(限流 5次/时/IP)
POST/login登录,返回 access_token + refresh_token
POST/refresh刷新 access_token(用 refresh_token)
POST/changePassword改密码(需旧密码)
POST/findByID按 ID 查用户
POST/findByUsername按用户名查
POST/getProfile用户主页(视频数/获赞/粉丝数)
POST/logoutJWT登出(同时失效双 token)
POST/renameJWT改名
POST/uploadAvatarJWT上传头像(jpg/png/webp,≤10MB)
POST/updateProfileJWT更新简介/头像

视频 /video

方法路径鉴权说明
POST/publishJWT发布视频(自动提取 #话题)
POST/uploadVideoJWT上传视频文件(mp4,≤200MB)
POST/uploadCoverJWT上传封面(jpg/png/webp,≤10MB)
POST/chunk/initJWT初始化分片上传(文件 MD5、大小、分片数)
POST/chunk/uploadJWT上传单个分片(multipart,含分片 MD5 校验)
POST/chunk/statusJWT查询已上传分片
POST/chunk/completeJWT合并分片并返回 play_url
POST/listByAuthorID按作者查视频
POST/getDetail视频详情缓存

点赞 /like

方法路径鉴权说明
POST/likeJWT点赞
POST/unlikeJWT取消点赞
POST/isLikedJWT是否已赞
POST/listMyLikedVideosJWT我赞过的视频

评论 /comment

方法路径鉴权说明
POST/listAll评论列表(分页200,按时间升序)
POST/publishJWT发布评论(支持 @username 提及)
POST/deleteJWT删除评论

关注 /social

方法路径鉴权说明
POST/followJWT关注
POST/unfollowJWT取关
POST/getAllFollowersJWT粉丝列表(含粉丝数)
POST/getAllVloggersJWT关注列表(含关注数)
POST/getCountsJWT粉丝/关注计数

Feed /feed

方法路径鉴权说明
POST/listLatest软鉴权最新视频(游标分页)
POST/listLikesCount软鉴权点赞排行(复合游标)
POST/listByPopularity软鉴权热度榜(快照分页)
POST/listByFollowingJWT关注流
POST/listByTag软鉴权按 #话题 浏览

通知 /notification

方法路径鉴权说明
GET/stream?token=<access_token>SSE 实时推送,也支持 Authorization: Bearer <token>
POST/list最近 50 条通知
POST/markRead标记已读;传 id 标记单条,省略 id 标记全部
POST/unreadCount未读计数

私信 /message

方法路径鉴权说明
POST/sendJWT发送私信
POST/listJWT对话列表

环境变量

变量默认值说明
JWT_SECRETfeedsystem-dev-secret-keyJWT 签名密钥,生产须改
SERVER_PORT8080后端监听端口
MYSQL_HOST / MYSQL_PORT配置文件值MySQL 地址
MYSQL_USER / MYSQL_PASSWORD配置文件值MySQL 账号密码
MYSQL_ROOT_PASSWORD123456MySQL root 密码
MYSQL_DATABASEfeedsystemMySQL 数据库名
REDIS_HOST / REDIS_PORT配置文件值Redis 地址
REDIS_PASSWORD123456Redis 密码
REDIS_DB0Redis DB
RABBITMQ_HOST / RABBITMQ_PORT配置文件值RabbitMQ 地址
RABBITMQ_USER / RABBITMQ_PASSadmin / password123RabbitMQ 账号

详见 .env.example

运维与可观测性

  • GET /healthz 返回后端健康状态。
  • 本地配置默认开启 pprof:API localhost:6060,Worker localhost:6061
  • 上传文件写入 backend/.run/uploads;Docker 环境挂载到 backend_uploads volume。
  • Redis 用于 Token 缓存、视频实体缓存、Feed 时间线、热榜窗口、分片上传会话。
  • RabbitMQ Topic Exchange 覆盖点赞、评论、关注、热度、视频时间线事件,并配置 DLX。

关于 About

一款基于Go语言的视频feed流系统(仿tiktok项目)。

语言 Languages

Go81.6%
TypeScript13.1%
Shell2.7%
CSS1.8%
Dockerfile0.8%
HTML0.1%

提交活跃度 Commit Activity

代码提交热力图
过去 52 周的开发活跃度
198
Total Commits
峰值: 42次/周
Less
More

核心贡献者 Contributors