feat(docker): Add Phase 4 - automated startup scripts and documentation
Implemented one-click development environment startup solution for frontend developers. Changes: - Created scripts/dev-start.ps1 (PowerShell startup script for Windows) * Docker health checks * Service status monitoring * Clean/Logs/Stop command options * Auto .env creation from .env.example * Friendly colored output and progress indicators - Created scripts/dev-start.sh (Bash startup script for Linux/macOS) * Feature parity with PowerShell version * Cross-platform compatibility * Color-coded status messages - Updated .env.example with comprehensive configuration * Added missing port configurations * Added JWT settings (Issuer, Audience) * Added SignalR hub URL * Improved documentation and organization - Created README.md (project documentation) * Quick start guide for Docker setup * Manual development instructions * Project structure overview * Technology stack details * Troubleshooting guide * Development workflow Testing: - Verified PowerShell script syntax (valid) - Verified Bash script has executable permissions - Confirmed all files created successfully - Docker services running and healthy 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
175
scripts/dev-start.ps1
Normal file
175
scripts/dev-start.ps1
Normal file
@@ -0,0 +1,175 @@
|
||||
#!/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
|
||||
|
||||
"@
|
||||
148
scripts/dev-start.sh
Normal file
148
scripts/dev-start.sh
Normal file
@@ -0,0 +1,148 @@
|
||||
#!/bin/bash
|
||||
|
||||
# ColaFlow 开发环境启动脚本 (Bash)
|
||||
|
||||
set -e
|
||||
|
||||
# 颜色定义
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
CYAN='\033[0;36m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
# 输出函数
|
||||
success() { echo -e "${GREEN}$1${NC}"; }
|
||||
info() { echo -e "${CYAN}$1${NC}"; }
|
||||
warning() { echo -e "${YELLOW}$1${NC}"; }
|
||||
error() { echo -e "${RED}$1${NC}"; }
|
||||
|
||||
# 横幅
|
||||
info "
|
||||
╔═══════════════════════════════════════════╗
|
||||
║ ColaFlow Development Environment ║
|
||||
║ Docker-based Development Stack ║
|
||||
╚═══════════════════════════════════════════╝
|
||||
"
|
||||
|
||||
# 检查 Docker
|
||||
info "🔍 Checking Docker..."
|
||||
if ! command -v docker &> /dev/null; then
|
||||
error "❌ Docker not found! Please install Docker."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if ! docker info &> /dev/null; then
|
||||
error "❌ Docker is not running! Please start Docker."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
success "✅ Docker is ready"
|
||||
|
||||
# 参数处理
|
||||
CLEAN=false
|
||||
LOGS=false
|
||||
STOP=false
|
||||
|
||||
while [[ $# -gt 0 ]]; do
|
||||
case $1 in
|
||||
--clean|-c)
|
||||
CLEAN=true
|
||||
shift
|
||||
;;
|
||||
--logs|-l)
|
||||
LOGS=true
|
||||
shift
|
||||
;;
|
||||
--stop|-s)
|
||||
STOP=true
|
||||
shift
|
||||
;;
|
||||
*)
|
||||
echo "Unknown option: $1"
|
||||
echo "Usage: $0 [--clean] [--logs] [--stop]"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
# 停止服务
|
||||
if [ "$STOP" = true ]; then
|
||||
info "🛑 Stopping all services..."
|
||||
docker-compose down
|
||||
success "✅ All services stopped"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# 查看日志
|
||||
if [ "$LOGS" = true ]; then
|
||||
info "📋 Showing logs (Ctrl+C to exit)..."
|
||||
docker-compose logs -f
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# 清理
|
||||
if [ "$CLEAN" = true ]; then
|
||||
warning "🧹 Cleaning up containers and volumes..."
|
||||
docker-compose down -v
|
||||
info "🔨 Rebuilding images..."
|
||||
docker-compose build --no-cache
|
||||
fi
|
||||
|
||||
# 检查 .env 文件
|
||||
if [ ! -f ".env" ]; then
|
||||
if [ -f ".env.example" ]; then
|
||||
info "📄 Creating .env from .env.example..."
|
||||
cp .env.example .env
|
||||
success "✅ .env file created"
|
||||
else
|
||||
warning "⚠️ No .env or .env.example found, using docker-compose defaults"
|
||||
fi
|
||||
fi
|
||||
|
||||
# 启动服务
|
||||
info "🚀 Starting services..."
|
||||
docker-compose up -d
|
||||
|
||||
# 等待健康检查
|
||||
info "⏳ Waiting for services to be healthy..."
|
||||
max_wait=60
|
||||
waited=0
|
||||
interval=2
|
||||
|
||||
while [ $waited -lt $max_wait ]; do
|
||||
if docker-compose ps | grep -q "unhealthy"; then
|
||||
sleep $interval
|
||||
waited=$((waited + interval))
|
||||
echo -n "."
|
||||
else
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
echo ""
|
||||
|
||||
# 检查服务状态
|
||||
info "\n📊 Service Status:"
|
||||
docker-compose ps
|
||||
|
||||
success "\n🎉 ColaFlow development environment is ready!"
|
||||
|
||||
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.sh --stop # Stop all services
|
||||
./scripts/dev-start.sh --logs # View logs
|
||||
./scripts/dev-start.sh --clean # Clean rebuild
|
||||
docker-compose ps # Check status
|
||||
"
|
||||
Reference in New Issue
Block a user