编程 Vibe Music Server:Go语言构建高性能音乐后端,JWT认证+MinIO流媒体

2026-06-21 10:03:11 +0800 CST views 7

Vibe Music Server:Go 语言构建高性能音乐后端,JWT 认证 + MinIO 流媒体

标签: Go / Gin / 音乐服务 / 后端 / 开源 / PostgreSQL / Redis / MinIO / JWT / RESTful API
原文: 微信公众号「码农先森」https://mp.weixin.qq.com/s/LyuvMRluAcFfYWI5ICW98g
GitHub: https://github.com/kingleonardo999/Vibe-Music-server


一句话定位

Vibe Music Server 是一个使用 Go 语言构建的高性能音乐后端服务,提供 RESTful API 支持音乐播放、用户管理、播放列表、评论收藏等完整功能。技术栈:Go + Gin + PostgreSQL + Redis + MinIO + JWT。


功能特性

功能说明
🔐 用户认证安全的用户注册和登录(JWT)
🎵 音乐库管理管理歌曲、歌手和专辑信息
🎶 播放列表创建、查看、更新和删除个人播放列表
🎧 音乐流高效的音乐文件流式传输(MinIO)
🔍 搜索按歌曲、歌手或专辑进行搜索
❤️ 收藏收藏歌曲和歌单
💬 评论歌曲/歌单评论 + 点赞
📧 邮件服务SMTP 邮件通知

技术栈

组件技术
语言Go 1.18+
Web 框架Gin
数据库PostgreSQL
ORMGORM
缓存Redis
对象存储MinIO(音乐文件流式传输)
配置Viper
认证JWT

环境准备

  • Go 1.18+
  • PostgreSQL
  • Redis
  • MinIO(可选,用于音乐文件存储)
  • Docker(可选,用于快速启动数据库)

安装与运行

1. 克隆仓库

git clone https://github.com/kingleonardo999/Vibe-Music-server.git
cd Vibe-Music-server

2. 安装依赖

go mod tidy

3. 配置文件

项目使用 config/templateConfig.yml 作为配置模板。建议在 config/ 目录下创建 config.yml 覆盖默认配置。

# config/config.yml

# 数据库配置
database:
  host: 127.0.0.1
  port: 3306
  name: vibe_music
  username: root
  password: YOUR_DB_PASSWORD

# Redis 配置
redis:
  host: 127.0.0.1
  port: 6379
  password: YOUR_REDIS_PASSWORD

# MinIO 对象存储(音乐文件)
minio:
  endpoint: http://127.0.0.1:9090
  accessKey: minioadmin
  secretKey: minioadmin
  bucket: vibe-music

# 邮件服务
mail:
  host: YOUR_SMTP_HOST
  port: 465
  user: YOUR_EMAIL_ADDRESS
  password: YOUR_EMAIL_PASSWORD

# JWT 密钥
jwt:
  secret: YOUR_VERY_SECRET_JWT_KEY

注意config.yml 已添加到 .gitignore,避免敏感信息提交到版本控制。

4. 运行数据库迁移

go run ./cmd/migrate

5. 启动服务

go run ./cmd/server/main.go

服务器将在 http://localhost:8080 运行。


API 端点

用户 (/user)

方法端点说明
POST/user/register注册新用户
POST/user/login用户登录
GET/user/getUserInfo获取当前用户信息(需认证)
PUT/user/updateUserInfo更新用户信息(需认证)

歌曲 (/song)

方法端点说明
POST/song/getAllSongs获取歌曲列表(支持分页和搜索)
GET/song/getRecommendedSongs获取推荐歌曲
GET/song/getSongDetail/{id}获取单首歌曲详情

歌手 (/artist)

方法端点说明
POST/artist/getAllArtists获取歌手列表(支持分页和搜索)
GET/artist/getRandomArtists获取随机歌手
GET/artist/getArtistDetail/{id}获取歌手详情及其歌曲

歌单 (/playlist)

方法端点说明
POST/playlist/getAllPlaylists获取歌单列表(支持分页和搜索)
GET/playlist/getRecommendedPlaylists获取推荐歌单
GET/playlist/getPlaylistDetail/{id}获取歌单详情

收藏 (/favorite)

方法端点说明
POST/favorite/collectSong收藏歌曲(需认证)
DELETE/favorite/cancelCollectSong取消收藏歌曲(需认证)
POST/favorite/getFavoriteSongs获取收藏的歌曲列表(需认证)
POST/favorite/collectPlaylist收藏歌单(需认证)
DELETE/favorite/cancelCollectPlaylist取消收藏歌单(需认证)
POST/favorite/getFavoritePlaylists获取收藏的歌单列表(需认证)

评论 (/comment)

方法端点说明
POST/comment/addSongComment新增歌曲评论(需认证)
POST/comment/addPlaylistComment新增歌单评论(需认证)
PATCH/comment/likeComment/{id}点赞评论(需认证)

架构亮点

1. 音乐流式传输

使用 MinIO 对象存储托管音乐文件,支持高效流式传输,适合大文件场景。

2. 配置管理

Viper + YAML 配置,支持多环境覆盖,敏感信息与代码分离。

3. JWT 认证

无状态认证,适合分布式部署,Token 自带用户信息。

4. GORM 自动迁移

数据库 Schema 自动同步,开发迭代快。


项目结构

Vibe-Music-server/
├── cmd/
│   ├── server/
│   │   └── main.go          # 入口文件
│   └── migrate/             # 数据库迁移
├── config/
│   ├── templateConfig.yml   # 配置模板
│   └── config.yml           # 本地配置(.gitignore)
├── internal/
│   ├── handler/             # HTTP 处理器
│   ├── service/             # 业务逻辑
│   ├── repository/          # 数据访问层
│   ├── model/               # 数据模型
│   └── middleware/          # 中间件(JWT、CORS 等)
├── pkg/
│   ├── jwt/                 # JWT 工具
│   ├── minio/               # MinIO 客户端
│   └── redis/               # Redis 客户端
└── go.mod

适合谁用?

  • 🎵 音乐应用开发者:需要一个现成的后端服务
  • 🧑‍💻 Go 学习者:学习 Gin + GORM + JWT 项目架构
  • 🏗️ 自建音乐服务:搭建私人音乐库
  • 📚 API 设计参考:RESTful API 最佳实践

总结

Vibe Music Server 是一个结构清晰、功能完整的音乐后端服务。Go + Gin + PostgreSQL + Redis + MinIO 的组合覆盖了音乐应用的核心需求:用户认证、音乐库管理、播放列表、流式传输、收藏评论。

如果你正在开发音乐类应用,或者想学习 Go Web 项目的工程化实践,这个项目是一个不错的参考起点。


相关链接


Keywords: Vibe Music Server, Go, Gin, 音乐后端, PostgreSQL, Redis, MinIO, JWT, RESTful API, 开源项目, GORM, Viper

推荐文章

Plyr.js 播放器介绍
2024-11-18 12:39:35 +0800 CST
Vue3的虚拟DOM是如何提高性能的?
2024-11-18 22:12:20 +0800 CST
初学者的 Rust Web 开发指南
2024-11-18 10:51:35 +0800 CST
纯CSS实现3D云动画效果
2024-11-18 18:48:05 +0800 CST
JavaScript设计模式:组合模式
2024-11-18 11:14:46 +0800 CST
程序员茄子在线接单