Linux 服务器 PM2 部署 Nest.js 项目指南

Feb 06, 2025

#Nest.js

本文采用PM2管理服务器进程实现部署,为一种方案选择,更推荐Docker容器化部署,降低服务器负担,参考可见👉:Github Actions 自动部署博客前后端记录

服务器部署

环境预配置

系统更新

bash
sudo apt update && sudo apt upgrade -y

核心工具链部署

Node.js 环境

sudo apt install -y nodejs npm

验证安装

node -v && npm -v

PNPM 包管理器

npm install -g pnpm

验证安装

pnpm -v

NVM 版本管理

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.4/install.sh | bash

环境生效

source ~/.bashrc  # 或重新打开终端

Docker Compose 插件

sudo apt install -y docker-compose-plugin

验证安装

docker compose version

PM2 进程管理

npm install -g pm2

验证安装

pm2 -v

可视化运维面板(1panel

sh
# 最新安装命令请参考官方文档: curl -sSL https://resource.fit2cloud.com/1panel/package/quick_start.sh -o quick_start.sh && sudo bash quick_start.sh

访问地址:http://your-server-ip:26734/fc7d79b321


NestJS 项目部署

前置要求

  • Node.js
  • PNPM
  • Docker Compose
  • PM2

部署流程

1. 项目构建

sh
pnpm run build

将生成的 /dist 目录与 package.json 上传至服务器同级目录

2. 生产依赖安装

sh
pnpm install

3. 数据库服务配置

docker-compose.yml 示例:

yaml
version: "3.8" services: mysql: image: mysql:8 command: --default-authentication-plugin=mysql_native_password restart: unless-stopped environment: MYSQL_ROOT_PASSWORD: your_secure_password MYSQL_DATABASE: app_db ports: - 3307:3306 volumes: - mysql_data:/var/lib/mysql adminer: image: adminer restart: unless-stopped ports: - 9090:8080 volumes: mysql_data:

服务启动

sh
docker compose up -d

4. 应用进程托管

sh
npm install cross-env -g pm2 start --name NestApp "cross-env NODE_ENV=production node dist/src/main"

进程管理命令

功能命令
查看进程列表pm2 list
查看日志pm2 logs NestApp
重启应用pm2 restart NestApp
停止应用pm2 stop NestApp
删除应用pm2 delete NestApp

安全建议

  1. MySQL 生产环境应:
    • 禁止root远程访问
    • 使用专用应用账号
    • 启用SSL加密连接
  2. Adminer 管理界面建议:
    • 配置访问白名单
    • 启用HTTPS加密
  3. 定期执行 pm2 save 持久化进程列表

NestJS问题小记

Q1、部署后数据无法动态更新

场景:部署上线后,数据库更新,服务端组件接口获取的数据不会动态更新,同接口在客户端组件可以正常获取,推测为服务端组件问题

处理方法:数据库更新后重新部署下Next前端

目录