fix(deploy-mining): 使用docker compose替代npm进行构建和部署

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
hailin 2026-01-10 23:11:42 -08:00
parent ca55a81263
commit a36bdcdda5
1 changed files with 14 additions and 110 deletions

View File

@ -346,123 +346,40 @@ service_start() {
local port="${SERVICE_PORTS[$service]}"
log_step "Starting: $service (port $port)"
# Try docker-compose first
if docker-compose -f "$COMPOSE_FILE" up -d "$service" 2>/dev/null; then
log_success "$service started via docker-compose"
return 0
fi
# Fallback to npm
local service_dir="$SCRIPT_DIR/$service"
if [ -d "$service_dir" ]; then
cd "$service_dir"
# Check if already running
if [ -f "/tmp/$service.pid" ]; then
local pid=$(cat /tmp/$service.pid)
if kill -0 "$pid" 2>/dev/null; then
log_warn "$service is already running (PID: $pid)"
cd "$SCRIPT_DIR"
return 0
fi
fi
# Start the service
log_info "Starting via npm..."
nohup npm run start:prod > "/tmp/$service.log" 2>&1 &
echo $! > "/tmp/$service.pid"
# Wait for startup
sleep 2
if nc -z localhost "$port" 2>/dev/null; then
log_success "$service started (PID: $(cat /tmp/$service.pid))"
else
log_warn "$service started but port $port not yet listening"
fi
cd "$SCRIPT_DIR"
else
log_error "Service directory not found: $service_dir"
return 1
fi
docker compose -f "$COMPOSE_FILE" --env-file "$ENV_FILE" up -d "$service"
log_success "$service started"
}
service_stop() {
local service="$1"
log_step "Stopping: $service"
# Try docker-compose first
if docker-compose -f "$COMPOSE_FILE" stop "$service" 2>/dev/null; then
log_success "$service stopped via docker-compose"
return 0
fi
# Fallback to PID file
if [ -f "/tmp/$service.pid" ]; then
local pid=$(cat /tmp/$service.pid)
if kill "$pid" 2>/dev/null; then
rm -f "/tmp/$service.pid"
log_success "$service stopped (PID: $pid)"
else
rm -f "/tmp/$service.pid"
log_warn "$service was not running"
fi
else
# Try to find by port
local port="${SERVICE_PORTS[$service]}"
local pid=$(lsof -t -i:$port 2>/dev/null || true)
if [ -n "$pid" ]; then
kill "$pid" 2>/dev/null || true
log_success "$service stopped (found by port $port)"
else
log_warn "$service was not running"
fi
fi
docker compose -f "$COMPOSE_FILE" --env-file "$ENV_FILE" stop "$service"
log_success "$service stopped"
}
service_restart() {
local service="$1"
service_stop "$service"
sleep 2
service_start "$service"
log_step "Restarting: $service"
docker compose -f "$COMPOSE_FILE" --env-file "$ENV_FILE" restart "$service"
log_success "$service restarted"
}
service_build() {
local service="$1"
local no_cache="$2"
local service_dir="$SCRIPT_DIR/$service"
if [ ! -d "$service_dir" ]; then
log_error "Service directory not found: $service_dir"
return 1
fi
log_step "Building: $service"
cd "$service_dir"
# Clean if no-cache
# Use docker compose to build
if [ "$no_cache" = "--no-cache" ] || [ "$no_cache" = "true" ]; then
log_info "Cleaning build cache..."
rm -rf dist/ node_modules/.cache 2>/dev/null || true
log_info "Building Docker image (no cache)..."
docker compose -f "$COMPOSE_FILE" --env-file "$ENV_FILE" build --no-cache "$service"
else
log_info "Building Docker image..."
docker compose -f "$COMPOSE_FILE" --env-file "$ENV_FILE" build "$service"
fi
# Install dependencies
log_info "Installing dependencies..."
npm install
# Generate Prisma client if needed
if [ -d "prisma" ]; then
log_info "Generating Prisma client..."
npx prisma generate
fi
# Build
log_info "Compiling TypeScript..."
npm run build
cd "$SCRIPT_DIR"
log_success "$service built successfully"
}
@ -603,20 +520,7 @@ services_logs() {
exit 1
}
# Try docker-compose first
if docker-compose -f "$COMPOSE_FILE" logs -f --tail="$lines" "$resolved" 2>/dev/null; then
return 0
fi
# Fallback to log file
local log_file="/tmp/$resolved.log"
if [ -f "$log_file" ]; then
log_info "Showing logs for $resolved (tail -f $log_file)"
tail -f -n "$lines" "$log_file"
else
log_error "No logs found for $resolved"
exit 1
fi
docker compose -f "$COMPOSE_FILE" --env-file "$ENV_FILE" logs -f --tail="$lines" "$resolved"
}
# ===========================================================================