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

11 KiB
Raw Blame History

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 私有仓库

# 注册 Docker Hub 账号: https://hub.docker.com/
# 创建私有仓库
# 设置环境变量
export DOCKER_REGISTRY=yourusername

方案B: 阿里云容器镜像服务

# 登录: https://cr.console.aliyun.com/
# 创建命名空间和仓库
# 设置环境变量
export DOCKER_REGISTRY=registry.cn-hangzhou.aliyuncs.com/your_namespace

方案C: 自建 Harbor

# 部署 Harbor: https://goharbor.io/
# 创建项目
# 设置环境变量
export DOCKER_REGISTRY=your-harbor.com/project

2. 修改构建脚本

编辑 build-and-push.sh:

# 修改默认仓库地址
DOCKER_REGISTRY="${DOCKER_REGISTRY:-your-registry.com}"

🚀 打包步骤

第一步: 构建并推送镜像

# 给脚本添加执行权限(Linux/Mac)
chmod +x build-and-push.sh

# Windows 用户在 Git Bash 中执行
# 或使用 WSL

# 执行构建
./build-and-push.sh

脚本会提示:

  1. 输入版本号(如: 1.0.0)
  2. 确认构建信息
  3. 自动构建、测试、推送镜像
  4. 询问是否生成发布包

第二步: 验证镜像

# 检查镜像是否存在
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: 镜像仓库权限控制

# 为客户创建只读账号
# Docker Hub: 添加 Collaborator
# Harbor: 创建 Robot Account
# 阿里云: 创建子账号

# 客户使用时需要登录
docker login your-registry.com
# 输入提供的账号密码

方式2: License Key 验证

在应用代码中添加 License 验证:

// 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: 在线下载

# 客户执行
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盘或光盘,适用于无法联网的环境

客户安装步骤

# 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

🔄 版本更新流程

发布新版本

# 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 提供给客户

客户升级步骤

# 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 验证正常(如有)
  • 准备好技术支持

🧪 测试和验证

本地测试

# 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

性能测试

# 并发测试
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. 在测试环境验证

祝打包顺利!🚀