如何将MEAN.js(Node.js)应用程序部署到Production环境

MEAN.JS堆栈提出了用于准备应用到生产的“grunt build”任务。 不幸的是,缺乏关于下一步的信息。 其实目前还不清楚如何将应用程序部署到生产环境以及如何启动它。

问题#1除了config / env / production.js中的更改之外,还必须在项目中configuration什么? 例如如何使用自定义字体?

问题2好的。 部署到生产(通过Git,rsync等)的代码。 运行它足够了吗?

$NODE_ENV=production node server.js& 

我build议执行以下步骤以部署到生产环境中:

  1. 仔细检查/config/env/production.jsconfiguration文件,并将您手动添加到/config/env/all.js所有资产。 使用缩小版本进行生产是一个很好的方法。

  2. (可选)如果您的应用中有自定义字体,我build议更新gruntfile.js并添加一个将字体复制到/ public / dist /文件夹的任务。 我做了以下更改:

     copy: { main:{ expand: true, flatten: true, src: ['public/modules/core/fonts/*'], dest: 'public/dist/', filter: 'isFile' } }, ... // Build task(s). grunt.registerTask('build', ['lint', 'loadConfig', 'ngmin', 'uglify', 'cssmin', 'copy']); 

    复制任务需要安装grunt-copy模块

  3. 现在是时候为生产制作一个application.js,application.min.js和application.min.css文件(请参阅/public/dist文件夹)。 运行在应用程序文件夹中

     $grunt build 
  4. 将文件复制到生产服务器。 我更喜欢使用GIT推送部署。 它仅向服务器发送增量更改。 如果您使用GIT进行推送,则需要将`/ public / dist /'文件夹中的所有文件添加到存储库中。

  5. 因为在项目中使用express.js,所以使用命令就足够了

     $NODE_ENV=production node server.js& 

    我知道一些开发者永远使用(node.js模块),但是我更喜欢使用在Ubuntu上默认可用的UPSTART(基于事件的init守护进程)作为系统服务。 我在/etc/init文件夹中创build一个configuration文件,例如/etc/init/my-app.conf 。 之后,我可以开始,停止,重新启动我的应用程序作为服务。 例如,服务我的应用程序开始|停止|重新启动

    如果发生故障,UPSTART将监控并重新启动您的服务(请参阅UPSTARTconfiguration中的重新启动命令)。 你可以在这里find详细的答案如何使UPSTARTconfiguration文件: node.js的upstart脚本

  6. (可选,但推荐)在Node.js前面安装nginx 。 因为安全原因,build议在非特权用户的情况下运行您的Web应用程序,另一方面,如果您要为您的Web应用程序使用端口80(这是http协议的默认端口)(例如http:// my-app- domain.com/而不是http://my-app-domain.com:3000/ )这样的configuration可能会很棘手。 正因为如此,我在我的networking应用程序前面使用了Nginx(端口80),该应用程序实际上可用于非特权用户的端口(例如3000)

    6A。 代替Nginx,你可以使用Varnish