包含: - furniture-3d-system:Next.js 16 全栈应用(资产中心、产品管理、3D装配动画) - autocad-plugin:AutoCAD 家具导出插件源码 - 资产中心改造:编辑弹窗化、删除功能、Toast反馈、自定义Select组件 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
311 lines
9.8 KiB
PowerShell
311 lines
9.8 KiB
PowerShell
# ============================================
|
|
# 3D家具安装展示系统 - 快速启动脚本
|
|
# 一键启动开发或生产环境
|
|
# ============================================
|
|
|
|
param(
|
|
[ValidateSet("dev", "prod", "cached", "stop", "restart", "logs", "status")]
|
|
[string]$Action = "cached",
|
|
|
|
[switch]$Build,
|
|
[switch]$Clean
|
|
)
|
|
|
|
# 设置错误处理
|
|
$ErrorActionPreference = "Stop"
|
|
|
|
# 颜色输出函数
|
|
function Write-ColorOutput {
|
|
param([string]$Message, [string]$Color = "White")
|
|
$colors = @{
|
|
"Red" = [ConsoleColor]::Red
|
|
"Green" = [ConsoleColor]::Green
|
|
"Yellow" = [ConsoleColor]::Yellow
|
|
"Blue" = [ConsoleColor]::Blue
|
|
"Cyan" = [ConsoleColor]::Cyan
|
|
"White" = [ConsoleColor]::White
|
|
"Magenta" = [ConsoleColor]::Magenta
|
|
}
|
|
Write-Host $Message -ForegroundColor $colors[$Color]
|
|
}
|
|
|
|
# 显示帮助信息
|
|
function Show-Help {
|
|
Write-ColorOutput "🎯 3D家具安装展示系统 - 快速启动" "Cyan"
|
|
Write-ColorOutput ""
|
|
Write-ColorOutput "用法: .\quick-start.ps1 [动作] [选项]" "White"
|
|
Write-ColorOutput ""
|
|
Write-ColorOutput "动作:" "Yellow"
|
|
Write-ColorOutput " dev - 启动开发环境 (热重载)" "Cyan"
|
|
Write-ColorOutput " prod - 启动生产环境" "Cyan"
|
|
Write-ColorOutput " cached - 启动缓存优化环境 (默认)" "Cyan"
|
|
Write-ColorOutput " stop - 停止所有服务" "Cyan"
|
|
Write-ColorOutput " restart - 重启服务" "Cyan"
|
|
Write-ColorOutput " logs - 查看日志" "Cyan"
|
|
Write-ColorOutput " status - 查看服务状态" "Cyan"
|
|
Write-ColorOutput ""
|
|
Write-ColorOutput "选项:" "Yellow"
|
|
Write-ColorOutput " -Build - 强制重新构建镜像" "Cyan"
|
|
Write-ColorOutput " -Clean - 清理缓存和数据" "Cyan"
|
|
Write-ColorOutput ""
|
|
Write-ColorOutput "示例:" "Yellow"
|
|
Write-ColorOutput " .\quick-start.ps1 # 启动缓存优化环境" "Green"
|
|
Write-ColorOutput " .\quick-start.ps1 dev # 启动开发环境" "Green"
|
|
Write-ColorOutput " .\quick-start.ps1 prod -Build # 重新构建并启动生产环境" "Green"
|
|
Write-ColorOutput " .\quick-start.ps1 stop # 停止所有服务" "Green"
|
|
Write-ColorOutput " .\quick-start.ps1 logs # 查看日志" "Green"
|
|
}
|
|
|
|
# 获取Docker Compose文件
|
|
function Get-ComposeFile {
|
|
param([string]$Mode)
|
|
|
|
switch ($Mode) {
|
|
"dev" {
|
|
if (Test-Path "docker-compose.dev.yml") {
|
|
return "docker-compose.dev.yml"
|
|
} else {
|
|
return "docker-compose.yml"
|
|
}
|
|
}
|
|
"prod" {
|
|
if (Test-Path "docker-compose.prod.yml") {
|
|
return "docker-compose.prod.yml"
|
|
} else {
|
|
return "docker-compose.yml"
|
|
}
|
|
}
|
|
"cached" {
|
|
if (Test-Path "docker-compose.cached.yml") {
|
|
return "docker-compose.cached.yml"
|
|
} else {
|
|
return "docker-compose.yml"
|
|
}
|
|
}
|
|
default { return "docker-compose.yml" }
|
|
}
|
|
}
|
|
|
|
# 检查Docker环境
|
|
function Test-DockerEnvironment {
|
|
try {
|
|
docker --version | Out-Null
|
|
docker-compose --version | Out-Null
|
|
return $true
|
|
} catch {
|
|
Write-ColorOutput "❌ Docker或Docker Compose未安装或未运行" "Red"
|
|
Write-ColorOutput "请先安装Docker Desktop并确保其正在运行" "Yellow"
|
|
return $false
|
|
}
|
|
}
|
|
|
|
# 启动服务
|
|
function Start-Services {
|
|
param([string]$Mode)
|
|
|
|
Write-ColorOutput "🚀 启动$Mode环境..." "Blue"
|
|
|
|
$composeFile = Get-ComposeFile $Mode
|
|
Write-ColorOutput "📋 使用配置: $composeFile" "Cyan"
|
|
|
|
# 构建参数
|
|
$args = @("-f", $composeFile, "up", "-d")
|
|
|
|
if ($Build) {
|
|
$args += "--build"
|
|
Write-ColorOutput "🔨 强制重新构建镜像..." "Yellow"
|
|
}
|
|
|
|
try {
|
|
& docker-compose @args
|
|
Write-ColorOutput "✅ 服务启动成功" "Green"
|
|
|
|
# 等待服务就绪
|
|
Write-ColorOutput "⏳ 等待服务就绪..." "Yellow"
|
|
Start-Sleep 10
|
|
|
|
# 检查健康状态
|
|
Test-ServiceHealth
|
|
|
|
} catch {
|
|
Write-ColorOutput "❌ 服务启动失败: $($_.Exception.Message)" "Red"
|
|
throw
|
|
}
|
|
}
|
|
|
|
# 停止服务
|
|
function Stop-Services {
|
|
Write-ColorOutput "🛑 停止所有服务..." "Blue"
|
|
|
|
# 尝试停止所有可能的compose文件
|
|
$composeFiles = @("docker-compose.yml", "docker-compose.dev.yml", "docker-compose.prod.yml", "docker-compose.cached.yml")
|
|
|
|
foreach ($file in $composeFiles) {
|
|
if (Test-Path $file) {
|
|
try {
|
|
docker-compose -f $file down --remove-orphans
|
|
Write-ColorOutput "✅ 已停止: $file" "Green"
|
|
} catch {
|
|
Write-ColorOutput "⚠️ 停止失败或服务未运行: $file" "Yellow"
|
|
}
|
|
}
|
|
}
|
|
|
|
if ($Clean) {
|
|
Write-ColorOutput "🧹 清理数据和缓存..." "Yellow"
|
|
try {
|
|
# 清理数据卷
|
|
docker volume prune -f
|
|
# 清理网络
|
|
docker network prune -f
|
|
# 清理未使用的镜像
|
|
docker image prune -f
|
|
Write-ColorOutput "✅ 清理完成" "Green"
|
|
} catch {
|
|
Write-ColorOutput "⚠️ 清理过程中出现警告" "Yellow"
|
|
}
|
|
}
|
|
}
|
|
|
|
# 重启服务
|
|
function Restart-Services {
|
|
param([string]$Mode)
|
|
|
|
Write-ColorOutput "🔄 重启服务..." "Blue"
|
|
Stop-Services
|
|
Start-Sleep 3
|
|
Start-Services $Mode
|
|
}
|
|
|
|
# 查看日志
|
|
function Show-Logs {
|
|
$composeFile = Get-ComposeFile "cached"
|
|
|
|
if (Test-Path $composeFile) {
|
|
Write-ColorOutput "📋 显示服务日志..." "Blue"
|
|
try {
|
|
docker-compose -f $composeFile logs --tail=50 -f
|
|
} catch {
|
|
Write-ColorOutput "❌ 无法获取日志,服务可能未运行" "Red"
|
|
}
|
|
} else {
|
|
Write-ColorOutput "❌ 找不到Docker Compose配置文件" "Red"
|
|
}
|
|
}
|
|
|
|
# 查看服务状态
|
|
function Show-Status {
|
|
Write-ColorOutput "📊 服务状态:" "Blue"
|
|
|
|
# 检查所有可能的compose文件
|
|
$composeFiles = @("docker-compose.cached.yml", "docker-compose.yml", "docker-compose.dev.yml", "docker-compose.prod.yml")
|
|
|
|
$found = $false
|
|
foreach ($file in $composeFiles) {
|
|
if (Test-Path $file) {
|
|
try {
|
|
Write-ColorOutput "📋 配置文件: $file" "Cyan"
|
|
docker-compose -f $file ps
|
|
$found = $true
|
|
break
|
|
} catch {
|
|
continue
|
|
}
|
|
}
|
|
}
|
|
|
|
if (-not $found) {
|
|
Write-ColorOutput "❌ 没有找到运行中的服务" "Red"
|
|
return
|
|
}
|
|
|
|
Write-ColorOutput ""
|
|
Write-ColorOutput "🌐 访问地址:" "Green"
|
|
Write-ColorOutput " • 主应用: http://localhost:3000" "Cyan"
|
|
Write-ColorOutput " • 健康检查: http://localhost:3000/api/health" "Cyan"
|
|
Write-ColorOutput " • MinIO管理: http://localhost:9001" "Cyan"
|
|
Write-ColorOutput " • 数据库: localhost:5432" "Cyan"
|
|
}
|
|
|
|
# 测试服务健康状态
|
|
function Test-ServiceHealth {
|
|
Write-ColorOutput "🔍 检查服务健康状态..." "Blue"
|
|
|
|
$maxAttempts = 12
|
|
$attempt = 0
|
|
|
|
while ($attempt -lt $maxAttempts) {
|
|
try {
|
|
$response = Invoke-WebRequest -Uri "http://localhost:3000/api/health" -TimeoutSec 5 -UseBasicParsing
|
|
if ($response.StatusCode -eq 200) {
|
|
Write-ColorOutput "✅ 应用服务健康" "Green"
|
|
return $true
|
|
}
|
|
} catch {
|
|
# 继续尝试
|
|
}
|
|
|
|
$attempt++
|
|
Write-ColorOutput "⏳ 等待服务就绪... ($attempt/$maxAttempts)" "Yellow"
|
|
Start-Sleep 5
|
|
}
|
|
|
|
Write-ColorOutput "⚠️ 服务可能未完全就绪,请检查日志" "Yellow"
|
|
return $false
|
|
}
|
|
|
|
# 主函数
|
|
function Main {
|
|
# 显示标题
|
|
Write-ColorOutput "╔══════════════════════════════════════════════════════════════╗" "Cyan"
|
|
Write-ColorOutput "║ 3D家具安装展示系统 ║" "Cyan"
|
|
Write-ColorOutput "║ 快速启动工具 ║" "Cyan"
|
|
Write-ColorOutput "╚══════════════════════════════════════════════════════════════╝" "Cyan"
|
|
Write-ColorOutput ""
|
|
|
|
# 检查Docker环境
|
|
if (-not (Test-DockerEnvironment)) {
|
|
exit 1
|
|
}
|
|
|
|
try {
|
|
switch ($Action) {
|
|
"dev" {
|
|
Start-Services "dev"
|
|
}
|
|
"prod" {
|
|
Start-Services "prod"
|
|
}
|
|
"cached" {
|
|
Start-Services "cached"
|
|
}
|
|
"stop" {
|
|
Stop-Services
|
|
}
|
|
"restart" {
|
|
Restart-Services "cached"
|
|
}
|
|
"logs" {
|
|
Show-Logs
|
|
}
|
|
"status" {
|
|
Show-Status
|
|
}
|
|
default {
|
|
Show-Help
|
|
}
|
|
}
|
|
} catch {
|
|
Write-ColorOutput "❌ 操作失败: $($_.Exception.Message)" "Red"
|
|
Write-ColorOutput ""
|
|
Write-ColorOutput "💡 故障排除提示:" "Yellow"
|
|
Write-ColorOutput " • 确保Docker Desktop正在运行" "Cyan"
|
|
Write-ColorOutput " • 检查端口是否被占用 (3000, 5432, 9000, 9001)" "Cyan"
|
|
Write-ColorOutput " • 尝试使用 -Clean 参数清理环境" "Cyan"
|
|
Write-ColorOutput " • 查看详细日志: .\quick-start.ps1 logs" "Cyan"
|
|
exit 1
|
|
}
|
|
}
|
|
|
|
# 执行主函数
|
|
Main |