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

Rom*_*nov 20 web-deployment node.js mean-stack

MEAN.JS堆栈提出了为生产准备应用程序的"grunt构建"任务.不幸的是,缺乏有关后续步骤的信息.实际上,尚不清楚如何将应用程序部署到生产以及如何启动它.

问题#1 除了config/env/production.js的变化之外,项目中必须配置什么?例如,如何使用自定义字体?

问题#2 好的.代码部署到Production(通过Git,rsync等).运行它就足够了

 $NODE_ENV=production node server.js& 
Run Code Online (Sandbox Code Playgroud)

Rom*_*nov 35

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

  1. 仔细检查/config/env/production.js配置文件并包括您手动添加的所有资产/config/env/all.js.这是使用缩小版本进行生产的好方法.

  2. (可选)如果你的应用程序中有自定义字体,我建议更新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']);
    
    Run Code Online (Sandbox Code Playgroud)

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

  3. 现在是时候制作单个application.js,application.min.js和application.min.css文件进行制作(参见/public/dist文件夹).在app文件夹中运行

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

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

    $NODE_ENV=production node server.js&
    
    Run Code Online (Sandbox Code Playgroud)

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

    如果发生故障,UPSTART将监控并重新启动您的服务(请参阅UPSTART配置中的respawn命令).您可以在此处找到有关如何制作UPSTART配置文件的详细解答:node.js的upstart脚本

  6. (可选,但建议)安装nginx在前面Node.js.由于安全原因,建议在非特权用户下运行您的Web应用程序,另一方面,如果您想为您的Web应用程序使用端口80(它是http协议的默认端口)(例如http:// my-app-) domain.com/而不是http://my-app-domain.com:3000/)这样的配置可能很棘手.因此,我在我的网络应用程序前面使用Nginx(端口80),它实际上可用于非特权用户可用的端口(例如3000)

    6A.而不是Nginx你可以使用Varnish