flnxi-Wu/scripts/deploy/create-customer-package.ps1
WuYongJie f646b71813
Some checks failed
CI Check / check (push) Has been cancelled
chore: 初始化本地仓库并同步最近改动
2025-11-18 17:50:16 +08:00

312 lines
7.6 KiB
PowerShell
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.

# 创建客户部署包
# 用于分发给其他公司,实现一键部署
[CmdletBinding()]
param(
[string]$RegistryHost = "45.249.208.118:5000",
[string]$PackageName = "customer-deploy-package",
[string]$OutputDir = "."
)
$ErrorActionPreference = "Stop"
Write-Host "===> 创建客户部署包" -ForegroundColor Cyan
$packageDir = Join-Path $OutputDir $PackageName
$packageZip = "$PackageName.zip"
# 清理旧包
if (Test-Path $packageDir) {
Remove-Item -Path $packageDir -Recurse -Force
}
if (Test-Path $packageZip) {
Remove-Item -Path $packageZip -Force
}
# 创建目录
New-Item -ItemType Directory -Path $packageDir -Force | Out-Null
Write-Host "复制配置文件..." -ForegroundColor Gray
# 复制 docker-compose.prod.yml
if (Test-Path "docker-compose.prod.yml") {
Copy-Item "docker-compose.prod.yml" "$packageDir/" -Force
Write-Host "✓ docker-compose.prod.yml" -ForegroundColor Green
} else {
Write-Host "✗ 未找到 docker-compose.prod.yml" -ForegroundColor Red
exit 1
}
# 创建 .env.example
$envExample = @"
# ============================================
# 由壹点3D素材 - 环境变量配置
# ============================================
# Registry 配置(必须)
DOCKER_REGISTRY=$RegistryHost
IMAGE_TAG=latest
# 服务器配置(必须)
SERVER_IP=您的服务器IP地址
APP_PORT=4320
# 数据库配置(建议修改密码)
POSTGRES_USER=postgres
POSTGRES_PASSWORD=请修改为安全密码
POSTGRES_DB=youyidian3d
# MinIO 配置(建议修改密码)
MINIO_ROOT_USER=minioadmin
MINIO_ROOT_PASSWORD=请修改为安全密码
MINIO_API_PORT=9000
MINIO_CONSOLE_PORT=9001
S3_BUCKET=youyidian3d
# 认证配置(建议修改)
NEXTAUTH_SECRET=请生成随机密钥(openssl rand -base64 32)
NEXTAUTH_URL=http://`${SERVER_IP}:`${APP_PORT}
# 其他配置(可选)
NEXT_PUBLIC_S3_FILE_PATH=materials/
S3_FILE_PATH=materials/
"@
$envExample | Out-File "$packageDir/.env.example" -Encoding UTF8
Write-Host "✓ .env.example" -ForegroundColor Green
# 创建客户 README
$readme = @"
# 由壹点3D素材 - 快速部署指南
## 🚀 一键部署(3 步完成)
### 步骤 1:配置环境变量
\`\`\`bash
# 复制模板
cp .env.example .env
# 编辑配置(使用您喜欢的编辑器)
nano .env
# 或
vi .env
\`\`\`
**必须修改的配置**:
- \`DOCKER_REGISTRY\` - Registry 地址(已配置,无需修改)
- \`SERVER_IP\` - 您的服务器 IP 地址
- \`POSTGRES_PASSWORD\` - 数据库密码(建议修改)
- \`MINIO_ROOT_PASSWORD\` - 存储密码(建议修改)
- \`NEXTAUTH_SECRET\` - 认证密钥(建议生成新的)
**生成随机密钥**:
\`\`\`bash
openssl rand -base64 32
\`\`\`
### 步骤 2:配置 Docker(如果 Registry 使用 HTTP)
如果 Registry 使用 HTTP(非 HTTPS),需要配置 Docker 允许不安全的 Registry:
\`\`\`bash
# 创建或编辑 Docker 配置
cat > /etc/docker/daemon.json <<EOF
{
"insecure-registries": ["$RegistryHost"]
}
EOF
# 重启 Docker
systemctl restart docker
\`\`\`
**Windows 用户**:
1. 打开 Docker Desktop
2. 进入 Settings → Docker Engine
3. 添加配置:
\`\`\`json
{
"insecure-registries": ["$RegistryHost"]
}
\`\`\`
4. 点击 "Apply & Restart"
### 步骤 3:启动服务
\`\`\`bash
docker compose -f docker-compose.prod.yml up -d
\`\`\`
**完成!** 等待 1-2 分钟,访问 \`http://您的服务器IP:4320\`
## 📋 验证部署
### 检查服务状态
\`\`\`bash
docker compose -f docker-compose.prod.yml ps
\`\`\`
所有服务应该显示为 "Up" 状态。
### 查看日志
\`\`\`bash
# 查看所有服务日志
docker compose -f docker-compose.prod.yml logs -f
# 只查看应用日志
docker compose -f docker-compose.prod.yml logs -f app
\`\`\`
### 访问应用
打开浏览器访问:\`http://您的服务器IP:4320\`
## 🔧 常用命令
### 停止服务
\`\`\`bash
docker compose -f docker-compose.prod.yml down
\`\`\`
### 重启服务
\`\`\`bash
docker compose -f docker-compose.prod.yml restart
\`\`\`
### 更新镜像
\`\`\`bash
# 拉取最新镜像
docker compose -f docker-compose.prod.yml pull
# 重启服务
docker compose -f docker-compose.prod.yml up -d
\`\`\`
### 查看资源使用
\`\`\`bash
docker stats
\`\`\`
## 📞 技术支持
如有问题,请联系技术支持。
## 📝 系统要求
- **操作系统**:Linux(推荐 Ubuntu 20.04+)或 Windows(Docker Desktop)
- **Docker**:20.10+
- **Docker Compose**:2.0+
- **内存**:至少 2GB
- **磁盘**:至少 20GB
## 🔐 安全建议
1. **修改默认密码**:生产环境必须修改数据库和 MinIO 密码
2. **生成随机密钥**:使用 \`openssl rand -base64 32\` 生成 NEXTAUTH_SECRET
3. **配置防火墙**:只开放必要的端口(4320, 9000, 9001)
4. **定期备份**:定期备份数据库和上传的文件
"@
$readme | Out-File "$packageDir/README.md" -Encoding UTF8
Write-Host "✓ README.md" -ForegroundColor Green
# 创建快速安装脚本(Linux)
$installScript = @"
#!/bin/bash
# 由壹点3D素材 - 快速安装脚本
set -e
echo "===> 由壹点3D素材 - 快速安装"
echo ""
# 检查 Docker
if ! command -v docker &> /dev/null; then
echo "错误: 未安装 Docker"
echo "请先安装 Docker: https://docs.docker.com/get-docker/"
exit 1
fi
# 检查 Docker Compose
if ! command -v docker compose &> /dev/null; then
echo "错误: 未安装 Docker Compose"
echo "请先安装 Docker Compose: https://docs.docker.com/compose/install/"
exit 1
fi
# 检查配置文件
if [ ! -f ".env" ]; then
echo "创建 .env 文件..."
cp .env.example .env
echo "⚠ 请编辑 .env 文件,修改必要的配置"
echo " 必须修改: SERVER_IP, POSTGRES_PASSWORD, MINIO_ROOT_PASSWORD"
read -p "按 Enter 继续(已编辑 .env 文件)..."
fi
# 配置 Docker(如果需要)
if [ ! -f "/etc/docker/daemon.json" ] || ! grep -q "insecure-registries" /etc/docker/daemon.json; then
echo "配置 Docker 允许不安全的 Registry..."
sudo mkdir -p /etc/docker
if [ -f "/etc/docker/daemon.json" ]; then
sudo python3 -c "
import json
with open('/etc/docker/daemon.json', 'r') as f:
config = json.load(f)
if 'insecure-registries' not in config:
config['insecure-registries'] = []
if '$RegistryHost' not in config['insecure-registries']:
config['insecure-registries'].append('$RegistryHost')
with open('/etc/docker/daemon.json', 'w') as f:
json.dump(config, f, indent=2)
"
else
echo "{ \"insecure-registries\": [\"$RegistryHost\"] }" | sudo tee /etc/docker/daemon.json > /dev/null
fi
sudo systemctl restart docker
echo "✓ Docker 配置完成"
fi
# 启动服务
echo ""
echo "启动服务..."
docker compose -f docker-compose.prod.yml up -d
echo ""
echo "等待服务启动..."
sleep 10
# 检查状态
echo ""
echo "服务状态:"
docker compose -f docker-compose.prod.yml ps
echo ""
echo "✓ 安装完成!"
echo ""
echo "访问地址: http://\$(grep SERVER_IP .env | cut -d '=' -f2):4320"
echo ""
"@
$installScript | Out-File "$packageDir/install.sh" -Encoding UTF8 -NoNewline
# 设置执行权限(Linux 下)
Write-Host "✓ install.sh" -ForegroundColor Green
# 打包
Write-Host ""
Write-Host "打包部署包..." -ForegroundColor Gray
Compress-Archive -Path "$packageDir/*" -DestinationPath $packageZip -Force
Write-Host ""
Write-Host "✓ 客户部署包已创建" -ForegroundColor Green
Write-Host " 文件: $packageZip" -ForegroundColor Gray
Write-Host " 大小: $((Get-Item $packageZip).Length / 1KB) KB" -ForegroundColor Gray
Write-Host ""
Write-Host "部署包内容:" -ForegroundColor Cyan
Get-ChildItem $packageDir | ForEach-Object {
Write-Host " - $($_.Name)" -ForegroundColor Gray
}