# 创建客户部署包 # 用于分发给其他公司,实现一键部署 [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 = @" # ============================================ # FLNXI素材库 - 环境变量配置 # ============================================ # Registry 配置(必须) DOCKER_REGISTRY=$RegistryHost IMAGE_TAG=latest # 服务器配置(必须) SERVER_IP=您的服务器IP地址 APP_PORT=4320 # 数据库配置(建议修改密码) POSTGRES_USER=postgres POSTGRES_PASSWORD=请修改为安全密码 POSTGRES_DB=flnxi # 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 = @" # FLNXI素材库 - 快速部署指南 ## 🚀 一键部署(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 < FLNXI素材库 - 快速安装" 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 }