#!/usr/bin/env pwsh <# .SYNOPSIS ColaFlow 开发环境启动脚本 .DESCRIPTION 一键启动 ColaFlow 开发环境的所有服务(PostgreSQL, Redis, Backend, Frontend) .PARAMETER Clean 清理现有容器和数据,重新构建启动 .PARAMETER Logs 显示所有服务的日志 .PARAMETER Stop 停止所有服务 .EXAMPLE .\dev-start.ps1 启动所有服务 .EXAMPLE .\dev-start.ps1 -Clean 清理并重新启动 .EXAMPLE .\dev-start.ps1 -Logs 查看服务日志 #> param( [switch]$Clean, [switch]$Logs, [switch]$Stop ) # 颜色输出函数 function Write-ColorOutput($ForegroundColor) { $fc = $host.UI.RawUI.ForegroundColor $host.UI.RawUI.ForegroundColor = $ForegroundColor if ($args) { Write-Output $args } $host.UI.RawUI.ForegroundColor = $fc } function Write-Success { Write-ColorOutput Green $args } function Write-Info { Write-ColorOutput Cyan $args } function Write-Warning { Write-ColorOutput Yellow $args } function Write-Error { Write-ColorOutput Red $args } # 横幅 Write-Info @" ╔═══════════════════════════════════════════╗ ║ ColaFlow Development Environment ║ ║ Docker-based Development Stack ║ ╚═══════════════════════════════════════════╝ "@ # 检查 Docker Write-Info "🔍 Checking Docker..." if (-not (Get-Command docker -ErrorAction SilentlyContinue)) { Write-Error "❌ Docker not found! Please install Docker Desktop." exit 1 } if (-not (docker info 2>$null)) { Write-Error "❌ Docker is not running! Please start Docker Desktop." exit 1 } Write-Success "✅ Docker is ready" # 处理参数 if ($Stop) { Write-Info "🛑 Stopping all services..." docker-compose down Write-Success "✅ All services stopped" exit 0 } if ($Logs) { Write-Info "📋 Showing logs (Ctrl+C to exit)..." docker-compose logs -f exit 0 } if ($Clean) { Write-Warning "🧹 Cleaning up containers and volumes..." docker-compose down -v Write-Info "🔨 Rebuilding images..." docker-compose build --no-cache } # 检查 .env 文件 if (-not (Test-Path ".env")) { if (Test-Path ".env.example") { Write-Info "📄 Creating .env from .env.example..." Copy-Item ".env.example" ".env" Write-Success "✅ .env file created" } else { Write-Warning "⚠️ No .env or .env.example found, using docker-compose defaults" } } # 启动服务 Write-Info "🚀 Starting services..." docker-compose up -d # 等待健康检查 Write-Info "⏳ Waiting for services to be healthy..." $maxWait = 60 $waited = 0 $interval = 2 while ($waited -lt $maxWait) { $status = docker-compose ps --format json 2>$null if ($status) { try { $services = $status | ConvertFrom-Json $allHealthy = $true foreach ($service in $services) { if ($service.Health -eq "unhealthy") { $allHealthy = $false break } } if ($allHealthy) { break } } catch { # Continue waiting if JSON parsing fails } } Start-Sleep -Seconds $interval $waited += $interval Write-Host "." -NoNewline } Write-Host "" # 检查服务状态 Write-Info "`n📊 Service Status:" docker-compose ps Write-Success "`n🎉 ColaFlow development environment is ready!" Write-Info @" 📍 Access Points: Frontend: http://localhost:3000 Backend: http://localhost:5000 Swagger: http://localhost:5000/scalar/v1 Database: localhost:5432 (colaflow/colaflow_dev_password) Redis: localhost:6379 👤 Demo Accounts (see scripts/DEMO-ACCOUNTS.md): Owner: owner@demo.com / Demo@123456 Developer: developer@demo.com / Demo@123456 📝 Useful Commands: .\scripts\dev-start.ps1 -Stop # Stop all services .\scripts\dev-start.ps1 -Logs # View logs .\scripts\dev-start.ps1 -Clean # Clean rebuild docker-compose ps # Check status "@