Linux 服务器 PM2 部署 Nest.js 项目指南
Feb 06, 2025
本文采用PM2管理服务器进程实现部署,为一种方案选择,更推荐Docker容器化部署,降低服务器负担,参考可见👉:Github Actions 自动部署博客前后端记录
服务器部署
环境预配置
系统更新
bashsudo 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. 项目构建
shpnpm run build
将生成的 /dist
目录与 package.json
上传至服务器同级目录
2. 生产依赖安装
shpnpm install
3. 数据库服务配置
docker-compose.yml
示例:
yamlversion: "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:
服务启动:
shdocker compose up -d
4. 应用进程托管
shnpm 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 |
安全建议
- MySQL 生产环境应:
- 禁止root远程访问
- 使用专用应用账号
- 启用SSL加密连接
- Adminer 管理界面建议:
- 配置访问白名单
- 启用HTTPS加密
- 定期执行
pm2 save
持久化进程列表
NestJS问题小记
Q1、部署后数据无法动态更新
场景:部署上线后,数据库更新,服务端组件接口获取的数据不会动态更新,同接口在客户端组件可以正常获取,推测为服务端组件问题
处理方法:数据库更新后重新部署下Next前端