如何将Angular Universal应用部署到Node.js生产服务器?

问题描述 投票:0回答:1

我有一个要与Universal一起使用的Angular 8应用程序,我想将其部署到共享的Web主机生产服务器上。我事先咨询了虚拟主机,他们告诉我可以在共享虚拟主机上托管一个角度通用的Web应用程序。但是,无论我做什么,我都无法使网站正常工作。当我转到该网站时,我不断看到以下消息:“无法访问此网站”

我到目前为止所做的事情:

  1. 使用npm构建项目,运行build:ssr,该目录创建了一个dist文件夹,其中包含浏览器和服务器文件夹以及一个server.js文件
  2. 将dist文件夹移动到public_html文件夹内的服务器。然后通过SSH访问服务器并执行以下操作:
  3. 安装Node.js和npm
  4. npm安装
  5. npm install pm2 -g
  6. pm2 start dist / server.js

pm2启动没有问题。

这些是一些项目文件。如果有任何遗漏,请询问,我将它们添加到问题中。

带有脚本的package.json的一部分:

  "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 dist/server",
    "build:ssr": "npm run build:client-and-server-bundles && npm run compile:server",
    "build:client-and-server-bundles": "ng build --prod && ng run ProjectName:server:production --bundleDependencies all"
  },

来自构建的server.js(仅表达部分,因为它有25000余行):

const app = express__WEBPACK_IMPORTED_MODULE_1__();
const PORT = process.env.PORT || 4000;
const DIST_FOLDER = Object(path__WEBPACK_IMPORTED_MODULE_2__["join"])(process.cwd(), 'dist/browser');
// * NOTE :: leave this as require() since this file is built Dynamically from webpack
const { AppServerModuleNgFactory, LAZY_MODULE_MAP, ngExpressEngine, provideModuleMap } = __webpack_require__(144);
// Our Universal express-engine (found @ https://github.com/angular/universal/tree/master/modules/express-engine)
app.engine('html', ngExpressEngine({
    bootstrap: AppServerModuleNgFactory,
    providers: [
        provideModuleMap(LAZY_MODULE_MAP)
    ]
}));
app.set('view engine', 'html');
app.set('views', DIST_FOLDER);
// Example Express Rest API endpoints
// app.get('/api/**', (req, res) => { });
// Serve static files from /browser
app.get('*.*', express__WEBPACK_IMPORTED_MODULE_1__["static"](DIST_FOLDER, {
    maxAge: '1y'
}));
// All regular routes use the Universal engine
app.get('*', (req, res) => {
    res.render('index', { req });
});
// Start up the Node server
app.listen(PORT, () => {
    console.log(`Node Express server listening on http://localhost:${PORT}`);
});

根据SO或其他地方的几个答案,您“简单地”将dist文件夹复制粘贴到服务器,运行pm2,您的网站应该可以正常工作。我觉得仍然缺少很多工作才能使它正常工作。

有人知道如何将Angular Universal网站正确部署到生产服务器吗?

node.js angular pm2 angular-universal
1个回答
0
投票

我在youtube上使用了本教程来部署我的应用。请检查这可能有帮助

Deploying angular universal app

© www.soinside.com 2019 - 2024. All rights reserved.