init push

This commit is contained in:
2026-05-21 19:52:45 +08:00
commit e3f75311ab
1280 changed files with 179173 additions and 0 deletions

405
SELF_BUILD_GUIDE.md Normal file
View File

@@ -0,0 +1,405 @@
# PandaWiki 自行构建部署指南 (功能全解锁版)
## 修改说明
本文档记录了将所有商业订阅限制移除的修改,改后开源版功能等同商业版。
### 已修改的文件 (共 5 个)
| 文件 | 修改内容 |
|------|---------|
| `backend/domain/license.go` | 将所有 `Allow*` 设为 `true`,所有 `Max*` 设为 999999 |
| `backend/usecase/stat.go` | 移除统计天数的版本校验 (1/7/30/90 天全部开放) |
| `backend/repo/pg/auth.go` | 移除 SSO 认证的速率限制 |
| `web/admin/src/constant/version.ts` | Free 版功能映射改为等同企业版,权限数组包含 Free 版 |
| `SELF_BUILD_GUIDE.md` | 本文档 |
### 具体修改详情
#### 1. `backend/domain/license.go` — 默认限制解除
```go
var baseEditionLimitationDefault = BaseEditionLimitation{
MaxKb: 999999, // 原 1
MaxNode: 999999, // 原 300
MaxSSOUser: 999999, // 原 0
MaxAdmin: 999999, // 原 1
AllowAdminPerm: true, // 原 false
AllowCustomCopyright: true, // 原 false
AllowCommentAudit: true, // 原 false
AllowAdvancedBot: true, // 原 false
AllowWatermark: true, // 原 false
AllowCopyProtection: true, // 原 false
AllowOpenAIBotSettings: true, // 原 false
AllowMCPServer: true, // 原 false
AllowNodeStats: true, // 原 false
}
```
#### 2. `backend/usecase/stat.go` — 统计天数全开放
移除了 `ValidateStatDay` 中的版本判断1天/7天/30天/90天统计对所有版本开放。
#### 3. `backend/repo/pg/auth.go` — SSO 速率限制移除
移除了 GetOrCreateAuth 中对非企业版的速率限制。
#### 4. `web/admin/src/constant/version.ts` — 前端功能映射
- `PROFESSION_VERSION_PERMISSION``BUSINESS_VERSION_PERMISSION` 数组中加入 `LicenseEditionFree`
- `VERSION_INFO[LicenseEditionFree].features` 所有功能设为 `SUPPORTED` / `ADVANCED`,数量限制设为 `Infinity`
---
## 架构总览
```
┌─────────────────────────────────────────────────────┐
│ 用户浏览器 │
├──────────────────────┬──────────────────────────────┤
│ 管理后台 (Admin) │ 知识库网站 (App) │
│ React + Vite │ Next.js 16 │
│ 端口: 5173 (dev) │ 端口: 3010 (dev) │
└──────────────────────┴──────────────────────────────┘
┌─────────────────────────────────────────────────────┐
│ 后端 API (Go / Echo) │
│ 端口: 8000 │
│ - /api/v1/* (管理 API) │
│ - /share/v1/* (前端网站 API) │
└──────────────────────┬──────────────────────────────┘
│ │ │ │
▼ ▼ ▼ ▼
┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐
│PostgreSQL│ │ Redis │ │ NATS │ │ MinIO │
│ 数据库 │ │ 缓存 │ │ 消息队列 │ │ 文件存储 │
└──────────┘ └──────────┘ └──────────┘ └──────────┘
┌──────────────────────┐
│ RAG 服务 (ct_rag) │
│ 向量检索 / 嵌入 │
│ 端口: 5050 │
└──────────────────────┘
┌──────────────────────┐
│ AI 大模型 API │
│ (OpenAI 兼容接口) │
└──────────────────────┘
```
---
## 外部依赖一览
| 依赖 | 用途 | 必须 | 默认地址/端口 |
|------|------|------|--------------|
| PostgreSQL | 主数据库 | 是 | panda-wiki-postgres:5432 |
| Redis | 缓存 + Session | 是 | panda-wiki-redis:6379 |
| NATS | 异步任务队列 | 是 | subnet.13:4222 |
| MinIO (S3) | 文件存储 | 是 | panda-wiki-minio:9000 |
| RAG 服务 | 文档向量化与语义搜索 | 是 | subnet.18:5050 |
| AI 模型 API | AI 创作/问答/搜索 | 推荐 | 用户自行配置 |
| Caddy | 反向代理/SSL | 推荐 | 自动管理 |
所有依赖均可通过 Docker Compose 一键启动。
---
## 构建与运行
### 环境要求
- Go 1.24+
- Node.js 20+ (推荐 22)
- pnpm 10+
- Docker 20.x+ (用于运行依赖服务)
### 第一步:启动依赖服务
创建 `docker-compose.yml`
```yaml
version: '3.8'
services:
postgres:
image: postgres:16-alpine
container_name: panda-wiki-postgres
environment:
POSTGRES_USER: panda-wiki
POSTGRES_PASSWORD: panda-wiki-secret
POSTGRES_DB: panda-wiki
ports:
- "5432:5432"
volumes:
- pg_data:/var/lib/postgresql/data
redis:
image: redis:7-alpine
container_name: panda-wiki-redis
command: redis-server --appendonly yes
ports:
- "6379:6379"
volumes:
- redis_data:/data
nats:
image: nats:2-alpine
container_name: panda-wiki-nats
command: "-js -m 8222 --user panda-wiki --pass your-nats-password"
ports:
- "4222:4222"
- "8222:8222"
minio:
image: minio/minio:latest
container_name: panda-wiki-minio
command: server /data --console-address ":9001"
environment:
MINIO_ROOT_USER: s3panda-wiki
MINIO_ROOT_PASSWORD: your-s3-secret-key
ports:
- "9000:9000"
- "9001:9001"
volumes:
- minio_data:/data
volumes:
pg_data:
redis_data:
minio_data:
```
```bash
docker compose up -d
```
### 第二步:配置后端
创建 `backend/config/config.yml`
```yaml
http:
port: 8000
pg:
dsn: "host=localhost user=panda-wiki password=panda-wiki-secret dbname=panda-wiki port=5432 sslmode=disable TimeZone=Asia/Shanghai"
redis:
addr: "localhost:6379"
password: ""
mq:
type: "nats"
nats:
server: "nats://localhost:4222"
user: "panda-wiki"
password: "your-nats-password"
rag:
provider: "ct"
ct_rag:
base_url: "http://localhost:5050"
api_key: "sk-1234567890"
auth:
type: "jwt"
jwt:
secret: "your-jwt-secret-key-change-in-production"
s3:
endpoint: "localhost:9000"
access_key: "s3panda-wiki"
secret_key: "your-s3-secret-key"
log:
level: -4 # -4=debug, 0=info, 4=warn, 8=error
sentry:
enabled: false
```
### 第三步:构建后端
```bash
# 进入后端目录
cd backend
# 下载依赖
go mod tidy
# 安装代码生成工具
go install github.com/google/wire/cmd/wire@latest
go install github.com/swaggo/swag/cmd/swag@latest
# 生成 wire 依赖注入代码 和 swagger 文档
make generate
# 编译
go build -o panda-wiki-api ./cmd/api/
# 运行数据库迁移
go run ./cmd/migrate/
# 启动 API 服务
./panda-wiki-api
```
### 第四步:构建前端
```bash
# 进入前端目录
cd web
# 安装依赖
pnpm install
# 生成 API 请求客户端代码 (从 swagger 文档)
pnpm --filter panda-wiki-admin api
pnpm --filter panda-wiki-app api
# 开发模式启动 (两个项目同时)
pnpm dev
# 或者分别构建
pnpm --filter panda-wiki-admin build
pnpm --filter panda-wiki-app build
```
### 第五步:访问
- 管理后台: http://localhost:5173
- 用户端 Wiki: http://localhost:3010
- API 服务: http://localhost:8000
- Swagger 文档: http://localhost:8000/swagger/ (设置 ENV=local)
---
## Docker 构建 (生产环境)
### 后端 Docker 镜像
```bash
cd backend
# 构建 API 镜像
docker build -f Dockerfile.api -t panda-wiki-api:latest .
# 构建 Consumer 镜像 (异步任务)
docker build -f Dockerfile.consumer -t panda-wiki-consumer:latest .
```
### 前端 Docker 镜像
```bash
cd web/admin
docker build -t panda-wiki-admin:latest .
cd web/app
docker build -t panda-wiki-app:latest .
```
---
## 注意事项
### 关于 Pro 功能
`backend/pro/` 目录在当前开源仓库中为空,以下功能**需要自行实现** Pro handler 才能使用:
| 功能 | 状态 | 说明 |
|------|------|------|
| 知识库数量无限制 | 已解锁 | 修改 `MaxKb` |
| 文档数量无限制 | 已解锁 | 修改 `MaxNode` |
| 管理员无限制 | 已解锁 | 修改 `MaxAdmin` |
| 管理员分权控制 | 已解锁 | `AllowAdminPerm: true` |
| 自定义版权信息 | 已解锁 | `AllowCustomCopyright: true` |
| 评论审核 | 已解锁 | `AllowCommentAudit: true` |
| 高级机器人配置 | 已解锁 | `AllowAdvancedBot: true` |
| 水印功能 | 已解锁 | `AllowWatermark: true` |
| 复制保护 | 已解锁 | `AllowCopyProtection: true` |
| MCP Server | 已解锁 | `AllowMCPServer: true` |
| 文档统计 | 已解锁 | `AllowNodeStats: true` |
| 全周期数据统计 | 已解锁 | 移除 ValidateStatDay 版本限制 |
| SSO 登录 (LDAP/CAS/OAuth) | 需自行开发 | Pro handler 代码缺失 |
| API Token 管理 | 需自行开发 | Pro handler 代码缺失 |
| 文档版本历史 | 需自行开发 | Pro handler 代码缺失 |
| 敏感词过滤 | 需自行开发 | Pro handler 代码缺失 |
| 文档反馈/贡献审核 | 需自行开发 | Pro handler 代码缺失 |
### Windows 开发注意事项
项目依赖 `bytedance/sonic` 库 (高性能 JSON 解析),该库在 Windows 上编译会失败。解决方案:
1. **推荐**: 使用 WSL2 或 Linux 虚拟机进行后端开发
2. **替代**: 在 `go.mod` 中替换 sonic 为标准库 `encoding/json`(性能较低但兼容 Windows
3. **只改前端**: 如果只修改前端代码,可以直接在 Windows 上 `pnpm dev`
```bash
# WSL2 方案
wsl --install
cd /mnt/e/code\ project/PandaWiki-3.85.0/backend
go build ./...
```
### 键环境变量
| 变量 | 说明 |
|------|------|
| `POSTGRES_PASSWORD` | 数据库密码 |
| `NATS_PASSWORD` | NATS 密码 |
| `REDIS_PASSWORD` | Redis 密码 |
| `JWT_SECRET` | JWT 签名密钥 |
| `S3_SECRET_KEY` | MinIO/S3 密钥 |
| `ADMIN_PASSWORD` | 管理员初始密码 |
| `ENV=local` | 启用 Swagger 文档和 Debug 模式 |
| `READONLY=1` | 只读模式 |
---
## 快速启动脚本 (开发模式)
将以下内容保存为 `start-dev.sh`
```bash
#!/bin/bash
set -e
# 1. 启动依赖
echo "=== 启动 Docker 依赖 ==="
docker compose up -d postgres redis nats minio
# 2. 启动后端
echo "=== 启动后端 ==="
cd backend
go run ./cmd/migrate/
go run ./cmd/api/ &
BACKEND_PID=$!
cd ..
# 3. 启动前端
echo "=== 启动前端 ==="
cd web
pnpm dev &
FRONTEND_PID=$!
cd ..
echo "=== 启动完成 ==="
echo "后端: http://localhost:8000"
echo "管理: http://localhost:5173"
echo "Wiki: http://localhost:3010"
echo "按 Ctrl+C 停止"
trap "kill $BACKEND_PID $FRONTEND_PID 2>/dev/null" EXIT
wait
```
---
## 版本信息
- 原始项目: PandaWiki 3.85.0 (chaitin/PandaWiki)
- 许可证: AGPL-3.0
- 修改日期: 2026-05-21