-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathpublish.sh
More file actions
123 lines (107 loc) · 3.23 KB
/
Copy pathpublish.sh
File metadata and controls
123 lines (107 loc) · 3.23 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
#!/bin/bash
# 默认参数(测试环境)
REMOTE_PATH="/www/wwwroot/backend/node_service"
REMOTE_USER="root" # 测试环境用户
REMOTE_HOST="8.130.142.163" # 测试环境主机
REMOTE_PORT="22" # 测试环境端口
function show_help {
echo "Usage: publish.sh [options]"
echo
echo "Options:"
echo " -r, --remote-path 远程服务器目标路径 (default: '/www/wwwroot/backend/node_service')"
echo " -u, --remote-user 远程服务器用户名 (default: 'root')"
echo " -h, --remote-host 远程服务器地址 (default: '8.130.142.163')"
echo " -P, --remote-port 远程服务器端口 (default: '22')"
echo " -e, --env 部署环境 (test/online, default: 'test')"
echo " --help 显示帮助信息"
}
# 解析命令行参数
while [[ "$#" -gt 0 ]]; do
case $1 in
-r | --remote-path)
REMOTE_PATH="$2"
shift
;;
-u | --remote-user)
REMOTE_USER="$2"
shift
;;
-h | --remote-host)
REMOTE_HOST="$2"
shift
;;
-P | --remote-port)
REMOTE_PORT="$2"
shift
;;
-e | --env)
if [[ "$2" == "online" ]]; then
REMOTE_USER="root" # 生产环境用户
REMOTE_HOST="8.130.142.163" # 生产环境主机
REMOTE_PORT="22" # 生产环境端口
elif [[ "$2" == "test" ]]; then
REMOTE_USER="root" # 测试环境用户
REMOTE_HOST="8.130.142.163" # 测试环境主机
REMOTE_PORT="22" # 测试环境端口
else
echo "Unknown environment: $2"
show_help
exit 1
fi
shift
;;
--help)
show_help
exit 0
;;
*)
echo "Unknown parameter passed: $1"
show_help
exit 1
;;
esac
shift
done
# 直接上传项目文件到远程服务器
echo "Uploading project files to remote server $REMOTE_USER@$REMOTE_HOST:$REMOTE_PATH"
# 创建临时压缩包
TEMP_PACKAGE="temp_deploy.tar.gz"
echo "Creating temporary package..."
tar --exclude='node_modules' --exclude='.git' --exclude='*.log' --exclude='temp_deploy.tar.gz' -czf $TEMP_PACKAGE .
# 上传压缩包到远程服务器
echo "Uploading package to remote server..."
scp -P $REMOTE_PORT $TEMP_PACKAGE $REMOTE_USER@$REMOTE_HOST:/tmp/
if [ $? -ne 0 ]; then
echo "Failed to upload files"
rm -f $TEMP_PACKAGE
exit 1
fi
echo "Files uploaded successfully"
# 连接远程服务器解压文件、安装依赖并启动服务
echo "Connecting to remote server to extract files, install dependencies and start service"
ssh $REMOTE_USER@$REMOTE_HOST -p $REMOTE_PORT "
# 备份现有文件(如果存在)
if [ -d '$REMOTE_PATH' ]; then
echo 'Backing up existing files...'
mv $REMOTE_PATH ${REMOTE_PATH}_backup_\$(date +%Y%m%d_%H%M%S)
fi
# 创建目标目录
mkdir -p $REMOTE_PATH &&
cd $REMOTE_PATH &&
# 解压新文件
echo 'Extracting files...' &&
tar -xzf /tmp/$TEMP_PACKAGE &&
# 清理临时文件
rm -f /tmp/$TEMP_PACKAGE &&
# 安装依赖
echo 'Installing dependencies...' &&
npm i &&
echo 'Dependencies installed successfully' &&
# 启动服务
echo 'Starting service with PM2...' &&
pm2 restart node_service || pm2 start npm -- run start --name node_service &&
echo 'Service started successfully'
"
# 清理本地临时文件
rm -f $TEMP_PACKAGE
echo "Deployment completed successfully"