短视频分发系统搭建实录:Vue前端+ThinkPHP推荐流与多语言二开笔记

声明:本文仅供技术学习参考,不构成任何投资建议或运营指导;任何实际部署必须遵守当地法律法规,禁止用于任何违法违规用途。

上周帮一个做本地生活内容的朋友把这套系统跑起来了。他手上这套是别人二开了一半的框架——前端 Vue,后端 ThinkPHP,拿到手后台菜单一大堆,点进去一半是空页面。我要做的就是先把环境跑通,再把能用的模块摸清楚,顺便给他写了一份二开清单。整个过程踩了不少坑,记下来给后面要动手的人省点时间。

这套系统的整体结构

后端是 ThinkPHP 的多应用模式,接口分成了 app/api、app/admin 两个模块,中间件里挂了 token 校验和跨域处理。前端是 Vue3 + Vite 打包,路由做了动态权限,登录后从后台拉菜单树再 addRoute。数据库 MySQL 8.0,Redis 用来放推荐池的临时权重和登录态。

数据库表结构还算规范,内容表、用户表、关注关系表、互动表分开,但有几张表字段冗余得厉害,比如内容表里直接塞了个 tags 字符串,后面要做标签检索得拆表。这个我没急着改,先在业务层做了兼容。

功能实测:哪些能跑,哪些只是壳

内容流与推荐位

首页信息流走的是“时间 + 热度”混合排序,热度权重配在后台一个 JSON 配置里,能改。实际测试下来排序逻辑是真实存在的,不是写死的假数据,这点比很多半成品强。不过协同过滤那部分只有函数定义没有调用,想要真正的个性化推荐得自己接。

多语言与前端体验

前端 i18n 目录已经建好,zh-CN 和 en 两套语言包,切换后按钮文案能跟着变,但后台录入的内容没有多语言字段,这块得自己加一张翻译表。播放器用的是原生 video 标签,长列表滚动会卡,我换成虚拟列表之后流畅度明显上去。

后台控制与支付接口

后台用户管理、内容审核、举报处理这几个模块接口是真通的,能增删改查。支付这块只留了一个统一下单的入口和回调校验函数,支付渠道的配置项是空的,需要自己按官方文档对接。我按常规模板补了签名和异步通知验签,跑通了沙箱环境。

提醒一句:二开半成品最怕的就是“看起来有、实际没接口”。建议先跑一遍后台每个菜单,用浏览器 F12 看请求返回是不是 404 或者 mock 数据,十分钟能省三天返工。

部署要点和我踩过的坑

环境准备

PHP 版本建议 8.1,7.4 也能跑但有几个数组函数会报弃用警告。伪静态按 ThinkPHP 的标准规则配,前端打包产物丢到 public 下,接口跨域在 Nginx 里加头处理更稳。Redis 一定要装,登录态没它跑不起来。

二开注意事项

第一,改代码前先 git 拉个分支,这系统注释很少,改错了很难回溯。第二,接口返回格式不统一,有的包一层 data,有的直接返回数组,最好在中间件里统一封装。第三,视频上传走的是分片上传,切片大小写死在常量里,想调得改源码。第四,后台菜单是数据库驱动的,新增页面记得同步往菜单表插记录,不然前端路由挂不上。

还有个小细节:上传目录权限要单独给,宝塔默认的 www 用户权限资金流水模拟片合并会失败,日志里只报一个空错误,查了半天才发现是权限问题。

适合什么人拿来二开

适合手上有内容运营场景、需要一个能快速上线的内容分发底子的团队。前端结构清晰,做 UI 改版成本低;后端接口分层规整,加业务模块不难。不适合想要开箱即用的人——它就是个半成品,后台不少功能只是展示层,必须自己补完才能上线。预算有限又想省掉从零搭建的时间,这套底子算划算。

常见问题

问:后台很多菜单点进去是空白,是环境问题吗?
答:多数不是。那些模块只有前端页面没有对应接口,属于二开遗留的占位。判断方法很简单,F12 看请求返回,404 或者返回写死的假数据就是没实现。

问:想接入别的支付渠道,改动大不大?
答:不大。统一下单入口和回调函数是现成的,照着签名规则补一个渠道类,再把配置项填进后台就能用,注意异步通知要做验签和幂等处理。

问:推荐算法是现成的吗?
答:热度加权排序是现成的,个性化部分只有空函数。想上推荐得自己接,建议先从简单的标签匹配和热度衰减做起,别一上来就上模型。

问:前端怎么加多语言的内容字段?
答:内容表加一张关联翻译表,key 用内容 ID 加语言码,后台录入页做成 Tab 切换,前端请求时按当前 locale 取对应版本,改动量可控。

本文只记录技术部署过程,请遵守法律法规,禁止任何违法违规用途。

声明:本文仅供技术学习参考,不构成任何投资建议或运营指导;任何实际部署必须遵守当地法律法规,禁止用于任何违法违规用途。

#源码搭建 #Vue #ThinkPHP #推荐算法 #二开笔记