ly0303521

前端npm run dev -> npm run build,前端后端服务使用pm2管理,提高稳定性

1 # Shared Configuration 1 # Shared Configuration
2 -PUBLIC_IP="106.120.52.146" 2 +export PUBLIC_IP="106.120.52.146"
3 3
4 # Ports (External Access) 4 # Ports (External Access)
5 -LOCAL_BACKEND_PORT="9998"  
6 -PUBLIC_BACKEND_PORT="39998"  
7 -LOCAL_FRONTEND_PORT="9013"  
8 -PUBLIC_FRONTEND_PORT="39013"  
9 -LOCAL_TURBO_PORT="7002"  
10 -PUBLIC_TURBO_PORT="37002"  
11 -PUBLIC_OSS_PORT="34000"  
12 -PUBLIC_ZIMAGE_PORT="39009" 5 +export LOCAL_BACKEND_PORT="7000"
  6 +export PUBLIC_BACKEND_PORT="37000"
  7 +export LOCAL_FRONTEND_PORT="7001"
  8 +export PUBLIC_FRONTEND_PORT="37001"
  9 +export LOCAL_TURBO_PORT="7002"
  10 +export PUBLIC_TURBO_PORT="37002"
  11 +export PUBLIC_OSS_PORT="34000"
  12 +export PUBLIC_ZIMAGE_PORT="39009"
13 13
14 14
15 # Business Logic Configuration 15 # Business Logic Configuration
16 -VIDEO_GENERATION_LIMIT="1"  
17 -LIKES_FOR_REWARD="5" 16 +export VIDEO_GENERATION_LIMIT="1"
  17 +export LIKES_FOR_REWARD="5"
  18 +
  19 +# pm2 name set
  20 +export BACKEND_NAME="backend_beta"
  21 +export FRONTEND_NAME="frontend_beta"
  1 +const path = require('path');
  2 +
  3 +module.exports = {
  4 + apps: [
  5 + {
  6 + name: process.env.BACKEND_NAME || "z-image-backend",
  7 + script: "./venv/bin/uvicorn",
  8 + // Use LOCAL_BACKEND_PORT from environment, default to 7000
  9 + args: `backend.main:app --host 0.0.0.0 --port ${process.env.LOCAL_BACKEND_PORT || 7000}`,
  10 + cwd: __dirname,
  11 + interpreter: "none",
  12 + autorestart: true,
  13 + watch: false,
  14 + max_memory_restart: '1G'
  15 + },
  16 + {
  17 + name: process.env.FRONTEND_NAME || "z-image-frontend",
  18 + script: "serve",
  19 + env: {
  20 + // Use LOCAL_FRONTEND_PORT from environment, default to 7001
  21 + PM2_SERVE_PATH: path.join(__dirname, 'z-image-generator/dist'),
  22 + PM2_SERVE_PORT: process.env.LOCAL_FRONTEND_PORT || 7001,
  23 + PM2_SERVE_SPA: 'true',
  24 + PM2_SERVE_HOMEPAGE: '/index.html'
  25 + }
  26 + }
  27 + ]
  28 +};
@@ -16,33 +16,18 @@ export NO_PROXY="localhost,127.0.0.1,0.0.0.0,::1" @@ -16,33 +16,18 @@ export NO_PROXY="localhost,127.0.0.1,0.0.0.0,::1"
16 16
17 FRONTEND_DIR="$BASE_DIR/z-image-generator" 17 FRONTEND_DIR="$BASE_DIR/z-image-generator"
18 BACKEND_DIR="$BASE_DIR" 18 BACKEND_DIR="$BASE_DIR"
19 -CONSTANTS_FILE="$FRONTEND_DIR/constants.ts"  
20 CONFIG_JS_FILE="$BASE_DIR/public/config.js" 19 CONFIG_JS_FILE="$BASE_DIR/public/config.js"
21 LOGS_DIR="$BASE_DIR/logs" 20 LOGS_DIR="$BASE_DIR/logs"
22 21
23 # Ensure logs directory exists 22 # Ensure logs directory exists
24 mkdir -p "$LOGS_DIR" 23 mkdir -p "$LOGS_DIR"
25 24
26 -# Function to rotate logs  
27 -rotate_log() {  
28 - local log_file="$1"  
29 - if [ -f "$log_file" ]; then  
30 - local timestamp=$(date +"%Y%m%d_%H%M%S")  
31 - local filename=$(basename "$log_file")  
32 - local archived_log="$LOGS_DIR/${filename%.*}_$timestamp.log"  
33 - echo "Rotating log: $log_file -> $archived_log"  
34 - mv "$log_file" "$archived_log"  
35 - fi  
36 -}  
37 -  
38 echo "==================================================" 25 echo "=================================================="
39 -echo "Initializing Front-Backend Z-Image Services" 26 +echo "Initializing Front-Backend Z-Image Services (PM2)"
40 echo "==================================================" 27 echo "=================================================="
41 28
42 # 1. Generate Runtime Config (config.js) 29 # 1. Generate Runtime Config (config.js)
43 echo "Generating runtime configuration in $CONFIG_JS_FILE..." 30 echo "Generating runtime configuration in $CONFIG_JS_FILE..."
44 -  
45 -# Ensure directory exists  
46 mkdir -p "$(dirname "$CONFIG_JS_FILE")" 31 mkdir -p "$(dirname "$CONFIG_JS_FILE")"
47 32
48 cat > "$CONFIG_JS_FILE" <<EOF 33 cat > "$CONFIG_JS_FILE" <<EOF
@@ -57,52 +42,34 @@ window.APP_CONFIG = { @@ -57,52 +42,34 @@ window.APP_CONFIG = {
57 EOF 42 EOF
58 export TURBO_DIFFUSION_LOCAL_URL="http://127.0.0.1:$LOCAL_TURBO_PORT" 43 export TURBO_DIFFUSION_LOCAL_URL="http://127.0.0.1:$LOCAL_TURBO_PORT"
59 export VITE_API_BASE_URL="http://$PUBLIC_IP:$PUBLIC_BACKEND_PORT" 44 export VITE_API_BASE_URL="http://$PUBLIC_IP:$PUBLIC_BACKEND_PORT"
60 -export WHITELIST_PATH="/home/inspur/work_space/gen_img_video/TurboDiffusion-Space/TurboDiffusion/front_backend_zImage/backend/whitelist.txt" 45 +export WHITELIST_PATH="$BASE_DIR/backend/whitelist.txt"
61 46
62 echo "Configuration generated." 47 echo "Configuration generated."
63 48
64 -# 2. Start Backend Service  
65 -echo "--------------------------------------------------"  
66 -echo "Starting Backend Service..."  
67 -echo "Host: 0.0.0.0, Port: $LOCAL_BACKEND_PORT"  
68 -echo "Public URL: http://$PUBLIC_IP:$PUBLIC_BACKEND_PORT"  
69 -  
70 -cd "$BACKEND_DIR" || exit 1  
71 -PID_BACKEND=$(lsof -t -i:$LOCAL_BACKEND_PORT)  
72 -if [ -n "$PID_BACKEND" ]; then  
73 - echo "Killing existing backend process on port $LOCAL_BACKEND_PORT (PID: $PID_BACKEND)..."  
74 - kill -9 "$PID_BACKEND" 49 +# 2. Check/Build Frontend
  50 +echo "Checking frontend build..."
  51 +if [ ! -d "$FRONTEND_DIR/dist" ]; then
  52 + echo "Dist folder not found. Building frontend..."
  53 + cd "$FRONTEND_DIR"
  54 + npm run build
  55 + cd "$BASE_DIR"
75 fi 56 fi
76 57
77 -rotate_log "$BASE_DIR/backend.log"  
78 -  
79 -# Use venv uvicorn  
80 -UVICORN_BIN="$BASE_DIR/venv/bin/uvicorn"  
81 -if [ ! -f "$UVICORN_BIN" ]; then  
82 - echo "Warning: venv uvicorn not found at $UVICORN_BIN, trying system uvicorn..."  
83 - UVICORN_BIN="uvicorn"  
84 -fi  
85 -  
86 -nohup "$UVICORN_BIN" backend.main:app --host 0.0.0.0 --port "$LOCAL_BACKEND_PORT" > backend.log 2>&1 &  
87 -echo "Backend started with PID: $!"  
88 -  
89 -# 3. Start Frontend Service  
90 -echo "--------------------------------------------------"  
91 -echo "Starting Frontend Service..."  
92 -echo "Host: 0.0.0.0, Port: $LOCAL_FRONTEND_PORT"  
93 -echo "Public URL: http://$PUBLIC_IP:$PUBLIC_FRONTEND_PORT"  
94 -  
95 -cd "$FRONTEND_DIR" || exit 1  
96 -PID_FRONTEND=$(lsof -t -i:$LOCAL_FRONTEND_PORT)  
97 -if [ -n "$PID_FRONTEND" ]; then  
98 - echo "Killing existing frontend process on port $LOCAL_FRONTEND_PORT (PID: $PID_FRONTEND)..."  
99 - kill -9 "$PID_FRONTEND" 58 +# 3. Start PM2
  59 +echo "Starting services with PM2..."
  60 +cd "$BASE_DIR"
  61 +if command -v pm2 &> /dev/null; then
  62 + # 显式指定配置文件,并使用 --update-env 确保环境变量同步
  63 + pm2 start ecosystem.config.js --update-env
  64 + pm2 save
  65 + echo "Services started via PM2."
  66 + pm2 list
  67 +else
  68 + echo "Error: PM2 not found. Please install pm2 (npm install -g pm2) or use old start script."
  69 + exit 1
100 fi 70 fi
101 71
102 -rotate_log "$BASE_DIR/frontend.log"  
103 -  
104 -nohup npm run dev -- --port "$LOCAL_FRONTEND_PORT" --host 0.0.0.0 > ../frontend.log 2>&1 &  
105 -echo "Frontend started with PID: $!"  
106 -  
107 echo "==================================================" 72 echo "=================================================="
108 -echo "All services initiated." 73 +echo "Frontend: http://$PUBLIC_IP:$PUBLIC_FRONTEND_PORT (Mapped from $LOCAL_FRONTEND_PORT)"
  74 +echo "Backend: http://$PUBLIC_IP:$PUBLIC_BACKEND_PORT (Mapped from $LOCAL_BACKEND_PORT)"
  75 +echo "=================================================="
1 #!/bin/bash 1 #!/bin/bash
2 -  
3 BASE_DIR=$(cd "$(dirname "$0")"; pwd) 2 BASE_DIR=$(cd "$(dirname "$0")"; pwd)
4 3
5 -# Load shared configuration 4 +# Load shared configuration to get ports
6 if [ -f "$BASE_DIR/.env.sh" ]; then 5 if [ -f "$BASE_DIR/.env.sh" ]; then
7 source "$BASE_DIR/.env.sh" 6 source "$BASE_DIR/.env.sh"
8 else 7 else
@@ -10,33 +9,19 @@ else @@ -10,33 +9,19 @@ else
10 exit 1 9 exit 1
11 fi 10 fi
12 11
13 -echo "=================================================="  
14 -echo "Stopping Front-Backend Z-Image Services"  
15 -echo "=================================================="  
16 -  
17 -# 1. Stop Backend Service  
18 -echo "Checking Backend Service on port $LOCAL_BACKEND_PORT..."  
19 -PID_BACKEND=$(lsof -t -i:$LOCAL_BACKEND_PORT)  
20 -if [ -n "$PID_BACKEND" ]; then  
21 - echo "Found backend process (PID: $PID_BACKEND). Stopping..."  
22 - kill -9 "$PID_BACKEND"  
23 - echo "Backend service stopped."  
24 -else  
25 - echo "No backend service found running on port $LOCAL_BACKEND_PORT."  
26 -fi  
27 -  
28 -echo "--------------------------------------------------" 12 +echo "Stopping Z-Image Services..."
29 13
30 -# 2. Stop Frontend Service  
31 -echo "Checking Frontend Service on port $LOCAL_FRONTEND_PORT..."  
32 -PID_FRONTEND=$(lsof -t -i:$LOCAL_FRONTEND_PORT)  
33 -if [ -n "$PID_FRONTEND" ]; then  
34 - echo "Found frontend process (PID: $PID_FRONTEND). Stopping..."  
35 - kill -9 "$PID_FRONTEND"  
36 - echo "Frontend service stopped." 14 +if command -v pm2 &> /dev/null; then
  15 + pm2 stop z-image-backend z-image-frontend
  16 + pm2 delete z-image-backend z-image-frontend
  17 + echo "Stopped via PM2."
37 else 18 else
38 - echo "No frontend service found running on port $LOCAL_FRONTEND_PORT." 19 + # Fallback to port-based kill using variables from .env.sh
  20 + pids=$(lsof -t -i:$LOCAL_BACKEND_PORT -i:$LOCAL_FRONTEND_PORT)
  21 + if [ -n "$pids" ]; then
  22 + kill -9 $pids
  23 + echo "Killed PIDs on ports $LOCAL_BACKEND_PORT and $LOCAL_FRONTEND_PORT: $pids"
  24 + else
  25 + echo "No processes found on ports $LOCAL_BACKEND_PORT/$LOCAL_FRONTEND_PORT"
  26 + fi
39 fi 27 fi
40 -  
41 -echo "=================================================="  
42 -echo "All Z-Image services stopped."