【问题标题】:How to make PM2 start Angular Universal?如何让 PM2 启动 Angular Universal?
【发布时间】:2020-02-21 02:43:36
【问题描述】:

我将 Angular Universal 应用部署到生产服务器。我用 PM2 运行它,它可以工作。但是,它不运行应用程序的通用端。当我查看网页的页面源时,我看不到内容,而是 app-root 标记。

就好像 PM2 通过执行“ng serve”启动常规 Angular,而不是为 Angular Universal 执行“npm run serve:ssr”。

这是我的 package.json 和脚本的(一部分)。我是否必须将 'npm run serve:ssr' 放在这里的某个地方,以便在我调用 'PM2 start server.js' 时运行此命令?

  "scripts": {
    "ng": "ng",
    "start": "ng serve",
    "build": "ng build",
    "test": "ng test",
    "lint": "ng lint",
    "e2e": "ng e2e",
    "compile:server": "webpack --config webpack.server.config.js --progress --colors",
    "serve:ssr": "node server",
    "build:ssr": "npm run build:client-and-server-bundles && npm run compile:server",
    "build:client-and-server-bundles": "ng build --prod && ng run AppName:server:production --bundleDependencies all"
  }

更新

因为我收到 403 错误,所以我让网络主机将 Apache 的文档根目录设置为浏览器文件夹,因为那是 index.html 所在的位置。这是否可能导致它无法加载应用程序的通用端的问题?因为它现在没有看到服务器文件夹?这是我的文件夹结构的样子:

domains
    - appname.com
        - public_html
            - browser (=> this is the document root)
                - index.html
                - .htaccess
                - other files...
            - server
            - server.js
            - package.json

还有我的 .htaccess 文件:

<IfModule mod_rewrite.c>
    RewriteEngine On

    RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -f [OR]
    RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -d

    RewriteRule ^.*$ - [NC,L]
    RewriteRule ^(.*) /index.html [NC,L]
</IfModule>

【问题讨论】:

    标签: angular pm2 angular-universal


    【解决方案1】:

    一旦你创建了你的包并在你的网络服务器上部署了所有东西,你就可以让 pm2 启动你的 server.js 文件

    这是我们在项目中使用的pm2config.json 文件

    {
      "apps": [
           {
        "name": "universalService",
        "script": "./dist/server.js",
        "env": {
          "NODE_ENV": "",
          "watch": false
        },
        "env_production": {
          "NODE_ENV": "production"
        },
    
    
        }
      ]
    }
    

    【讨论】:

    • 我确实使用 pm2 启动了 server.js 文件,但是它没有显示页面源中的内容。也很奇怪,当我停止 pm2、清空缓存或在 cognito 浏览器中打开网站时,它仍然可以工作......这怎么可能?它是否仍然缓存在某个地方?
    • 我认为这是因为我认为您将流量重定向到角度通用的规则不起作用。上面的答案只是开始通用使用pm2,但是你需要用适当的规则配置Apache
    • 我在我的问题中添加了我的 .htaccess 重定向。我知道这很有效,因为它在我刷新页面时修复了 404。我让我的网络主机配置了 httpd.conf 文件,因为我不是服务器上的 root 用户。他们在运行我的应用程序的端口 4000 上添加了一个代理,并将文档根目录设置为浏览器文件夹。如果您有 Apache 配置,能否分享一下?
    猜你喜欢
    • 1970-01-01
    • 2017-04-05
    • 2018-04-17
    • 2019-10-16
    • 1970-01-01
    • 2018-12-03
    • 2020-01-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多