8.9 KiB
8.9 KiB
FLNXI素材库 - 部署指南(开发者)
项目打包出售方案
本项目已配置为可打包成私有 Docker 镜像进行销售的完整方案,包含以下组件:
- ✅ 主应用: Next.js 应用(私有镜像)
- ✅ PostgreSQL: 数据库(公开镜像)
- ✅ MinIO: 对象存储(公开镜像)
- ✅ 自动配置: 一键安装脚本
架构说明
完整架构
┌─────────────────────────────────────────────┐
│ 客户服务器 (一键部署) │
├─────────────────────────────────────────────┤
│ │
│ ┌──────────────┐ ┌──────────────┐ │
│ │ 应用服务 │ │ PostgreSQL │ │
│ │ (私有镜像) │←→│ 数据库 │ │
│ └──────┬───────┘ └──────────────┘ │
│ │ │
│ ↓ │
│ ┌──────────────┐ │
│ │ MinIO │ │
│ │ 对象存储 │ │
│ └──────────────┘ │
│ │
└─────────────────────────────────────────────┘
核心优势
- 完全独立: 客户无需外部依赖,所有服务都在本地运行
- 一键部署: 自动配置数据库、MinIO、网络等
- 数据私有: 所有数据保存在客户服务器,安全可控
- 易于维护: 标准 Docker 部署,方便升级和维护
构建和发布流程
1. 准备私有镜像仓库
选择以下任一方式:
方案A: 使用 Docker Hub (私有仓库)
# 登录 Docker Hub
docker login
# 设置环境变量
export DOCKER_REGISTRY=yourusername
方案B: 使用阿里云容器镜像服务
# 登录阿里云
docker login --username=your_username registry.cn-hangzhou.aliyuncs.com
# 设置环境变量
export DOCKER_REGISTRY=registry.cn-hangzhou.aliyuncs.com/your_namespace
方案C: 自建 Harbor 私有仓库
# 登录 Harbor
docker login your-harbor.com
# 设置环境变量
export DOCKER_REGISTRY=your-harbor.com/project
2. 修改构建配置
编辑 build-and-push.sh,修改默认仓库地址:
DOCKER_REGISTRY="${DOCKER_REGISTRY:-your-registry.com}"
3. 构建并推送镜像
# 添加执行权限
chmod +x build-and-push.sh
# 执行构建
./build-and-push.sh
脚本会:
- 提示输入版本号(如 1.0.0)
- 构建 Docker 镜像
- 测试镜像是否正常
- 推送到私有仓库
- 生成客户发布包
4. 发布包内容
生成的发布包 release-vX.X.X.tar.gz 包含:
release-v1.0.0/
├── docker-compose.yml # Docker 编排文件
├── .env # 环境配置模板
├── install.sh # 一键安装脚本
├── quick-start.sh # 快速启动脚本
├── README.md # 客户使用文档
└── IMAGE_INFO.txt # 镜像信息
客户使用流程
1. 提供给客户
将以下内容提供给客户:
- 发布包:
release-vX.X.X.tar.gz - 镜像访问权限(如果使用私有仓库)
- 使用文档:发布包内的
README.md
2. 客户安装步骤
# 1. 解压
tar -xzf release-v1.0.0.tar.gz
cd release-v1.0.0
# 2. 配置环境(修改 .env 文件)
vim .env
# 3. 安装
chmod +x *.sh
./install.sh
3. 安装过程自动完成
- ✅ 检测 Docker 环境
- ✅ 自动检测服务器 IP
- ✅ 生成随机安全密码
- ✅ 拉取镜像(PostgreSQL, MinIO, 应用)
- ✅ 启动所有服务
- ✅ 初始化数据库
- ✅ 配置 MinIO bucket
- ✅ 显示访问信息
镜像更新流程
发布新版本
# 1. 更新代码
git pull
# 2. 修改版本号(建议在 package.json 中同步)
vim package.json
# 3. 构建新版本
./build-and-push.sh
# 输入新版本号,如: 1.1.0
# 4. 将新的发布包提供给客户
# 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 down
# 3. 拉取新镜像(编辑 .env 修改 IMAGE_TAG)
vim .env # 修改 IMAGE_TAG=1.1.0
docker compose pull
# 4. 启动服务
docker compose up -d
MinIO 配置说明
自动初始化
minio-init 服务会自动:
- 连接到 MinIO
- 创建指定的 bucket(默认: youyidian3d)
- 设置 bucket 为公开读取
- 完成后自动退出
访问配置
应用内部访问 MinIO:
S3_ENDPOINT=http://minio:9000
外部访问(用户浏览器):
S3_PUBLIC_DOMAIN=http://${SERVER_IP}:9000/${S3_BUCKET}
MinIO 控制台
客户可以通过 MinIO 控制台管理文件:
地址: http://SERVER_IP:9001
用户名: minioadmin
密码: (在 .env 中配置)
定价和授权策略建议
方案A: 按实例授权
- 一次性购买
- 绑定服务器 IP 或 MAC 地址
- 通过 License Key 激活
方案B: 订阅制
- 按年/月收费
- 定期验证 License
- 过期后停止服务
方案C: 版本授权
- 买断当前版本
- 升级新版本需额外付费
- 提供有限期的更新支持
实施 License 验证
可以在应用中添加 License 验证逻辑:
// lib/license.ts
export async function verifyLicense(licenseKey: string) {
// 1. 验证 License Key 格式
// 2. 联网验证(可选)
// 3. 检查过期时间
// 4. 验证服务器信息
return { valid: true, expiresAt: '2025-12-31' }
}
安全措施
1. 代码保护
- ✅ 使用 Docker 镜像(代码不可见)
- ✅ Next.js 生产构建(代码混淆)
- ⚠️ 建议:添加代码加密
2. 镜像保护
# 使用私有仓库
DOCKER_REGISTRY=your-private-registry.com
# 启用镜像签名(Docker Content Trust)
export DOCKER_CONTENT_TRUST=1
3. License 保护
在应用启动时验证 License:
// middleware.ts 或 app/layout.tsx
import { verifyLicense } from '@/lib/license'
// 启动时验证
if (!await verifyLicense(process.env.LICENSE_KEY)) {
throw new Error('Invalid license')
}
4. 数据库加密
# docker-compose.yml
postgres:
environment:
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
volumes:
- postgres_data:/var/lib/postgresql/data
# 启用数据加密
command: postgres -c ssl=on -c ssl_cert_file=/certs/cert.pem
技术支持方案
日志收集
# 收集所有日志
docker compose logs > logs.txt
# 收集系统信息
docker compose ps >> logs.txt
docker version >> logs.txt
远程支持
# 方案1: 通过 SSH 远程协助
ssh user@customer-server
# 方案2: 使用 Portainer(可选)
docker run -d -p 9000:9000 \
-v /var/run/docker.sock:/var/run/docker.sock \
portainer/portainer-ce
常见问题
Q: 如何限制客户的部署数量?
A: 可以通过以下方式:
- License Key 绑定 MAC 地址
- 在应用中实施激活验证
- 通过 API 统计和限制激活次数
Q: 如何防止客户转售?
A:
- License 绑定硬件信息
- 定期联网验证
- 在用户协议中明确禁止
Q: 客户如何迁移到新服务器?
A: 提供迁移服务:
- 备份数据
- 导出数据库和文件
- 在新服务器安装
- 恢复数据
- 重新激活 License(如果绑定硬件)
Q: 如何提供试用版?
A:
- 提供 30 天试用 License
- 限制功能(如用户数、存储空间)
- 试用期后要求输入正式 License
成本估算
开发成本
- 私有镜像仓库: $0-50/月(取决于方案)
- SSL 证书: $0(Let's Encrypt)或 $10-100/年
- 域名: $10-20/年(如果需要)
客户成本
- 服务器: 2GB 内存,10GB 磁盘,约 $5-20/月
- 备份存储: 额外空间需求
- 带宽: 根据用户量
总结
这套方案提供了:
✅ 完整的私有部署方案
- 包含数据库、对象存储、应用
- 一键安装,自动配置
- 所有数据客户私有
✅ 商业化友好
- Docker 镜像保护代码
- 易于添加 License 验证
- 支持版本管理和升级
✅ 易于销售和交付
- 标准化部署流程
- 完整的客户文档
- 简化技术支持
✅ 可持续发展
- 容易发布更新
- 支持多种授权模式
- 便于扩展功能
开始构建您的第一个发布版本:
./build-and-push.sh
祝生意兴隆!🚀