flnxi-Wu/docs/guides/README_PACKAGE.md
WuYongJie d1c6efc79d
Some checks failed
CI Check / check (push) Has been cancelled
feat: NAS 部署与 Harbor 推送流程
2025-12-03 14:39:06 +08:00

455 lines
11 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# FLNXI素材库 - 开发者打包指南
## 📦 打包流程总览
本文档说明如何将项目打包成可销售的私有镜像产品。
## 🎯 打包方案架构
### 完整架构图
```
┌─────────────────────────────────────────────┐
│ 开发环境 │
│ ┌────────────────────────────────┐ │
│ │ 源代码 + Dockerfile │ │
│ └────────────┬───────────────────┘ │
│ │ build & push │
│ ↓ │
│ ┌────────────────────────────────┐ │
│ │ 私有Docker镜像仓库 │ │
│ │ (Harbor/阿里云/Docker Hub) │ │
│ └────────────┬───────────────────┘ │
└───────────────┼──────────────────────────────┘
│
│ 提供给客户
↓
┌─────────────────────────────────────────────┐
│ 客户环境 │
│ ┌────────────────────────────────┐ │
│ │ 发布包 (release-vX.X.X) │ │
│ │ - docker-compose.yml │ │
│ │ - .env │ │
│ │ - install.sh │ │
│ └────────────┬───────────────────┘ │
│ │ ./install.sh │
│ ↓ │
│ ┌────────────────────────────────┐ │
│ │ 完整系统运行 │ │
│ │ - 应用 (私有镜像) │ │
│ │ - PostgreSQL │ │
│ │ - MinIO │ │
│ └────────────────────────────────┘ │
└─────────────────────────────────────────────┘
```
## 📋 准备工作
### 1. 配置私有镜像仓库
选择以下任一方案:
#### 方案A: Docker Hub 私有仓库
```bash
# 注册 Docker Hub 账号: https://hub.docker.com/
# 创建私有仓库
# 设置环境变量
export DOCKER_REGISTRY=yourusername
```
#### 方案B: 阿里云容器镜像服务
```bash
# 登录: https://cr.console.aliyun.com/
# 创建命名空间和仓库
# 设置环境变量
export DOCKER_REGISTRY=registry.cn-hangzhou.aliyuncs.com/your_namespace
```
#### 方案C: 自建 Harbor
```bash
# 部署 Harbor: https://goharbor.io/
# 创建项目
# 设置环境变量
export DOCKER_REGISTRY=your-harbor.com/project
```
### 2. 修改构建脚本
编辑 `build-and-push.sh`:
```bash
# 修改默认仓库地址
DOCKER_REGISTRY="${DOCKER_REGISTRY:-your-registry.com}"
```
## 🚀 打包步骤
### 第一步: 构建并推送镜像
```bash
# 给脚本添加执行权限(Linux/Mac)
chmod +x build-and-push.sh
# Windows 用户在 Git Bash 中执行
# 或使用 WSL
# 执行构建
./build-and-push.sh
```
脚本会提示:
1. 输入版本号(如: 1.0.0)
2. 确认构建信息
3. 自动构建、测试、推送镜像
4. 询问是否生成发布包
### 第二步: 验证镜像
```bash
# 检查镜像是否存在
docker images | grep flnxi-material
# 测试镜像
docker run --rm your-registry.com/flnxi-material:1.0.0 node --version
```
### 第三步: 生成发布包
构建脚本会自动生成 `release-vX.X.X.tar.gz`,包含:
```
release-v1.0.0/
├── docker-compose.yml # 生产环境配置
├── .env # 环境变量模板
├── install.sh # 一键安装脚本
├── quick-start.sh # 快速启动
├── healthcheck.sh # 健康检查
├── uninstall.sh # 卸载脚本
├── README.md # 客户使用文档
├── IMAGE_INFO.txt # 镜像信息
└── VERSION.txt # 版本信息
```
## 📁 发布包文件说明
### docker-compose.yml
使用 `docker-compose.prod.yml` 作为模板,特点:
- 使用 `image:` 拉取私有镜像,而非 `build:`
- 包含 PostgreSQL 和 MinIO
- 支持环境变量配置
- 包含健康检查
### .env
环境配置文件,客户需要修改:
- `SERVER_IP`: 服务器IP地址(必须)
- `APP_PORT`: 应用端口(可选)
- `POSTGRES_PASSWORD`: 数据库密码(建议修改)
- `MINIO_ROOT_PASSWORD`: MinIO密码(建议修改)
### install.sh
一键安装脚本,功能:
- ✅ 检查 Docker 环境
- ✅ 自动检测服务器 IP
- ✅ 生成随机密码
- ✅ 创建配置文件
- ✅ 拉取镜像
- ✅ 启动服务
- ✅ 初始化数据库
- ✅ 配置 MinIO bucket
## 🔐 镜像访问控制
### 方式1: 镜像仓库权限控制
```bash
# 为客户创建只读账号
# Docker Hub: 添加 Collaborator
# Harbor: 创建 Robot Account
# 阿里云: 创建子账号
# 客户使用时需要登录
docker login your-registry.com
# 输入提供的账号密码
```
### 方式2: License Key 验证
在应用代码中添加 License 验证:
```typescript
// lib/license.ts
export async function verifyLicense() {
const licenseKey = process.env.LICENSE_KEY
if (!licenseKey) {
throw new Error('License key is required')
}
// 验证逻辑
// 1. 检查格式
// 2. 验证签名
// 3. 检查过期时间
// 4. 可选:联网验证
return true
}
// middleware.ts 或 app/layout.tsx
import { verifyLicense } from '@/lib/license'
if (!await verifyLicense()) {
throw new Error('Invalid license')
}
```
## 🎁 交付给客户
### 交付清单
1. **发布包**: `release-v1.0.0.tar.gz`
2. **镜像访问凭证**(如需要):
- 仓库地址
- 用户名
- 密码
3. **License Key**(如实施)
4. **安装文档**: 发布包内的 `README.md`
5. **技术支持方式**
### 交付方式
#### 方式A: 在线下载
```bash
# 客户执行
wget https://your-domain.com/releases/flnxi-material-v1.0.0.tar.gz
# 或
curl -O https://your-domain.com/releases/flnxi-material-v1.0.0.tar.gz
```
#### 方式B: 私有下载链接
使用云存储服务生成临时下载链接(24小时有效)
#### 方式C: 物理介质
刻录到U盘或光盘,适用于无法联网的环境
### 客户安装步骤
```bash
# 1. 解压
tar -xzf flnxi-material-v1.0.0.tar.gz
cd flnxi-material-v1.0.0
# 2. 配置
vim .env
# 修改 SERVER_IP
# 3. 安装
chmod +x *.sh
./install.sh
# 4. 访问
# http://SERVER_IP:4320
```
## 🔄 版本更新流程
### 发布新版本
```bash
# 1. 更新代码
git pull
git checkout main
# 2. 修改版本号
vim package.json # 更新 version
vim VERSION.txt # 添加更新日志
# 3. 构建新版本
./build-and-push.sh
# 输入新版本号,如: 1.1.0
# 4. 测试新版本
# 在测试环境验证
# 5. 发布
# 将 release-v1.1.0.tar.gz 提供给客户
```
### 客户升级步骤
```bash
# 1. 备份数据
docker compose exec postgres pg_dump -U postgres flnxi > backup.sql
tar -czf uploads_backup.tar.gz uploads/
# 2. 下载新版本配置
# 获取新的 docker-compose.yml(如有变化)
# 3. 停止服务
docker compose down
# 4. 更新镜像
# 方法1: 修改 .env 中的 IMAGE_TAG
vim .env # IMAGE_TAG=1.1.0
docker compose pull
# 方法2: 直接拉取
docker pull your-registry.com/flnxi-material:1.1.0
# 5. 启动服务
docker compose up -d
# 6. 验证
./test-deployment.sh
```
## 📊 打包检查清单
在发布前,确认以下事项:
- [ ] 代码已提交到主分支
- [ ] 版本号已更新(package.json, VERSION.txt)
- [ ] 镜像构建成功
- [ ] 镜像已推送到仓库
- [ ] 发布包已生成
- [ ] 在测试环境验证安装
- [ ] 所有脚本有执行权限
- [ ] 文档已更新
- [ ] LICENSE 验证正常(如有)
- [ ] 准备好技术支持
## 🧪 测试和验证
### 本地测试
```bash
# 1. 解压发布包
tar -xzf release-v1.0.0.tar.gz
cd release-v1.0.0
# 2. 配置环境
cp .env .env.test
vim .env.test
# 设置测试配置
# 3. 安装
./install.sh
# 4. 运行测试
./test-deployment.sh
# 5. 功能测试
# - 注册账号
# - 上传素材
# - 下载素材
# - 管理功能
# 6. 清理
./uninstall.sh
```
### 性能测试
```bash
# 并发测试
ab -n 1000 -c 10 http://localhost:4320/
# 大文件上传测试
# 通过界面上传 100MB+ 文件
# 资源监控
docker stats
```
## 📝 常见问题
### Q: 如何处理敏感信息?
A:
1. 不要在镜像中硬编码密码
2. 使用环境变量
3. 提供 .env.template 而非实际配置
4. 文档中说明需要修改的配置
### Q: 如何防止客户转售?
A:
1. 实施 License Key 验证
2. 绑定硬件信息(MAC地址)
3. 在用户协议中明确禁止
4. 联网验证(可选)
### Q: 如何支持离线安装?
A:
1. 将镜像导出: `docker save -o image.tar`
2. 在发布包中包含镜像文件
3. 修改 install.sh 从本地加载镜像
4. 缺点:包体积大
### Q: 如何提供试用版?
A:
1. 生成 30 天试用 License
2. 限制功能(如用户数)
3. 在应用中检查 License 过期时间
### Q: 客户无法访问镜像仓库怎么办?
A:
1. 检查仓库是否公开(或提供了凭证)
2. 检查网络连接
3. 提供国内镜像源
4. 提供离线安装包
## 🎯 最佳实践
1. **版本管理**
- 使用语义化版本号(Semantic Versioning)
- 保持向后兼容
- 提供升级文档
2. **文档完善**
- 详细的安装文档
- 清晰的故障排查指南
- 常见问题 FAQ
3. **自动化测试**
- 每次发布前运行测试脚本
- 验证所有功能
- 记录测试结果
4. **客户支持**
- 提供技术支持渠道
- 收集客户反馈
- 持续改进产品
5. **安全性**
- 定期更新依赖
- 修复安全漏洞
- 及时发布补丁
## 📞 需要帮助?
如在打包过程中遇到问题:
1. 检查 `build-and-push.sh` 的输出
2. 验证镜像仓库配置
3. 查看 Docker 构建日志
4. 在测试环境验证
---
**祝打包顺利!🚀**