同城社交内容分发系统搭建实录:推荐算法与多语言前端部署笔记

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

上周帮一个做本地生活内容的客户把这套系统从测试机搬到了正式服务器。名字叫交友同城,实际跑起来就是一套短视频加图文的内容聚合平台:用户发内容、后台审核、算法分发、同城圈子聚合。黑色主题的前端是二开过的,视觉比原版干净不少。下面把我从装环境到推荐跑通的全过程记一遍,照着做能省你两天。

一、先搞清楚系统形态,别急着装

拿到包第一件事不是上传,是先看目录。这套是前后端分离的:前端 Vue3 打包后的静态资源,后端 PHP 8.1 接口层,中间一层 Redis 做缓存和热度排行。内容侧支持短视频(FFmpeg 转码切 HLS)和图文流,两端共用一张内容表,靠 type 字段区分。

前端二开部分

黑色 UI 主要在 src/styles/theme-dark.scss 里,改一遍变量全局生效。多语言是 i18n 那套,语言包放 locales 目录,简体、繁体、英文三个 json。客户后来要加越南语,我把 zh-CN.json 复制一份改 key 值就完事,但日期格式化也得跟着改,不然列表页时间会穿。

后台控制面板

后台挺全:内容审核队列、用户管理、曝光权重、标签体系、灰度开关都有。曝光权重是我最看重的,每个内容池能单独配权重,新号进冷启动池,优质内容升热门池,这块后面推荐部分细说。

二、部署实操要点

环境依赖别踩版本坑

PHP 必须 8.1 以上,7.4 直接报类型错误。MySQL 用 5.7 或 8.0 都行,但 utf8mb4 一定要开,不然 emoji 昵称写不进去。Redis 6.x,FFmpeg 4.4,队列用 supervisor 托管。转码是异步的,队列一挂视频就永远显示处理中。

视频流转码链路

上传走分片,前端切 2MB 一片,服务端合并后丢进转码队列。FFmpeg 出 720p 和 480p 两档,切片 6 秒一个 ts,生成 m3u8。这步慢,我配了两台机器跑队列,一台专门转码,不然并发上传直接卡死。播放器用 hls.js,走 CDN 回源,防盗链用 token 鉴权比 referer 靠谱得多。

推荐算法怎么配

系统内置协同过滤加热度加权的混合模型,权重后台可调。我的配法:用户行为(完播、点赞、评论、转发)占六成,内容新鲜度两成,同城地理权重两成。冷启动内容先扔小流量池跑 200 次曝光,完播率过 35% 才放出去。这个阈值别拍脑袋,拿真实数据跑三天再定。

踩坑提醒:推荐权重改完必须清一次 Redis 里的 feed 缓存,不然要等半小时 TTL 才生效。我第一次调参数就是忘了这步,还以为是代码没生效,白折腾一小时。

支付与运营模块

支付接了微信、支付宝,海外留了 Stripe 的接口位,沙箱先跑通回调再换正式。运营侧有签到、积分、内容打赏这套,接口都是现成的,配置项在后台财务面板。注意回调地址必须 https,http 会被直接拒掉。

多语言和 SEO

多语言不只是换文字。内容分享页要做 hreflang,标题描述按语言包走,路由前缀 /en /zh 分开。我加了 sitemap 自动生成,按内容更新时间增量推,收录比手动提交快很多。

三、我遇到的三个坑

一是时区。服务器跑 UTC,PHP 配置没改,内容发布时间全差 8 小时,同城推荐直接乱套。php.ini 的 date.timezone 和 MySQL 的 time_zone 两个都得改。

二是队列堆积。转码任务没设超时,一个坏文件卡住整条队列。加了 –timeout=300 和失败重试三次,之后一直很稳。

三是权限。storage 目录权限不对,上传全返回 500,翻日志才看到写入失败。chown -R www:www 一遍解决。

四、这套系统适合谁

做本地生活内容、同城兴趣社区、垂直领域短视频的团队比较合适。功能全,前端二开成本低,推荐和审核都留了配置口子。不太适合只想做个简单信息流的,功能偏重,运维也上去了。小团队建议先单机跑,队列和数据库分开就够,别一上来就上集群。

常见问题

问:转码必须装 FFmpeg 吗,能不能用云存储处理?
答:可以,把转码队列那段改成调云厂商的媒体处理接口,代码里留了适配层。但自建便宜,量大的时候差距明显。

问:多语言加了新语言,后台菜单还是中文?
答:后台语言包是独立目录,跟前端 locales 不是一份,两个都要加。我第一次就漏了后台那份。

问:推荐参数改了多久生效?
答:清 feed 缓存后立刻生效,不清就等 TTL,默认 1800 秒,调试期可以在配置文件里改短。

问:支付回调一直验签失败怎么排查?
答:先看密钥是不是沙箱的,再看回调地址有没有带多余参数,最后核对签名串排序,八成是参数顺序问题。

本文只作技术部署交流,请遵守法律法规,禁止任何违法违规用途。

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

#内容分发 #推荐算法 #多语言前端 #源码部署 #社交系统