知识付费赛道这几年彻底火了。但很多内容创作者和教培机构都被卡在一个问题上:用第三方 SaaS 平台(小鹅通、海豚知道等),每年要交不菲的年费,还要被抽成 5%–30%;想自己搭,又不知道从哪下手。
好消息是,目前 GitHub/Gitee 上有不少基于 Uniapp 的知识付费开源源码,技术栈成熟、功能完整,完全可以私有化部署一套属于自己的网校系统。本文将以主流开源项目(匠言、万岳等)为参考原型,手把手带你完成从服务器环境到多端发布的完整搭建流程。
源码:zs.xcxyms.top
💡 读完本文你将掌握:Uniapp 知识付费系统的典型技术架构、CentOS 服务器环境配置、后端 PHP 项目上线、Uniapp 多端编译发布、微信小程序接入、音视频存储方案,以及商用授权的合规注意事项。
知识付费场景最大的痛点之一是多端覆盖:你的学员可能用微信小程序、可能用 H5 网页、可能用 App,甚至可能用抖音/支付宝小程序。如果每个端单独开发,成本直接翻 5 倍。

Uniapp 的核心价值就是"一套代码,多端编译":
主流的开源知识付费系统均采用 Uniapp 作为前端方案:
开源项目 | 前端 | 后端 | 核心特性 |
|---|---|---|---|
匠言知识付费开源版 | Uniapp | TP5 + MySQL + Redis + Workerman | 课程/直播/考试/会员/分销/多端 |
万岳在线教育开源版 | Uniapp + socket.io + WebRtc | PhalApi + TP5.1 (ThinkCMF) | 内置直播、聊天室、多端适配 |
追格小程序 | Uniapp | WordPress | 轻量级,适合博客/圈子延展 |
创创猫 (Java 版) | Uniapp | Spring Boot | Java 技术栈选型 |
📌 本文以 "TP5/TP6 + MySQL + Uniapp" 这一最主流的 PHP 技术栈为例展开,因为它占开源知识付费源码的 90% 以上,且二开资料最丰富。

一套完整的知识付费系统,通常包括三层架构:
┌─────────────────────────────────────────┐
│ 表现层:Uniapp 编译出的 小程序/H5/APP │
├─────────────────────────────────────────┤
│ 接口层:PHP (TP) 提供的 RESTful API │
│ - 课程/订单/支付/会员/分销 等业务接口 │
├─────────────────────────────────────────┤
│ 数据层:MySQL + Redis + OSS/COS 对象存储 │
└─────────────────────────────────────────┘核心功能模块(以匠言开源版为例):

项目 | 最低配置 | 生产推荐 |
|---|---|---|
CPU | 2 核 | 4 核及以上 |
内存 | 4 GB | 8 GB+ |
系统 | CentOS 7.9 / Ubuntu 20.04 | CentOS 7.9 / Rocky Linux 8 |
带宽 | 5 Mbps | 10 Mbps+(音视频场景建议分离存储) |
硬盘 | 40 GB SSD | 100 GB+ SSD |
数据来源:匠言官方推荐配置要求 2G 内存 40G 硬盘 5M 带宽起步,阿里云/腾讯云实战文章推荐 4 核 8G 起步。
手动编译 LNMP 环境太痛苦,宝塔能节省 80% 的时间:
# CentOS
yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh安装完成后登录宝塔面板,一键安装:
在宝塔 PHP 管理页面安装以下扩展:

fileinfo redis opcache bcmath openssl pcntl posix sockets⚠️ 缺失
fileinfo会导致音视频/图片上传失败;缺失redis会导致缓存和会话功能异常。这是新手最常见的两个坑。
firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --zone=public --add-port=443/tcp --permanent
firewall-cmd --zone=public --add-port=8282/tcp --permanent # Workerman(如有)
firewall-cmd --reload同时别忘了在云服务商的安全组中放行上述端口。
cd /www/wwwroot
git clone https://gitee.com/asliangzai/zsffzxkc.git kefu_pay
# 前端 Uniapp 代码另存
git clone https://gitee.com/teacher_of_speech/knowledge-payment-front-end.git frontend在宝塔中添加站点:
/www/wwwroot/kefu_pay/public(站点入口必须为 public 目录)
创建 MySQL 数据库(utf8mb4 字符集),然后导入官方提供的 SQL 文件:
mysql -u root -p your_db < /path/to/install.sql📌 匠言开源版的数据库文件需 Star 项目后关注公众号领取,这是开源项目的常见做法。
编辑 /config/database.php:
return [
'hostname' => '127.0.0.1',
'database' => 'your_db',
'username' => 'your_user',
'password' => 'your_password',
'charset' => 'utf8mb4',
];编辑 /config/cache.php,将默认 File 缓存改为 Redis:
'default' => 'redis',
'stores' => [
'redis' => [
'type' => 'redis',
'host' => '127.0.0.1',
'port' => 6379,
'password' => '',
],
];在浏览器访问 http://你的域名/install.php,按引导完成安装:
知识付费的核心是音视频,本地存储撑不住。匠言支持七牛云 OSS,其他系统多用阿里云 OSS 或腾讯云 COS。
以阿里云 VOD 为例:
/config/oauth.php 或相关配置文件
如果系统带直播或 IM 功能,需要启动 Workerman:
cd /www/wwwroot/kefu_pay/gateway
php start.php start -d配置 systemd 守护:
[Unit]
Description=Kefu Workerman
After=network.target
[Service]
Type=simple
User=www
Group=www
WorkingDirectory=/www/wwwroot/kefu_pay/gateway
ExecStart=/usr/bin/php start.php start -d
Restart=always
[Install]
WantedBy=multi-user.target用 HBuilderX 打开前端源码目录,主要修改两个文件:
manifest.json:
{
"name": "我的知识店铺",
"appid": "wx你的小程序AppID",
"mp-weixin": {
"appid": "wx你的小程序AppID",
"setting": {
"urlCheck": false
}
}
}config.js(或 .env):
export default {
BASE_URL: 'https://api.yourdomain.com', // 后端 API 域名
WS_URL: 'wss://api.yourdomain.com/ws', // WebSocket 地址
OSS_BUCKET: 'your-bucket',
// ... 其他配置
}HBuilderX 顶部菜单 → 发行:
目标平台 | 操作路径 | 产物 |
|---|---|---|
H5 | 发行 → 网站 PC/H5 | 静态文件,部署到 Nginx |
微信小程序 | 发行 → 小程序 → 微信小程序 | 上传代码包到微信后台 |
App (Android/iOS) | 发行 → 原生 App | 生成 APK/IPA 安装包 |
支付宝/抖音小程序 | 发行 → 小程序 → 对应平台 | 各平台代码包 |
💡 一次代码,五端同发。这就是 Uniapp 最大的生产力优势。

https://api.yourdomain.com
⚠️ 小程序视频无法播放的常见原因:视频域名未配置到合法域名列表,或 OSS/COS 未开启 Referer 防盗链白名单。
server {
listen 443 ssl;
server_name api.yourdomain.com;
ssl_certificate /ssl/yourdomain.pem;
ssl_certificate_key /ssl/yourdomain.key;
root /www/wwwroot/kefu_pay/public;
index index.php index.html;
# 伪静态(ThinkPHP)
location / {
if (!-e $request_filename) {
rewrite ^(.*)$ /index.php?s=/$1 last;
}
}
# PHP 处理
location ~ \.php$ {
fastcgi_pass unix:/tmp/php-cgi-74.sock;
fastcgi_index index.php;
include fastcgi.conf;
}
# 静态资源缓存
location ~* \.(jpg|jpeg|png|gif|ico|css|js|mp4)$ {
expires 7d;
}
}H5 编译后的静态文件单独部署:
server {
listen 443 ssl;
server_name h5.yourdomain.com;
root /www/wwwroot/frontend_h5;
index index.html;
location / {
try_files $uri $uri/ /index.html;
}
# API 反向代理(解决跨域)
location /api/ {
proxy_pass https://api.yourdomain.com/;
}
}进入后台「系统配置 → 支付设置」:
https://api.yourdomain.com/payment/notify/wechat
同理填写支付宝 APPID、应用私钥、支付宝公钥。
知识付费的核心变现引擎是分销裂变:
运营冷启动时常用策略:
原因:Nginx 伪静态未配置或站点入口目录不对
解决:确认站点根目录为 /public,并配置 ThinkPHP 伪静态规则
原因:缺少 fileinfo 扩展,或 PHP 上传大小限制
解决:
# 宝塔 PHP 设置中修改
upload_max_filesize = 100M
post_max_size = 100M并安装 fileinfo 扩展
原因:域名未备案或未配置 HTTPS
解决:微信小程序要求必须 HTTPS + 已备案域名,且需在公众平台配置 request 合法域名
原因:OSS/COS 域名未加入小程序合法域名,或未开启 CDN 加速
解决:在微信公众平台「开发设置」中加入音视频 CDN 域名;在 OSS 控制台配置 Referer 防盗链白名单
原因:库存检查非原子操作
解决:使用 Redis 原子操作 DECR,或在 MySQL 中用 UPDATE ... WHERE stock > 0
原因:缺少 pcntl、posix 扩展,或 event 扩展未装
解决:安装对应扩展后重启
lazy-load 属性,视频用 HLS 协议自适应码率
这是很多技术文章不会告诉你的部分,但你必须重视:
⚠️ 开源 ≠ 可商用。以匠言知识付费开源版为例,其许可证为 CC0,允许学习交流,但商用需购买商业授权。万岳开源版也明确说明"开源版不适合商用,商用请购买商业版"。
商用前必做的三件事:
合规清单:
拿到这套系统后,你可以基于 Uniapp + PHP 的架构做很多扩展:
tenant_id 隔离数据,做成平台模式对外招商
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。