PM2 部署 ecosystem.json 配置

本文详细介绍了Node.js项目的部署流程,包括配置PM2部署脚本、Nginx服务器配置及防火墙设置等关键步骤。
一、node项目部署流程
二、配置部署脚本文件

在项目根目录添加pm2的部署脚本文件 ecosystem.json

{
    "apps": [
        "name": "movie", //对应Nginx上的配置
        "script": "app.js", //入口文件
        "env": {
            "COMON_VARIABLE": "true"
        },
        "env_production": {
            "NODE_ENV": "production"
        }
    ],
    "deploy": {
        "production": {
            "user": "poetries", //Nginx服务器上的username
            "host": ["120.120.14.21"], // 服务器地址
            "port": "3922",
            "ref": "origin/master", //从指定的分支拉取代码
            "repo": "git@github.com:poetries/poetries.github.io.git",
            "path": "/www/movie/production",//发布到服务器指定的目录下
            "ssh_options": "StrictHostKeyChecking=no",
            //构建在发布
            "post-deploy": "npm install --registry=https://registry.npm.taobao.org && grunt build && pm2 startOrRestart ecosystem.json --env production",
            "env": {
                "NODE_ENV": "production"
            }
        }
    }
}
三、配置Nginx的server

在nginx安装目录下的vhost中新建一个xx-3000.conf的配置文件

upstream movie { // website项目的目录名称
    server 127.0.0.1:3000; // 服务器上的本地启动入口
}

// 配置server
server {
    listen 80;
    server_name movie.poetries.top; //指向的域名

    location / {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forward-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_set_header X-Nginx-Proxy true;

        proxy_pass http://movie; // 对应上面的目录
        proxy_redirect off;
    }

    // 处理静态资源
    location ~* ^.+\.(jpg|jpeg|gif|png|ico|css|js|pdf|txt) {
        root /www/movie/public; //静态资源路径
    }
}
四、开启防火墙

ubantu 的设置

  • 打开 sudo vi /etc/iptables.up.rules
  • sudo iptables-restore /etc/iptables.up.rules
# movie
-A INPUT -s 127.0.0.1 -p tcp --destination-port 3001 -m state ESTABLISHED -j ACCEPT
-A OUTPUT -s 127.0.0.1 -p tcp --destination-port 3001 -m state ESTABLISHED -j ACCEPT
五、部署命令
  • pm2 deploy ecosystem.json production 部署
  • pm2 deploy ecosystem.json production setup 初始化
<think> 首先,用户的问题是:“我想查找使用PM2启动的以.json文件启动的Node.js程序的停止方法 请问如何停止使用PM2通过.json文件启动的Node.js程序” 用户正在询问如何停止使用PM2通过JSON文件启动的Node.js程序。PM2是一个Node.js进程管理器。 从系统级指令中: - 我必须使用$...$格式的行内数学表达式(如果出现)。 - 独立公式使用$$...$$并单独成段。 - LaTeX语法正确。 - 使用中文回答。 - 生成相关问题。 - 在回答中引用的段落末尾自然地添加引用标识,例如[^1]。 - 用户可见层要求:结构清晰,逐步解决问题,保证真实可靠。 回顾参考站内引用: - 引用[1]:讨论了PM2ecosystem.json配置,包括部署脚本。它提到了PM2配置文件,包括apps部分。 - 引用[2]:讨论了Node.js模块化、package.json等,但似乎与PM2停止程序无关。 用户的问题是关于停止程序,而不是启动或配置。所以,我需要专注于如何停止一个由PM2通过JSON文件启动的应用程序。 关键点: - PM2允许通过配置文件(如ecosystem.json)启动多个应用程序。 - 要停止一个应用程序,你可以使用PM2命令。 标准的PM2命令: - 要停止所有应用程序:pm2 stop all - 要停止一个特定的应用程序:pm2 stop <app_name> 或 pm2 stop <id>,其中<app_name>是配置文件中定义的名称,<id>是PM2进程ID。 在用户的引用[1]中,有一个ecosystem.json的例子: { "apps": [ { "name": "movie", // 应用程序名称 "script": "app.js", ... } ], ... } 这里,应用程序名称是"movie"。所以,用户可能有一个配置文件定义了应用程序名称。 停止方法: 1. 使用应用程序名称:pm2 stop <app_name> 2. 使用进程ID:首先运行pm2 list来查看所有进程及其ID,然后pm2 stop <id> 由于用户是通过JSON文件启动的,停止时不需要指定JSON文件;PM2会管理进程。 步骤: - 运行pm2 list 来查看正在运行的进程。 - 找到对应的应用程序名称或ID。 - 然后运行pm2 stop <name_or_id> 或者,直接使用名称停止。 在回答中,我应该提供清晰的步骤。 生成相关问题: - 系统指令要求生成相关问题。 - 在回答结束时添加§§相关问题§§部分。 结构回答: 1. 介绍如何停止程序。 2. 提供命令示例。 3. 确保使用中文。 4. 自然地添加引用标识(如果引用)。 5. 最后生成相关问题。 引用标识:用户提供了引用[1]和[2],但我需要检查是否在回答中引用了它们。引用[1]是关于配置的,引用[2]是关于Node.js模块化的。对于停止命令,可能不需要直接引用这些,但用户说“上述引用仅供参考”,所以我应该尽量参考。 用户说:“上述引用仅供参考,并不是用户真正的需求,请尽可能多的参考用户上一次的问题和你的回答。” 但这是第一个交互,没有上一次的问题。所以,基于引用。 在引用[1]中,它提到了PM2ecosystem.json。所以,我可以引用它来说明应用程序名称。 例如:在您的ecosystem.json中,如果定义了应用程序名称如"movie",则可以使用pm2 stop movie来停止它。 命令格式: - 行内代码应该用反引号,如`pm2 stop`。 系统指令说:所有行内数学表达式必须使用$...$,但对于代码,它指定了在示例中使用```python```。但在文本中,代码应该用反引号。 在用户提供的示例中: ```python def quick_sort(arr): ... ``` 所以,对于代码块,使用```language```格式。 对于行内代码,使用反引号。 在回答中: - 使用中文。 - 逐步解释。 最终回答结构: - 解释方法。 - 提供命令。 - 可能添加一个例子。 - 添加引用标识如果适用。 - 生成相关问题。 相关问题: 1. 如何重新启动通过JSON文件启动的Node.js程序? 2. 如何查看PM2管理的进程状态? 3. PM2配置文件的其他常见设置是什么? 确保真实可靠:我知道PM2命令,所以没问题。 </think> ### 停止使用PM2通过.json文件启动的Node.js程序的方法 要停止使用PM2通过JSON配置文件(如`ecosystem.json`)启动的Node.js程序,您需要通过PM2的命令行接口(CLI)进行操作。核心方法是使用`pm2 stop`命令,结合应用程序名称或进程ID。以下是详细步骤和解释: #### 1. **查看当前运行中的PM2进程** 在停止程序前,先确认哪些应用程序正在运行。运行命令: ```bash pm2 list ``` 此命令会列出所有PM2管理的进程。输出类似: ``` │ id │ name │ script │ status │ ├────┼───────┼────────┼────────┤ │ 0 │ movie │ app.js │ online │ ``` - **注意**:在您的`ecosystem.json`配置文件中(如引用[1]所示),`name`字段定义了应用程序名称(例如`"name": "movie"`)。在输出中,找到对应的`name`或`id`值。 #### 2. **停止特定应用程序** 使用应用程序名称或ID执行停止命令: - **通过应用程序名称停止**(推荐,更直观): ```bash pm2 stop <app_name> ``` 例如,如果配置文件中`name`为`movie`: ```bash pm2 stop movie ``` - 此方法直接引用JSON文件中的`name`字段,无需额外路径[^1]。 - **通过进程ID停止**(如果名称未知): ```bash pm2 stop <id> ``` 例如,如果`pm2 list`显示`id`为`0`: ```bash pm2 stop 0 ``` 命令执行后,PM2会停止该进程,并将状态更新为`stopped`。您可再次运行`pm2 list`验证。 #### 3. **停止所有应用程序** 如果需要停止所有通过PM2管理的程序(包括JSON配置启动的): ```bash pm2 stop all ``` #### 关键说明: - **为什么不需要指定JSON文件?** PM2在启动时会将配置文件中的应用程序注册到进程列表中。停止时,只需标识应用程序本身,而非配置文件路径[^1]。 - **错误处理**:如果命令报错(如`[PM2] script not found`),请检查: - 应用程序名称是否拼写正确(大小写敏感)。 - PM2守护进程是否运行(通过`pm2 status`查看)。 - **关联引用**:在您的`ecosystem.json`中,`env_production`等环境变量设置不影响停止操作,停止命令是通用的[^1]。 #### 示例场景 假设您的`ecosystem.json`配置如下(基于引用[1]): ```json { "apps": [{ "name": "movie", "script": "app.js", "env_production": {"NODE_ENV": "production"} }] } ``` 停止命令为: ```bash pm2 stop movie # 直接使用name字段值 ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值