在自己的服务器(Debian)和nginx上部署我的MEAN应用程序?

时间:2017-05-07 13:43:03

标签: node.js angular express nginx

我用MEAN堆栈(Mongo,Express,Angular 2/4,Node)创建了我的第一个应用程序,但它只适用于“本地环境” 我通过ng服务启动客户端(前端)部分,它可以在 localhost:4200

上工作

此外,我逐个节点server.js启动服务器并且它可以工作 的本地主机:4000

也开始使用mongodb。

一切都很完美,但在本地主机上。

如何在我自己的服务器上将应用程序部署到生产中我不希望像heroku等那样托管。

我已经安装了debian + mongo和node。

这是我的server.js文件

require('rootpath')();
var express = require('express');
var app = express();
var cors = require('cors');
var bodyParser = require('body-parser');
var expressJwt = require('express-jwt');
var config = require('config.json');

app.use(cors());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());

// use JWT auth to secure the api
app.use(expressJwt({ secret: config.secret }).unless({ path: ['/users/authenticate', '/users/register'] }));

// routes
app.use('/users', require('./controllers/users.controller'));

// start server
var port = process.env.NODE_ENV === 'production' ? 80 : 4000;
var server = app.listen(port, function () {
    console.log('Server listening on port ' + port);
});

config.json

{
    "connectionString": "mongodb://localhost:27017/mymean",
    "apiUrl": "http://localhost:4000",
    "secret": "TOP SECRET"
}

如何在自己的机器上启动它?

1 个答案:

答案 0 :(得分:1)

至于前端,如果您仍然需要任何开发功能,可以使用

ng serve --host=somedomain/ip --port=80

绑定到你想要的任何ip /端口(0.0.0.0也应该工作)。如果您只是想要这些文件,那么您应该使用ng buildng build --environment="production"。 (后者从webpack触发一些额外的优化。)构建你的应用程序将生成一个dist - 文件夹(默认情况下无论如何),内容是简单的html / javascript文件,所以你需要通过其他方式提供该文件夹(也许是nginx)。

我使用nginx也可以公开我的api(服务器端)。 nginx配置可以简单如下:

server { 
    listen 80;

    # Web
    root /var/www/myapp/dist
    location / {
        try_files $uri /index.html;
    }

    # Api
    location /api {
        proxy_pass http://127.0.0.1:4000;
    }
}

此外,许多人使用一些东西来保持服务器进程的活力。而不仅仅是NODE_ENV=production node server.js,还有nodemonforeverpm2等工具。我偏向于pm2,但这都是非常主观的。如果您在某些VPS上运行服务器,那些流程管理器非常方便。如果你在自己的机器上运行它可能会少一些。 (node server.js也没问题。)