-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdeploy.sh.example
More file actions
145 lines (114 loc) · 3.78 KB
/
Copy pathdeploy.sh.example
File metadata and controls
145 lines (114 loc) · 3.78 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
#!/bin/bash
# 此脚本为示例部署脚本,请拷贝为 deploy.sh 并根据实际情况修改后使用
# 请勿提交实际的 deploy.sh 文件到版本控制或泄露敏感信息
set -e
echo "[*] 开始部署!"
# ===== 配置 =====
# 前后端端口配置
FRONTEND_PORT=3500
BACKEND_PORT=8500
# 程序配置
PROGRAM_CMD="/var/www/BeikeStartups/BeikeStartups/backend/BeikeStartups" # 此行按需修改
FRONTEND_CMD="pnpm start -p $FRONTEND_PORT"
BACKEND_DIR="backend"
FRONTEND_DIR="frontend"
BACKEND_LOG="backend.log"
FRONTEND_LOG="frontend.log"
BACKEND_PID="backend.pid"
FRONTEND_PID="frontend.pid"
# 数据库配置
export DB_HOST="localhost"
export DB_PORT=5432
export DB_USER="your_user" # 此行必须修改
export DB_PASSWORD="your_db_password" # 此行必须修改
export DB_NAME="beikestartups_db"
# 后端配置
export NEXT_PUBLIC_API_URL="https://api.example.com" # 此行必须修改,前端请求的后端地址
export CORS_ORIGIN="https://www.example.com" # 此行必须修改,入站的前端地址
export JWT_SECRET="your_jwt_secret_key" # 此行必须修改
# ===== 校验 =====
# 检查数据库环境变量是否是默认值
if [ "$DB_USER" = "your_user" ] || [ "$DB_PASSWORD" = "your_db_password" ]; then
echo "[!] 数据库配置似乎未修改,请检查脚本的环境变量设置!"
exit 1
fi
if [ "$NEXT_PUBLIC_API_URL" = "https://api.example.com" ]; then
echo "[!] NEXT_PUBLIC_API_URL 似乎未修改,请检查脚本的环境变量设置!"
exit 1
fi
if [ "$CORS_ORIGIN" = "https://www.example.com" ]; then
echo "[!] CORS_ORIGIN 似乎未修改,请检查脚本的环境变量设置!"
exit 1
fi
if [ "$JWT_SECRET" = "your_jwt_secret_key" ]; then
echo "[!] JWT_SECRET 似乎未修改,请检查脚本的环境变量设置!"
exit 1
fi
echo "[*] 后端将在端口 $BACKEND_PORT 上运行,前端将在端口 $FRONTEND_PORT 上运行"
echo ""
# ===== 通用函数 =====
kill_by_pid_file() {
local PID_FILE=$1
local NAME=$2
if [ ! -f "$PID_FILE" ]; then
echo "[*] 未发现 $NAME PID 文件"
return
fi
local PID
PID=$(cat "$PID_FILE")
if [ -n "$PID" ] && kill -0 "$PID" 2>/dev/null; then
echo "[*] 发现 $NAME 进程 PID=$PID,正在终止"
kill "$PID"
sleep 2
kill -9 "$PID" 2>/dev/null || true
else
echo "[*] $NAME PID 文件存在,但进程已不存在"
fi
rm -f "$PID_FILE"
}
# ===== 清理旧进程 =====
kill_by_pid_file "$BACKEND_PID" "backend"
kill_by_pid_file "$FRONTEND_PID" "frontend"
# ===== 启动 backend =====
echo "[*] 构建 backend..."
cd "$BACKEND_DIR"
go version
go env -w GOPROXY=https://goproxy.cn,direct
go mod tidy
go build
export PORT=$BACKEND_PORT
export GIN_MODE="release"
echo "[*] 构建完毕,正在启动 backend..."
nohup $PROGRAM_CMD > "../$BACKEND_LOG" 2>&1 &
echo $! > "../$BACKEND_PID"
cd ..
# ===== 启动 frontend =====
echo "[*] 构建 frontend..."
cd "$FRONTEND_DIR"
pnpm install
pnpm build
echo "[*] 构建完毕,正在启动 frontend..."
nohup $FRONTEND_CMD > "../$FRONTEND_LOG" 2>&1 &
echo $! > "../$FRONTEND_PID"
cd ..
echo "[*] 所有服务启动完成"
echo ""
# ===== 检验 =====
echo "[*] 当前服务器的内存状态:"
free -h
echo "[*] 等待数秒后检查部署状态..."
sleep 5
check_http_status() {
local URL=$1
local NAME=$2
local STATUS
STATUS=$(curl --silent --output /dev/null --write-out "%{http_code}" "$URL" || true)
if [ "$STATUS" = "404" ] || { [ "$STATUS" -ge 200 ] && [ "$STATUS" -lt 400 ]; }; then
echo "[*] $NAME 检查通过!HTTP $STATUS"
else
echo "[!] $NAME 检查失败!HTTP $STATUS"
fi
}
check_http_status "http://localhost:$BACKEND_PORT" "backend"
check_http_status "http://localhost:$FRONTEND_PORT" "frontend"
echo "[*] 部署结束!"