我用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"
}
如何在自己的机器上启动它?
答案 0 :(得分:1)
至于前端,如果您仍然需要任何开发功能,可以使用
ng serve --host=somedomain/ip --port=80
绑定到你想要的任何ip /端口(0.0.0.0也应该工作)。如果您只是想要这些文件,那么您应该使用ng build
或ng 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
,还有nodemon,forever或pm2等工具。我偏向于pm2,但这都是非常主观的。如果您在某些VPS上运行服务器,那些流程管理器非常方便。如果你在自己的机器上运行它可能会少一些。 (node server.js
也没问题。)