You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu 16下Node.js应用:基于forever与npm脚本实现开机自启及可控环境运行

解决Ubuntu 16上Node.js应用的Forever常驻与开机自启+根目录启动问题

一、先搞定从根目录通过npm脚本启动应用

你之前从根目录启动失败,核心是npm默认会找当前目录的package.json,所以我们需要明确告诉npm去应用目录执行脚本:

  1. 直接在根目录执行以下命令(替换/path/to/your/node-app为你的实际应用路径):

    npm --prefix /path/to/your/node-app run <你的脚本名>
    

    比如你的package.json里有"start": "node server.js",那命令就是:

    npm --prefix /path/to/your/node-app run start
    
  2. (可选简化)如果不想每次都敲长命令,可以在根目录的~/.bashrc里加个别名:

    alias start-my-app='npm --prefix /path/to/your/node-app run start'
    

    执行source ~/.bashrc生效后,直接在根目录敲start-my-app就能启动应用了。

二、用Forever实现应用常驻运行

首先确保全局安装了forever:

npm install -g forever

方式1:直接用Forever启动应用入口文件(推荐)

从根目录执行,指定应用入口文件路径,还能直接注入环境变量:

forever start -e /path/to/your/node-app/error.log -o /path/to/your/node-app/output.log -c "NODE_ENV=production node" /path/to/your/node-app/server.js

参数说明:

  • -e:指定错误日志存储路径
  • -o:指定正常输出日志存储路径
  • -c:自定义执行命令,这里直接把环境变量写在命令里

停止应用的命令:

forever stop /path/to/your/node-app/server.js

方式2:让Forever调用npm脚本

如果你想复用package.json里的现有脚本逻辑,也可以让forever执行npm命令:

forever start -c "npm --prefix /path/to/your/node-app run start" /path/to/your/node-app

这种方式适合脚本里有复杂逻辑(比如构建+启动)的场景。

三、配置开机自启(Ubuntu 16用Systemd)

Ubuntu 16默认用systemd管理系统服务,我们可以创建一个服务文件,让系统开机时自动拉起forever和你的应用:

  1. 创建服务配置文件:

    sudo nano /etc/systemd/system/my-node-app.service
    
  2. 粘贴以下内容(替换所有/path/to/your/node-app为实际应用路径,your-user为服务器登录用户名):

    [Unit]
    Description=My Node.js App Managed by Forever
    After=network.target
    
    [Service]
    User=your-user
    WorkingDirectory=/path/to/your/node-app
    ExecStart=/usr/local/bin/forever start -c "NODE_ENV=production node" /path/to/your/node-app/server.js
    ExecStop=/usr/local/bin/forever stop /path/to/your/node-app/server.js
    Restart=always
    
    [Install]
    WantedBy=multi-user.target
    

    注意:/usr/local/bin/forever是forever的全局安装路径,不确定的话可以用which forever命令确认。

  3. 启用并启动服务:

    sudo systemctl daemon-reload
    sudo systemctl enable my-node-app.service
    sudo systemctl start my-node-app.service
    
  4. 验证服务状态:

    sudo systemctl status my-node-app.service
    

    如果显示active (running)就说明配置成功了,重启服务器测试下应用是否会自动启动。

四、环境变量的便捷处理

如果你的应用依赖大量环境变量,不想在命令行里逐个写,可以用dotenv包统一管理:

  1. 在应用目录安装dotenv:

    cd /path/to/your/node-app
    npm install dotenv --save
    
  2. 在应用入口文件(比如server.js)的最顶部添加:

    require('dotenv').config()
    
  3. 在应用目录创建.env文件,写入所有环境变量:

    NODE_ENV=production
    DB_HOST=localhost
    DB_PORT=3306
    API_KEY=your-secret-key
    

    这样启动应用时,forever会自动加载这些环境变量,不用再在命令行里手动指定。

内容的提问来源于stack exchange,提问作者Mike Gorski

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 07:17:13