furniture-3d-system-Wu/quick-start.ps1
WuYongJie 9859afc4aa 初始化3D家具展示系统项目
- 完整的Next.js 14 + TypeScript项目架构
- 集成Three.js和GSAP用于3D渲染和动画
- Prisma ORM + PostgreSQL数据库
- Docker容器化部署支持
- 本地缓存优化系统
- 中文界面和注释
- 移动端响应式设计
- 健康检查和监控功能
2025-12-11 16:42:59 +08:00

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