node后端部署原创
# 目录结构
需要上传到服务器的文件如下
├── backend
│ └── server.js //node后端
├── deploy.sh
├── dist //打包产物
│ ├── assets
│ ├── favicon.ico
├── Dockerfile
├── nginx
│ └── default.conf
├── package.json
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
# Dockerfile
# 使用 Node 官方镜像
FROM node:18-alpine
# 设置工作目录
WORKDIR /app
# 拷贝后端文件(假设 server.js 和 package.json 都在当前目录)
COPY backend/server.js package.json ./
# 安装依赖和 pm2
RUN npm config set registry https://registry.npmmirror.com && \
npm install --no-audit --no-fund && \
npm install -g pm2 --no-audit --no-fund
# 开放端口(如果后端监听 3600)
EXPOSE 3600
# 使用 pm2 启动
CMD ["pm2-runtime", "server.js"]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# deploy.sh
#!/bin/bash
set -e
PROJECT_NAME=sha1-checker
echo "🔄 停止并删除旧容器..."
sudo docker stop $PROJECT_NAME || true
sudo docker rm $PROJECT_NAME || true
echo "🔧 构建镜像..."
sudo docker build -t $PROJECT_NAME .
echo "🚀 启动容器..."
sudo docker run -d \
--name $PROJECT_NAME \
-p 3600:3600 \
$PROJECT_NAME
echo "✅ 部署完成!访问: https://maven.xiaoying.org.cn/"
# echo "📄 后端日志输出:"
docker logs -f $PROJECT_NAME
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# nginx.conf
server {
listen 443 ssl;
server_name maven.xiaoying.org.cn;
ssl_certificate /etc/nginx/fullchain.cer;
ssl_certificate_key /etc/nginx/xiaoying.org.cn.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 10m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
client_max_body_size 50m;
location / {
root /usr/local/maven/dist;
index index.html;
try_files $uri $uri/ /index.html;
}
location /api/ {
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_pass http://127.0.0.1:3600;
}
}
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
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
# publish.sh
#!/bin/bash
set -e
set -x
# 远程服务器信息
REMOTE_USER="root"
REMOTE_SERVER="服务器IP"
REMOTE_DIR="/usr/local/maven"
NGINX_DIR="/etc/nginx/conf.d"
FILES_TO_COPY="dist backend nginx Dockerfile deploy.sh package.json"
# === 打包并拷贝代码 ===
echo "📦 打包代码..."
rm -f app.tar.gz
tar czf app.tar.gz $FILES_TO_COPY
echo "🚀 拷贝代码到服务器 $REMOTE_SERVER ..."
scp app.tar.gz "$REMOTE_USER@$REMOTE_SERVER:/tmp/app.tar.gz"
# 上传到服务器后删除本地的包
rm -f app.tar.gz
# 远程登录并执行部署
ssh $REMOTE_USER@$REMOTE_SERVER << EOF
set -e
echo "🧹 清理旧文件..."
rm -rf "$REMOTE_DIR"
mkdir -p "$REMOTE_DIR"
tar xzf /tmp/app.tar.gz -C "$REMOTE_DIR"
rm /tmp/app.tar.gz
# 删除旧的nginx配置
cd $NGINX_DIR
rm -rf sha1Checker.conf
echo "拷贝 nginx 配置..."
cp $REMOTE_DIR/nginx/default.conf $NGINX_DIR/sha1Checker.conf
#重启nginx
systemctl restart nginx
echo "🎉 前端部署完成,开始部署后端!"
echo "Checking for deploy.sh..."
if [ -f "$REMOTE_DIR/deploy.sh" ]; then
echo "deploy.sh found."
cd $REMOTE_DIR
chmod +x deploy.sh
./deploy.sh
else
echo "deploy.sh not found."
fi
EOF
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
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
# 部署
打开Git Bash ,在项目根目录下执行
./publish.sh
1
- 01
- Java文件转换为Velocity模板 原创04-06
- 02
- jFlash使用 原创03-24
- 03
- 中央仓库上传指南 原创03-23
- 04
- 模板生成工具 原创02-18
- 05
- RTC实时时钟 原创02-12