
随着知识服务行业从单一内容分发升级到互动教学、直播课程、在线考试等综合业务形态,传统平台式产品难以满足企业级的 私有化、安全可控、可扩展、的需求。本文提供一套可完全落地的 SaaS 化课程/会员系统技术架构设计,并附上关键模块的 、部署方式 与 行业应用场景,帮助技术团队在云环境或企业内网快速构建完整系统。

本系统采用微服务 + 容器化 + 流媒体服务网关设计,支持公有云部署,也可完全落地在企业内网。
┌────────────────────────────┐
│ 前端层(H5 / 小程序 / Web)│
└──────────────┬───────────┘
│ HTTPS / WebSocket / WebRTC
┌──────────────▼────────────┐
│ API 网关 / 统一鉴权层 │
│(路由、限流、灰度、Token 校验) │
└──────────────┬────────────┘
│
┌─────────▼───────────┐
│ 微服务集群(可水平扩展) │
│ - 用户中心(Auth / SSO) │
│ - 课程与内容服务 │
│ - 上传/转码服务 │
│ - 流媒体服务(推流、播放、录制) │
│ - 支付/订单 │
│ - 消息 / 即时通讯 │
│ - 搜索 / 推荐 │
│ - 运营与数据分析 │
└─────────▲───────────┘
│
┌───────▼────────┐
│ 存储(对象/数据库/缓存) │
└──────────────────┘所有场景均支持 私有化部署、二开扩展 和 跨端覆盖。
const jwt = require("jsonwebtoken");
const SECRET = process.env.JWT_SECRET || "change_me";
function signToken(user) {
return jwt.sign({ uid: user.id, role: user.role }, SECRET, {
expiresIn: "2h",
});
}
function verify(req, res, next) {
const token = req.headers.authorization?.replace("Bearer ", "");
if (!token) return res.status(401).json({ error: "no token" });
try {
req.user = jwt.verify(token, SECRET);
next();
} catch {
res.status(401).json({ error: "invalid token" });
}
}
module.exports = { signToken, verify };def handle_upload(file, meta):
path = save_to_storage(file)
task = {
"type": "transcode",
"source": path,
"profiles": ["1080p", "720p", "480p"],
"cb": meta.get("cb_url")
}
queue.push("transcode", task)
return {"status": "ok", "file": path}const WebSocket = require("ws");
const wss = new WebSocket.Server({ port: 9000 });
const clients = new Map();
wss.on("connection", (ws) => {
ws.on("message", (msg) => {
const data = JSON.parse(msg);
if (data.type === "register") {
clients.set(data.uid, ws);
return;
}
const target = clients.get(data.to);
if (target) target.send(JSON.stringify(data));
});
});FROM node:18-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install --production
COPY . .
EXPOSE 3000
CMD ["node", "server.js"]apiVersion: apps/v1
kind: Deployment
metadata:
name: course-service
spec:
replicas: 3
selector:
matchLabels:
app: course-service
template:
metadata:
labels:
app: course-service
spec:
containers:
- name: course-service
image: registry.local/course-service:latest
ports:
- containerPort: 3000location /hls/ {
types {
video/mp2t ts;
application/vnd.apple.mpegurl m3u8;
}
root /var/media;
add_header Cache-Control no-cache;
}CREATE TABLE course (
id BIGINT PRIMARY KEY,
title VARCHAR(255),
author_id BIGINT,
category VARCHAR(100),
created_at TIMESTAMP
);
CREATE TABLE chapter (
id BIGINT PRIMARY KEY,
course_id BIGINT,
title VARCHAR(255),
url TEXT,
sort_index INT
);部署环境 | 说明 |
|---|---|
企业内网 K8s | 全服务可在内网运行,数据不出企业 |
混合云 | 媒体分发可用云端,其余在内网 |
单机版 | 机构体量较小可单机安装(Docker Compose) |
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。