如何在Angular-Cli中运行PM2?- Angular2

13

如何使用pm2运行ng serve --prod

我在DigitalOcean上使用angular-cli中的Angular2。我已尝试通过在ng build --prod之后的dist /文件夹中测试http-server -p 4200 -d false

当我从域https://www.unibookkh.com/请求时,我收到404错误:(我已经设置了nginx监听端口4200。

enter image description here

我使用http-server进行测试,因为我认为也许可以通过此命令运行pm2 pm2 start my_app_process.json其中

my_app_process.json

{
    "apps": [
        {
            "name": "angular",
            "cwd": "~/angular2",
            "args": "-p 4200 -d false",
            "script": "/usr/bin/http-server"
        }
    ]
}

有更好的想法如何在PM2中使其工作吗?

7个回答

31

执行以下命令即可生效:

在运行

ng build --prod

之后进入dist/文件夹并输入以下命令

pm2 start /usr/bin/http-server -- -p 8080 -d false

更新

我已经找到了一个更好的解决方案:

运行which ng命令,它将打印出/usr/bin/ng,然后输入下面的命令

pm2 start /usr/bin/ng -- serve --prod


1
我尝试了你的方法来运行我的应用程序,但在pm2日志文件中出现了错误。SyntaxError: missing ) after argument list - Edward
4
你可以使用pm2 start $(which ng)来启动。 - Kevin Suttle
它的功能完美,但使用了大量内存(我知道这不是问题,但一个不到100行的简单应用程序却使用了超过400MB的内存)。当然,这是Angular应用程序的问题。我认为最好的方法是为生产构建应用程序,并创建一个简单的sh文件来运行它。 - FarukT
我尝试过了,它显示实例状态已启动,但它没有提供服务。 - Reza

15

但是,如果你需要在预生产环境中开发使用ng serve命令,你可以在项目的根目录下创建一个start.sh文件。

#!/bin/bash
ng serve --host xxx.xxx.xxx.xxx --port xxxx

像这样使用pm2:

pm2 start start.sh --name my-pretty-dev-app-run-on-preprod

;)


@Julien Moulin,除了使用.sh文件之外,还有其他方法吗?我们能否使用现有的.json文件来实现这个功能? - Prasad Shinde
你的回答节省了很多时间。 - ArrchanaMohan

6

使用最近版本的PM2

pm2 ecosystem

更新操作

以下是ecosystem.config.js文件

module.exports = {
  apps : [{
    name: 'demoapp',
    script: 'node_modules/@angular/cli/bin/ng',
    args: 'serve --host [yourip] --disable-host-check',
    instances: 1,
    autorestart: true,
    watch: false,
    max_memory_restart: '1G',
    env: {
      NODE_ENV: 'development'
    },
    env_production: {
      NODE_ENV: 'production'
    }
  }],

  deploy : {
  }
};

最终

运行 pm2 start & pm2 save 命令


很棒的答案,值得更多的赞 - 适用于最新的pm2版本 - 尽管请注意我在答案中所做的微调。 - danday74
我有完全不同的内容,所以我应该删除它们并将您的代码放在那里吗?我应该如何修改应用程序名称或 [您的 IP]? - Hasani
@user3486308,是的,您需要更新[应用程序名称]和[IP],最重要的是脚本和参数,您可以将它们添加到当前配置中。如果有任何问题,请通过pastebin共享配置文件。 - Bheru Lal Lohar

1
以下是我在 Angular 项目中使用的示例: pm2 start "ng serve --host 0.0.0.0"

0

这个方法对我来说可行。与其他答案的主要区别在于,因为我是从根目录运行pm2,所以必须使用cwd选项:

// pm2 start
// https://pm2.io/doc/en/runtime/guide/ecosystem-file
// https://pm2.io/doc/en/runtime/reference/ecosystem-file

module.exports = {
  apps: [{
    name: 'fe',
    script: 'node_modules/@angular/cli/bin/ng',
    args: 'serve -o',
    cwd: 'biblical-hebrew-fe',
    max_restarts: 5,
    min_uptime: 3000,
    exec_mode: 'fork',
    instances: 1, // default
    autorestart: true, // default
    watch: false, // default
    max_memory_restart: '1G', // default
    env: {
      NODE_ENV: 'development'
    },
    env_production: {
      NODE_ENV: 'production'
    }
  }],

  deploy: {
    production: {
      user: 'node',
      host: '212.83.163.1',
      ref: 'origin/master',
      repo: 'git@github.com:repo.git',
      path: '/var/www/production',
      'post-deploy': 'npm install && pm2 reload ecosystem.config.js --env production'
    }
  }
}

-1

毕竟,ng是一个节点模块。

apps:
- name: ngserve
  script: 'node_modules/@angular/cli/bin/ng'
  args: 'serve --progress=false --live-reload=false --disable-host-check=true'
  watch: false
  log_date_format: YYYY-MM-DD HH:mm
  merge_logs: true
  out_file: "/dev/null"
  error_file: "/dev/null"

-2
如果您只想提供静态文件,pm2 中已经有一个新的命令了: $ pm2 expose [path] [port]

这个答案实际上与如何使用pm2提供angular2应用程序没有任何关系。 - renab

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接