Skip to content

Commit d304da1

Browse files
committed
feat(deploy): 添加简化版服务器端部署脚本
新增 scripts/deploy-quick.sh,不用 pnpm workspace,直接复制文件避免依赖问题 使用方法: ssh root@server "cd /root/qzt && bash scripts/deploy-quick.sh backend"
1 parent 92bda2b commit d304da1

1 file changed

Lines changed: 239 additions & 0 deletions

File tree

scripts/deploy-quick.sh

Lines changed: 239 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,239 @@
1+
#!/bin/bash
2+
# ============================================================
3+
# 服务器端快速部署脚本 - 简化版
4+
# 使用方法: cd /root/qzt && bash scripts/deploy-quick.sh [backend|frontend|website|all]
5+
# ============================================================
6+
7+
set -e
8+
9+
# 颜色定义
10+
RED='\033[0;31m'
11+
GREEN='\033[0;32m'
12+
YELLOW='\033[1;33m'
13+
CYAN='\033[0;36m'
14+
NC='\033[0m'
15+
16+
PROJECT_DIR="/var/www/qzt"
17+
BACKUP_DIR="/var/www/qzt/backups"
18+
19+
show_usage() {
20+
echo -e "${CYAN}========================================${NC}"
21+
echo -e "${CYAN} 企智通快速部署脚本${NC}"
22+
echo -e "${CYAN}========================================${NC}"
23+
echo ""
24+
echo "用法: $0 [选项]"
25+
echo ""
26+
echo "选项:"
27+
echo " backend 部署后端服务"
28+
echo " frontend 部署前端服务"
29+
echo " website 部署网站服务"
30+
echo " all 部署所有服务"
31+
echo ""
32+
exit 1
33+
}
34+
35+
if [ $# -eq 0 ]; then
36+
show_usage
37+
fi
38+
39+
# 部署后端
40+
deploy_backend() {
41+
echo -e "${GREEN}========================================${NC}"
42+
echo -e "${GREEN}部署后端服务...${NC}"
43+
echo -e "${GREEN}========================================${NC}"
44+
45+
# 构建 shared-types
46+
echo -e "${YELLOW}1. 构建共享类型...${NC}"
47+
cd packages/shared-types
48+
pnpm run build
49+
cd ../..
50+
51+
# 构建 backend
52+
echo -e "${YELLOW}2. 构建后端...${NC}"
53+
cd backend
54+
pnpm install
55+
pnpm prisma generate
56+
pnpm run build
57+
cd ..
58+
59+
# 创建部署目录
60+
mkdir -p $PROJECT_DIR/backend
61+
62+
# 备份
63+
if [ -d "$PROJECT_DIR/backend/dist" ]; then
64+
BACKUP_FILE="$BACKUP_DIR/backend-backup-$(date +%Y%m%d_%H%M%S).tar.gz"
65+
mkdir -p $BACKUP_DIR
66+
tar -czf "$BACKUP_FILE" -C $PROJECT_DIR/backend dist 2>/dev/null || true
67+
echo -e "${YELLOW}备份已创建: $BACKUP_FILE${NC}"
68+
fi
69+
70+
# 清理并复制(不用 pnpm,直接复制文件)
71+
echo -e "${YELLOW}3. 部署文件...${NC}"
72+
rm -rf $PROJECT_DIR/backend/dist
73+
cp -r backend/dist $PROJECT_DIR/backend/
74+
cp backend/package.json $PROJECT_DIR/backend/
75+
cp -r backend/prisma $PROJECT_DIR/backend/
76+
77+
# 复制 node_modules(关键!)
78+
mkdir -p $PROJECT_DIR/backend/node_modules/@qzt
79+
cp -r packages/shared-types/dist $PROJECT_DIR/backend/node_modules/@qzt/shared-types
80+
cp -r backend/node_modules/@prisma $PROJECT_DIR/backend/node_modules/
81+
cp -r backend/node_modules/@nestjs $PROJECT_DIR/backend/node_modules/
82+
cp -r backend/node_modules/@swc $PROJECT_DIR/backend/node_modules/
83+
84+
# 生成 Prisma Client
85+
cd $PROJECT_DIR/backend
86+
pnpm prisma generate
87+
88+
# 重启
89+
pm2 restart qzt-backend 2>/dev/null || \
90+
pm2 start $PROJECT_DIR/backend/dist/main.js --name qzt-backend
91+
pm2 save
92+
93+
echo -e "${GREEN}后端部署完成!${NC}"
94+
}
95+
96+
# 部署前端
97+
deploy_frontend() {
98+
echo -e "${GREEN}========================================${NC}"
99+
echo -e "${GREEN}部署前端服务...${NC}"
100+
echo -e "${GREEN}========================================${NC}"
101+
102+
# 构建
103+
echo -e "${YELLOW}1. 构建前端...${NC}"
104+
cd frontend
105+
pnpm run generate:api
106+
pnpm run build
107+
cd ..
108+
109+
# 备份
110+
if [ -f "$PROJECT_DIR/frontend/index.html" ]; then
111+
BACKUP_FILE="$BACKUP_DIR/frontend-backup-$(date +%Y%m%d_%H%M%S).tar.gz"
112+
mkdir -p $BACKUP_DIR
113+
tar -czf "$BACKUP_FILE" -C $PROJECT_DIR/frontend . 2>/dev/null || true
114+
echo -e "${YELLOW}备份已创建: $BACKUP_FILE${NC}"
115+
fi
116+
117+
# 部署
118+
echo -e "${YELLOW}2. 部署文件...${NC}"
119+
rm -rf $PROJECT_DIR/frontend/*
120+
cp -r frontend/dist/* $PROJECT_DIR/frontend/
121+
122+
# 设置权限
123+
chown -R www-data:www-data $PROJECT_DIR/frontend
124+
chmod -R 755 $PROJECT_DIR/frontend
125+
126+
# 重载 nginx
127+
nginx -t && nginx -s reload
128+
129+
echo -e "${GREEN}前端部署完成!${NC}"
130+
}
131+
132+
# 部署网站
133+
deploy_website() {
134+
echo -e "${GREEN}========================================${NC}"
135+
echo -e "${GREEN}部署网站服务...${NC}"
136+
echo -e "${GREEN}========================================${NC}"
137+
138+
# 构建
139+
echo -e "${YELLOW}1. 构建网站...${NC}"
140+
cd website
141+
pnpm install
142+
pnpm run build
143+
cd ..
144+
145+
# 备份
146+
if [ -d "$PROJECT_DIR/website/.next" ]; then
147+
BACKUP_FILE="$BACKUP_DIR/website-backup-$(date +%Y%m%d_%H%M%S).tar.gz"
148+
mkdir -p $BACKUP_DIR
149+
tar -czf "$BACKUP_FILE" -C $PROJECT_DIR/website . 2>/dev/null || true
150+
echo -e "${YELLOW}备份已创建: $BACKUP_FILE${NC}"
151+
fi
152+
153+
# 部署
154+
echo -e "${YELLOW}2. 部署文件...${NC}"
155+
rm -rf $PROJECT_DIR/website/.next
156+
rm -rf $PROJECT_DIR/website/public
157+
mkdir -p $PROJECT_DIR/website/.next
158+
mkdir -p $PROJECT_DIR/website/public
159+
160+
if [ -d "website/.next/standalone" ]; then
161+
cp -r website/.next/standalone/* $PROJECT_DIR/website/
162+
else
163+
cp -r website/.next/* $PROJECT_DIR/website/.next/
164+
fi
165+
cp -r website/public/* $PROJECT_DIR/website/public/
166+
167+
# 创建 server.js
168+
if [ ! -f "$PROJECT_DIR/website/server.js" ]; then
169+
cat > $PROJECT_DIR/website/server.js << 'EOF'
170+
const { createServer } = require('http')
171+
const { parse } = require('url')
172+
const next = require('./next/dist/bin/next')
173+
174+
const dev = false
175+
const hostname = '0.0.0.0'
176+
const port = 5180
177+
178+
const app = next({ dev, hostname, port })
179+
const handle = app.getRequestHandler()
180+
181+
app.prepare().then(() => {
182+
createServer(async (req, res) => {
183+
try {
184+
const parsedUrl = parse(req.url, true)
185+
await handle(req, res, parsedUrl)
186+
} catch (err) {
187+
console.error('Error occurred handling', req.url, err)
188+
res.statusCode = 500
189+
res.end('internal server error')
190+
}
191+
})
192+
.once('error', (err) => {
193+
console.error(err)
194+
process.exit(1)
195+
})
196+
.listen(port, () => {
197+
console.log(\`> Ready on http://\${hostname}:\${port}\`)
198+
})
199+
})
200+
EOF
201+
fi
202+
203+
# 重启
204+
pm2 restart qzt-website 2>/dev/null || \
205+
pm2 start $PROJECT_DIR/website/server.js --name qzt-website
206+
pm2 save
207+
208+
echo -e "${GREEN}网站部署完成!${NC}"
209+
}
210+
211+
# 主逻辑
212+
case "$1" in
213+
backend)
214+
deploy_backend
215+
;;
216+
frontend)
217+
deploy_frontend
218+
;;
219+
website)
220+
deploy_website
221+
;;
222+
all)
223+
deploy_backend
224+
echo ""
225+
deploy_frontend
226+
echo ""
227+
deploy_website
228+
;;
229+
*)
230+
echo -e "${RED}未知选项: $1${NC}"
231+
show_usage
232+
;;
233+
esac
234+
235+
echo ""
236+
echo -e "${GREEN}========================================${NC}"
237+
echo -e "${GREEN} 部署完成!${NC}"
238+
echo -e "${GREEN}========================================${NC}"
239+
echo ""

0 commit comments

Comments
 (0)