一个基于 LNMP(Linux + Nginx + MariaDB + PHP)的开源短视频平台,前端采用单页应用(SPA,Hash 路由),UI 风格参考 Bilibili / YouTube。
- 视频浏览 · 瀑布/网格布局、分类筛选、关键词搜索、热门/最新排序
- 视频播放 · 原生
<video>播放器、自动记录播放量与观看历史、相关推荐 - 投稿上传 · 拖拽上传、封面可选、分类选择、简介、单文件 ≤ 200MB
- 账号体系 · 注册 / 登录 / 退出、Session 认证、密码 bcrypt 哈希
- 社交互动 · 点赞 / 取消、评论发表、关注 / 取关
- 个人中心 · 主页(作品列表)、关注 / 粉丝列表、历史记录、关注流、资料编辑(头像/简介)
| 层 | 选型 |
|---|---|
| 前端 | 原生 JavaScript SPA(Hash 路由)+ CSS3 |
| 后端 | PHP 8.x(PDO + Session) |
| Web 服务器 | Nginx 监听 8080,通过 unix socket 转发到 PHP-FPM |
| 数据库 | MariaDB / MySQL(utf8mb4,8 张表) |
| 存储 | 本地文件系统 uploads/{videos,thumbnails,avatars} |
shortvideo/
├── index.php # SPA 入口(注入当前登录用户为 window.__USER__)
├── config.php # 数据库 / 会话 / 通用工具函数
├── schema.sql # 数据库建表脚本
├── seed.php # 演示数据生成(10 个视频 + 5 位用户 + 点赞/评论/关注)
├── api/
│ ├── auth.php # 注册 / 登录 / 登出 / 我
│ ├── categories.php # 分类列表
│ ├── videos.php # 视频列表 / 详情 / 上传 / 点赞 / 评论 / 观看记录 / 删除
│ └── user.php # 资料 / 编辑 / 关注切换 / 粉丝 / 关注列表 / 历史 / 关注流 / 作品
├── assets/
│ ├── css/style.css
│ └── js/{api.js, app.js}
└── uploads/
├── videos/ # 演示或真实 MP4/WebM/MOV
├── thumbnails/ # JPG/PNG/WEBP 封面
└── avatars/ # 用户头像
# 1. 数据库
mysql -uroot -e "CREATE DATABASE shortvideo DEFAULT CHARSET utf8mb4;"
mysql -uroot shortvideo < schema.sql
# 2. 账号 & 目录
useradd -r -s /usr/sbin/nologin svuser
mkdir -p uploads/{videos,thumbnails,avatars,tmp} logs
chown -R www-data:www-data uploads logs
chmod -R 2775 uploads logs
# 3. 修改 config.php 里的 DB_USER / DB_PASS / DB_NAME
# 4. 把 Nginx server block(仓库同目录下可参考 conf/)指向 shortvideo/
# 5. 生成演示数据
php seed.php
# 6. 打开 http://localhost:8080/演示账号:科技小站 / demo1234
所有接口返回统一格式 {code, message, data},code=0 为成功。
| 接口 | method | 说明 |
|---|---|---|
/api/auth.php?action=login |
POST | 登录(JSON: account, password) |
/api/auth.php?action=register |
POST | 注册(JSON: username, email, password) |
/api/videos.php?action=list |
GET | 视频列表(category / sort / q / page / limit) |
/api/videos.php?action=detail&id=1 |
GET | 视频详情 |
/api/videos.php |
POST (action=like) | 点赞/取消 |
/api/videos.php |
POST (action=comment) | 发表评论 |
/api/videos.php |
POST (action=upload) | multipart/form-data 上传 |
/api/user.php?action=follow |
POST | 关注/取关切换 |
/api/user.php?action=history |
GET | 观看历史 |
仓库内已包含演示截图(构建本仓库时生成):
shot_home.png— 首页网格 + 分类标签shot_detail.png— 视频详情页(播放器 / 点赞评论 / 相关推荐)shot_profile.png— 作者个人主页
MIT