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

时间:2014-07-01 17:54:36

标签: node.js web-deployment mean-stack

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

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

问题#2 好。代码部署到Production(通过Git,rsync等)。是否足以将其作为

运行
 $NODE_ENV=production node server.js& 

1 个答案:

答案 0 :(得分: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']);
    

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

  3. 现在是时候制作单个application.js,application.min.js&用于生产的application.min.css文件(请参阅/public/dist文件夹)。在app文件夹中运行

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

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

    就足够了
    $NODE_ENV=production node server.js&
    

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

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

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

    6a上。 您可以使用Varnish

  7. 代替Nginx
相关问题