如何将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议执行以下步骤以部署到生产环境中:
-
仔细检查
/config/env/production.js
configuration文件,并将您手动添加到/config/env/all.js
所有资产。 使用缩小版本进行生产是一个很好的方法。 -
(可选)如果您的应用中有自定义字体,我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模块
-
现在是时候为生产制作一个application.js,application.min.js和application.min.css文件(请参阅
/public/dist
文件夹)。 运行在应用程序文件夹中$grunt build
-
将文件复制到生产服务器。 我更喜欢使用GIT推送部署。 它仅向服务器发送增量更改。 如果您使用GIT进行推送,则需要将`/ public / dist /'文件夹中的所有文件添加到存储库中。
-
因为在项目中使用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脚本
-
(可选,但推荐)在
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