编程随笔 编程随笔
  • 前端
  • 后端
  • 嵌入式
  • 星球项目
  • 开源项目
  • 海康AGV
  • 四向车
  • 工具类
  • 项目仓库

    • 部署仓库 (opens new window)
    • 代码仓库 (opens new window)
  • vuepress插件

    • 自动生成导航栏与侧边栏 (opens new window)
    • 评论系统 (opens new window)
    • 全文搜索 (opens new window)
    • 选项卡 (opens new window)
    • 自动生成sitemap (opens new window)
  • 自主开发插件

    • 批量操作frontmatter (opens new window)
    • 链接美化 (opens new window)
    • 折叠代码块 (opens new window)
    • 复制代码块 (opens new window)

liyao52033

走运时,要想到倒霉,不要得意得过了头;倒霉时,要想到走运,不必垂头丧气。心态始终保持平衡,情绪始终保持稳定,此亦长寿之道
  • 前端
  • 后端
  • 嵌入式
  • 星球项目
  • 开源项目
  • 海康AGV
  • 四向车
  • 工具类
  • 项目仓库

    • 部署仓库 (opens new window)
    • 代码仓库 (opens new window)
  • vuepress插件

    • 自动生成导航栏与侧边栏 (opens new window)
    • 评论系统 (opens new window)
    • 全文搜索 (opens new window)
    • 选项卡 (opens new window)
    • 自动生成sitemap (opens new window)
  • 自主开发插件

    • 批量操作frontmatter (opens new window)
    • 链接美化 (opens new window)
    • 折叠代码块 (opens new window)
    • 复制代码块 (opens new window)
  • 知识点

    • npm 和 yarn
    • 登录后重定向到原先路由
    • patch-package使用
    • TortosseGit的ssh配置
    • nginx常用配置
    • node后端部署
      • 目录结构
      • Dockerfile
      • deploy.sh
      • nginx.conf
      • publish.sh
      • 部署
    • mounted阶段获取不到dom的原因及解决方法
  • 代码调试

  • vue2

  • vue3

  • react

  • typescript

  • 前端
  • 知识点
华总
2025-04-10
0
0
目录

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

# 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

# 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

# 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

# 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

# 部署

打开Git Bash ,在项目根目录下执行

./publish.sh
1
nginx常用配置
mounted阶段获取不到dom的原因及解决方法

← nginx常用配置 mounted阶段获取不到dom的原因及解决方法→

最近更新
01
Java文件转换为Velocity模板 原创
04-06
02
jFlash使用 原创
03-24
03
中央仓库上传指南 原创
03-23
04
模板生成工具 原创
02-18
05
RTC实时时钟 原创
02-12
更多文章>
Copyright © 2023-2025 liyao52033  All Rights Reserved
备案号:鄂ICP备2023023964号-1    
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式