首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >手把手搭建知识付费源码_[开源版]支持私有化部署_前后端分离

手把手搭建知识付费源码_[开源版]支持私有化部署_前后端分离

原创
作者头像
用户12743483
发布2026-09-07 08:29:40
发布2026-09-07 08:29:40
580
举报

这篇文章是一份可直接拿来上手的实战指南。我假设你已经有一台服务器,但还没有配好环境——没关系,我们从零开始。

源码:zx.xcxyms.top

目标是:在一台干净的 Linux 服务器上,把一套开源版知识付费系统完整跑起来,包括后端 API、管理后台、用户端 H5,全程走“前后端分离 + 私有化部署”路线。整个流程大约需要 2~3 小时,跟着命令走就能完成。


一、系统架构与技术栈说明

本文以一套典型的 ThinkPHP 6 PHP后端 + Vue 3 前端 开源知识付费系统为例。它采用前后端分离架构:

  • 后端:ThinkPHP 6 提供 JSON API,管理后台接口与用户端接口共用同一个应用,通过路由前缀区分。
  • 前端
    • 管理后台:Vue 3 + Element Plus 单页应用,构建后为纯静态文件。
    • 用户端:Vue 3 + Vant(移动端)构建 H5,亦可基于 Uniapp 扩展编译为小程序 / App。
  • 数据层:MySQL 8.0 存储业务数据,Redis 6.x 缓存会话与热数据。
  • 对象存储:课程视频、图片、文档使用腾讯云 COS / 阿里云 OSS 存放,私有化部署时也可使用自建 MinIO。

这一组合的优势在于:后端 PHP 生态成熟,部署门槛低;前端工程化完善,前后端可以独立开发、独立部署,也便于后续扩展小程序端。


二、环境准备:一台干净 CentOS 7.9/Ubuntu 22.04 服务器

2.1 服务器配置建议

项目

最低要求

推荐配置

CPU

2核

4核

内存

2GB

4GB(含 Redis + MySQL)

系统盘

40GB

60GB SSD

带宽

3Mbps

5Mbps 以上(如有视频服务需更大)

操作系统

CentOS 7.9 / Ubuntu 22.04

同上

私有化部署意味着数据掌握在自己手里,但也要注意做好备份策略。

2.2 安装必要软件

以下是 Ubuntu 22.04 环境下的命令(CentOS 命令类似,只是包管理器改为 yum)。

代码语言:bash
复制
# 1. 更新系统
sudo apt update && sudo apt upgrade -y

# 2. 安装 PHP 及扩展
sudo apt install -y software-properties-common
sudo add-apt-repository ppa:ondrej/php
sudo apt update
sudo apt install -y php8.1 php8.1-fpm php8.1-mysql php8.1-redis \
    php8.1-gd php8.1-mbstring php8.1-bcmath php8.1-xml php8.1-curl \
    php8.1-zip php8.1-fileinfo

# 3. 安装 MySQL 8.0
sudo apt install -y mysql-server

# 4. 安装 Redis
sudo apt install -y redis-server

# 5. 安装 Nginx
sudo apt install -y nginx

# 6. 安装 Composer(PHP 包管理工具)
curl -sS https://getcomposer.org/installer | php
sudo mv composer.phar /usr/local/bin/composer

# 7. 安装 Node.js 16+(前端构建需要)
curl -fsSL https://deb.nodesource.com/setup_16.x | sudo -E bash -
sudo apt install -y nodejs

# 8. 安装 Git
sudo apt install -y git

启动服务并检查状态:

代码语言:bash
复制
sudo systemctl start mysql redis-server php8.1-fpm nginx
sudo systemctl status mysql redis php8.1-fpm nginx

设置 MySQL 根密码(按提示操作):

代码语言:bash
复制
sudo mysql_secure_installation

三、获取开源版源码

开源版源码通常托管在 Gitee / GitHub,以 知识付费系统 为关键词搜索即可找到多个项目。这里我们以通用项目名 edu-system 为例演示。

代码语言:bash
复制
# 1. 克隆源码(假设仓库地址)
git clone https://gitee.com/your-name/edu-system.git
cd edu-system

项目目录结构大致如下:

注意:不同开源项目目录结构略有差异,但整体思路一致。请先阅读项目 README,确认技术栈和安装步骤。


四、后端部署:ThinkPHP 6 API

后端是整个系统的核心,它负责课程管理、订单、支付、会员、分销等全部业务逻辑。

4.1 导入数据库

进入 database 目录,用 MySQL 创建数据库并导入 SQL 文件:

代码语言:bash
复制
mysql -u root -p

在 MySQL 命令行中执行:

代码语言:sql
复制
CREATE DATABASE `edu_system` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
exit;

然后导入:

代码语言:bash
复制
cd database
mysql -u root -p edu_system < edu_system.sql

4.2 配置后端环境变量

进入后端目录,复制 .env.example.env

代码语言:bash
复制
cd ../backend
cp .env.example .env

编辑 .env 文件,配置数据库、Redis、JWT 密钥等关键参数:

代码语言:ini
复制
[APP]
DEBUG = false          # 生产环境务必关闭
DEFAULT_TIMEZONE = Asia/Shanghai

[DATABASE]
TYPE = mysql
HOSTNAME = 127.0.0.1
DATABASE = edu_system
USERNAME = root
PASSWORD = your_mysql_password
HOSTPORT = 3306
CHARSET = utf8mb4
PREFIX = edu_

[REDIS]
HOST = 127.0.0.1
PORT = 6379
PASSWORD =             # 如有密码则填写

[JWT]
SECRET = your_random_string_32_chars+
EXPIRE = 7200          # Token 有效期(秒)

务必修改 JWT SECRET 为一个足够长的随机字符串,否则存在 Token 伪造风险。

4.3 安装 PHP 依赖并初始化

代码语言:bash
复制
composer install --no-dev --optimize-autoloader

生成应用密钥(部分系统需要在数据库写入配置):

代码语言:bash
复制
php think key:generate

创建上传目录软链接(如代码中有 storage 目录):

代码语言:bash
复制
php think storage:link

运行数据库迁移或初始化命令(不同项目命令不同,常见有):

代码语言:bash
复制
php think migrate:run
# 或
php think seed:run

同时初始化 Redis 缓存:

代码语言:bash
复制
php think cache:clear

4.4 配置 Nginx 虚拟主机

编辑 Nginx 配置文件 /etc/nginx/conf.d/edu.conf

代码语言:nginx
复制
server {
    listen 80;
    server_name api.yourdomain.com;

    root /var/www/edu-system/backend/public;
    index index.php index.html;

    # 伪静态:去除 index.php
    location / {
        try_files $uri $uri/ /index.php?s=$uri&$args;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php8.1-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }

    # 禁止访问隐藏文件
    location ~ /\. {
        deny all;
    }
}

检查配置并重载:

代码语言:bash
复制
sudo nginx -t
sudo systemctl reload nginx

此时访问 http://api.yourdomain.com 如果能看到欢迎页或 JSON 响应,说明后端已跑通。


五、前端部署:Vue 3 管理后台 & 用户端 H5

前后端分离,意味着前端是一个独立的静态应用,通过 AJAX 请求后端 API。

5.1 管理后台构建

代码语言:bash
复制
cd ../frontend/admin
npm install

修改 API 环境变量,创建 .env.production 文件:

代码语言:bash
复制
# .env.production
VITE_API_BASE_URL=http://api.yourdomain.com/api/v1

构建生产环境代码:

代码语言:bash
复制
npm run build

构建完成后,产物在 dist/ 目录。将该目录复制到服务器 /var/www/admin/

代码语言:bash
复制
sudo cp -r dist /var/www/admin

配置管理后台 Nginx:

代码语言:nginx
复制
server {
    listen 80;
    server_name admin.yourdomain.com;

    root /var/www/admin;
    index index.html;

    # 单页应用 history 路由回退
    location / {
        try_files $uri $uri/ /index.html;
    }
}

5.2 用户端 H5 构建

代码语言:bash
复制
cd ../h5
npm install

同样修改 API 地址(与后台不同的 .env.production):

代码语言:bash
复制
VITE_API_BASE_URL=http://api.yourdomain.com/api/v1

构建:

代码语言:bash
复制
npm run build

部署到 /var/www/h5/ 并配置类似的上方 Nginx 配置(server_name 使用 h5.yourdomain.com)。

5.3 解决跨域问题

前后端分离下,前端域名(如 h5.yourdomain.com)访问后端域名(api.yourdomain.com)属于跨域。有两种解决方案:

方案一:后端设置 CORS 头(推荐开发阶段)

在 ThinkPHP 后端定义一个全局中间件,允许前端的域名访问:

代码语言:php
复制
// app/middleware/Cors.php
namespace app\middleware;
use think\Response;

class Cors {
    public function handle($request, \Closure $next) {
        $response = $next($request);
        $response->header([
            'Access-Control-Allow-Origin'      => '*',
            'Access-Control-Allow-Methods'     => 'GET, POST, PUT, DELETE, OPTIONS',
            'Access-Control-Allow-Headers'     => 'Authorization, Content-Type',
            'Access-Control-Max-Age'           => '86400',
        ]);
        return $response;
    }
}

并在 app/middleware.php 中注册该中间件。

方案二:Nginx 反向代理(生产环境更安全)

在 Nginx 前端配置中,将 /api 路径反向代理到后端:

代码语言:nginx
复制
location /api/ {
    proxy_pass http://api.yourdomain.com;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
}

同时,前端构建时 VITE_API_BASE_URL 设为 /api/v1,这样可以实现同源,避免跨域携带 Cookie 的麻烦。


六、私有化部署的关键配置

私有化部署意味着所有数据和应用都在你自己的服务器上,因此需要重点关注以下内容。

6.1 配置对象存储(OSS/COS/MinIO)

知识付费系统必然涉及课程视频、图片、文档。生产环境中不可能将文件与应用服务器放在同一台机器,必须接入对象存储。

以腾讯云 COS 为例,在 .env 中配置:

代码语言:ini
复制
[OSS]
DRIVER = cos
ACCESS_KEY = your_secret_id
SECRET_KEY = your_secret_key
BUCKET = edu-system-1250000000
REGION = ap-guangzhou
DOMAIN = https://cdn.yourdomain.com

如果完全私有化,可以使用 MinIO 自建对象存储:

代码语言:bash
复制
# Docker 快速启动 MinIO
docker run -d --name minio \
  -p 9000:9000 -p 9001:9001 \
  -e MINIO_ROOT_USER=admin -e MINIO_ROOT_PASSWORD=yourpassword \
  -v /data/minio:/data \
  minio/minio server /data

代码中对接 S3 API 即可。

6.2 配置定时任务(队列 & 计划任务)

支付回调、佣金结算、过期订单关闭等操作一般通过队列异步处理。开源版常用 ThinkPHP 的 think\queuecrontab 定时脚本。

.env 中配置队列驱动:

代码语言:ini
复制
QUEUE_DRIVER = redis

启动队列监听进程(需要在后台常驻):

代码语言:bash
复制
php think queue:listen --queue=default &

编写 crontab,每分钟执行一次任务分发:

代码语言:bash
复制
* * * * * cd /var/www/edu-system/backend && php think schedule:run >> /dev/null 2>&1

6.3 配置 HTTPS

私有化部署必须启用 HTTPS 保护用户数据。推荐使用 Let's Encrypt 免费证书:

代码语言:bash
复制
sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d api.yourdomain.com -d admin.yourdomain.com -d h5.yourdomain.com

Certbot 会自动修改 Nginx 配置并续期证书。

6.4 数据库与 Redis 安全加固

  • 修改 MySQL 默认端口并限制远程访问。
  • Redis 必须设置密码,并绑定 127.0.0.1
  • 定期备份数据库:
代码语言:bash
复制
mysqldump -u root -p edu_system > backup_$(date +%Y%m%d).sql

可将备份脚本加入 crontab 并同步到异地存储。

6.5 环境变量与敏感信息保护

  • 不要将 .env 文件提交到 Git 仓库。
  • 设置 .env 文件权限为 600
  • 禁止公网访问 runtime/ 目录。

七、前后端联调与功能验证

7.1 登录管理后台

访问 http://admin.yourdomain.com,输入默认管理员账号密码(通常在 README 中说明,如 admin / 123456)。若提示登录成功,说明前后端链路通畅。

7.2 测试关键业务流程

  1. 课程创建:在管理后台新增分类、课程、章节,上传测试视频或图片。
  2. 用户端购买:访问 H5 端,注册一个学员账号,尝试购买课程(可使用测试支付配置)。
  3. 支付回调:在测试环境下,将支付回调 URL 配置为 http://api.yourdomain.com/api/v1/pay/notify,用支付平台沙箱工具模拟回调,观察订单状态是否更新。
  4. 学习进度:在 H5 播放课程视频,看进度是否能保存。

7.3 常见问题排查

现象

可能原因

排查方法

后端 404

伪静态配置不正确

检查 Nginx try_files 规则

前端请求失败

跨域未配置

查看浏览器控制台 CORS 报错

上传文件失败

OSS 密钥或区域配置错误

查看后端日志 runtime/log/

Token 无效

JWT SECRET 不一致

检查 .env 中的 SECRET 是否与之前一致

Redis 连接失败

密码或端口错误

使用 redis-cli -a 密码 ping 测试


八、从开源版到线上运营的进阶操作

8.1 定制开发

开源版源码在手,你可以按需修改:

  • 修改前后端代码后重新构建。
  • 在现有 API 基础上新增模块,注意遵守开源协议。
  • 如果不需要某些功能,可以在后台菜单和权限中隐藏。

8.2 性能优化

私有化部署的硬件资源有限,更要注意优化:

  • 开启 PHP OPcache 并启用 php_admin_value opcache.enable 1
  • 使用 Redis 做数据缓存(课程列表、热榜等)。
  • 将 Nginx 静态资源缓存时间提高到 30 天。
  • 对 MySQL 慢查询进行优化,添加必要索引。

8.3 数据备份与容灾

建议每日增量备份、每周全量备份。可编写脚本将 MySQL 备份 + 上传文件压缩后同步到另一台机器或网盘,确保因服务器故障可快速恢复。


这篇手把手教程帮你完成了从一台裸机到一整套前后端分离知识付费系统的搭建:

  1. 环境准备(PHP 8.1 + MySQL 8.0 + Redis + Nginx + Node)
  2. 拉取开源版源码并导入数据库
  3. 部署 ThinkPHP 后端并配置 Nginx 伪静态
  4. 构建 Vue 3 管理后台与用户端 H5
  5. 解决跨域、配置对象存储、定时任务、HTTPS 等私有化必需环节
  6. 联调验证与常见问题排查

整套流程走通之后,你就拥有了一个 100% 数据自主可控 的知识付费平台。后续可以在这个基础上增加自有品牌、定制功能、接入自己的支付商户号,逐步把它打磨成适合业务的产品。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

目录
  • 一、系统架构与技术栈说明
  • 二、环境准备:一台干净 CentOS 7.9/Ubuntu 22.04 服务器
    • 2.1 服务器配置建议
    • 2.2 安装必要软件
  • 三、获取开源版源码
  • 四、后端部署:ThinkPHP 6 API
    • 4.1 导入数据库
    • 4.2 配置后端环境变量
    • 4.3 安装 PHP 依赖并初始化
    • 4.4 配置 Nginx 虚拟主机
  • 五、前端部署:Vue 3 管理后台 & 用户端 H5
    • 5.1 管理后台构建
    • 5.2 用户端 H5 构建
    • 5.3 解决跨域问题
  • 六、私有化部署的关键配置
    • 6.1 配置对象存储(OSS/COS/MinIO)
    • 6.2 配置定时任务(队列 & 计划任务)
    • 6.3 配置 HTTPS
    • 6.4 数据库与 Redis 安全加固
    • 6.5 环境变量与敏感信息保护
  • 七、前后端联调与功能验证
    • 7.1 登录管理后台
    • 7.2 测试关键业务流程
    • 7.3 常见问题排查
  • 八、从开源版到线上运营的进阶操作
    • 8.1 定制开发
    • 8.2 性能优化
    • 8.3 数据备份与容灾
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档