Systemd(Linux 系统级守护,最稳定)node

Systemd(Linux 系统级守护,最稳定)

Systemd 是 Linux 系统原生的服务管理器,优先级高于 PM2/Docker,适合对稳定性要求极高的场景(如核心业务):

步骤 1:创建 Systemd 服务文件

bash

运行

复制代码
# 编辑服务文件(名称自定义为 nest-api.service)
sudo vim /etc/systemd/system/nest-api.service
步骤 2:写入以下配置(适配你的项目路径)

ini

复制代码
[Unit]
Description=NestJS API Service  # 服务描述
After=network.target docker.service  # 网络/Docker启动后再启动
Requires=network.target          # 依赖网络

[Service]
Type=simple
User=root                        # 运行用户(建议用非root,如 www)
WorkingDirectory=/home/nestjs-app  # 项目根目录
ExecStart=/usr/local/bin/node /home/nestjs-app/dist/main.js  # 启动命令(node 路径需用 which node 确认)
Restart=always                   # 始终重启(崩溃/退出/服务器重启)
RestartSec=3                     # 重启间隔3秒
Environment=NODE_ENV=production  # 环境变量
StandardOutput=append:/home/nestjs-app/logs/nest-api.log  # 日志输出
StandardError=append:/home/nestjs-app/logs/nest-api.error.log  # 错误日志

[Install]
WantedBy=multi-user.target       # 多用户模式下开机自启
步骤 3:创建日志目录(确保权限)

bash

运行

复制代码
mkdir -p /home/nestjs-app/logs
chmod 755 /home/nestjs-app/logs
步骤 4:启动并设置开机自启

bash

运行

复制代码
# 重新加载 systemd 配置
sudo systemctl daemon-reload

# 启动服务
sudo systemctl start nest-api

# 设置开机自启
sudo systemctl enable nest-api
Systemd 常用管理命令

bash

运行

复制代码
sudo systemctl status nest-api  # 查看服务状态
sudo systemctl restart nest-api # 重启服务
sudo systemctl stop nest-api    # 停止服务
sudo systemctl disable nest-api # 关闭开机自启
journalctl -u nest-api -f      # 实时查看日志

方案 4:Supervisor(通用进程管理,支持所有语言)

Supervisor 是跨语言的进程管理器,适合同时管理多个服务(如 NestJS + Redis + MySQL):

步骤 1:安装 Supervisor

bash

运行

复制代码
# CentOS/RHEL
sudo yum install supervisor -y

# Ubuntu/Debian
sudo apt install supervisor -y
步骤 2:创建配置文件

bash

运行

复制代码
sudo vim /etc/supervisord.d/nest-api.ini
步骤 3:写入配置

ini

复制代码
[program:nest-api]
directory=/home/nestjs-app          ; 项目目录
command=/usr/local/bin/node dist/main.js  ; 启动命令
autostart=true                      ; 开机自启
autorestart=true                    ; 崩溃自动重启
startretries=3                      ; 启动失败重试次数
user=root                           ; 运行用户
redirect_stderr=true                ; 错误日志重定向到stdout
stdout_logfile=/home/nestjs-app/logs/nest-api.log  ; 日志文件
stdout_logfile_maxbytes=10MB        ; 单日志文件大小
stdout_logfile_backups=10           ; 日志备份数
environment=NODE_ENV="production"   ; 环境变量
步骤 4:启动 Supervisor 并加载配置

bash

运行

复制代码
# 启动 Supervisor 服务
sudo systemctl start supervisord
sudo systemctl enable supervisord

# 加载新配置
sudo supervisorctl reread
sudo supervisorctl update

# 启动 NestJS 服务
sudo supervisorctl start nest-api
Supervisor 常用命令

bash

运行

复制代码
sudo supervisorctl status nest-api  # 查看状态
sudo supervisorctl restart nest-api # 重启
sudo supervisorctl stop nest-api    # 停止
sudo supervisorctl tail -f nest-api # 实时日志
相关推荐
无敌糖果3 分钟前
K8S network namespace错误分析
docker·容器·kubernetes
郝开37 分钟前
Docker Compose 模块化多环境配置规范指南:示例搭建Kibana 9.4.2
docker·容器·kibana
运维老郭40 分钟前
Prometheus 监控 K8s 从入门到入坑:工作原理 + 部署实操 + 避坑指南
云原生·容器·kubernetes
虎王物联1 小时前
Docker BuildKit多阶段构建:IoT固件交叉编译流水线实战
运维·物联网·ci/cd·docker·容器·物联网嵌入式
LlmCraft|大模型工程实践1 小时前
14. CI/CD 流水线中集成 Docker:GitHub Actions 自动构建部署
ci/cd·docker·github
10mAh2 小时前
【Docker】磁盘空间被占满怎么清理?——overlay2、容器日志与 Build Cache 排查实战
docker·容器·eureka
xhaxy2 小时前
docker,k8s安装,k8s集群搭建(OS7)
docker·容器·kubernetes
guo_wen_qiang4 小时前
mac中docker desktop服务端开启远程访问
运维·服务器·macos·docker
Sayai6 小时前
Elasticsearch 9 安装验证实战:start-local 一键部署 + Docker 手动安装踩坑指南
大数据·elasticsearch·docker
名字还没想好☜11 小时前
Docker 容器安全加固实战:非 root、只读根文件系统、drop capabilities 与最小攻击面
运维·安全·docker·容器·kubernetes