Node.js:网站部署策略

3
我使用node.js来开发 web 应用程序和网站,但是当我想要将应用部署到某些Pass时,我必须手动优化应用程序,例如将Sass编译为样式表,将JavaScript文件合并在一起,将CSS文件合并在一起,将它们复制到YUI压缩后再复制回来等。这个流程让我感到沮丧,所以我的问题是,是否有一些工具或模块可以优化这个流程,或者自动执行此任务?你的部署策略是什么?请按照格式要求返回结果,谢谢!
2个回答

4
你需要的是一个构建工具。在Java中,ant和maven是流行的选择。在node.js世界中,有大量的构建工具可供选择。我最熟悉的两个工具是grunt和buildr(完全透明:我是buildr的维护者之一)。
任何一个工具都归结为编写配置文件,指定源文件/目录以及您希望对它们执行的操作,例如缩小、连接、Saas或Stylus编译等选项。

https://github.com/gruntjs/grunt

https://github.com/balupton/buildr.npm

对于部署工作流程,我建议按照以下步骤进行:

  1. 从源代码控制(Git或Subversion或其他)中进行网站或应用程序代码的干净检出。
  2. 运行grunt或buildr命令来编译所有网站资源。
  3. 上传结果到您的Web服务器,然后重新启动node.js进程。有很多方法可以做到这一点。

对于应用程序,我建议在远程系统上删除安装目录,并将新版本SCP到其位置。这假设负载均衡器存在。

根据您的应用程序,这可能足够简单,可以使用shell脚本自行编写,或者您可以使用像capistrano或fleet这样的工具。

https://github.com/capistrano/capistrano

https://github.com/substack/fleet

对于一个简单的网站,我建议使用像rsync这样查看文件差异的工具。因为我的个人网站只是静态内容,我使用rsync来管理,这样我就不必担心依赖等问题。
因此,发布可能会像这样进行:
$ git clone git://github.com/whatever.git && (cd whatever && buildr && rsync -avz --delete -e ssh <remote server>:webroot)

或者对于一个应用程序,可以更自动化一些:

$ git clone git://github.com/whatever.git && (cd whatever && buildr && make upload)

对于一款重要的应用程序:
$ buildApp && deployApp

buildApp和deployApp是包含所有命令、日志、配置等所需内容的脚本,用于构建和部署。


在这个背景下应该提到Fabric。与Capistrano类似,更喜欢Python而不是Ruby的人们可以将其视为一种优秀的工具。尽管它与SaltStack、Ansible、Chef或Puppet等DevOps工具存在一些重叠,但那些工具更加专注于服务器/环境配置,而Fabric则更加专注于部署。Fabric的功能可以通过Cuisine进行增强。Y Combinator Hacker News的线程包括有关Fabric等方面的良好评论。 - Ville
谢谢!我会看一下 Fabric。 - Brandon

2
你应该看看Grunt.js。Brandon的回答很好,但我猜他没有使用过Grunt。对于我来说,现在Make只是一个遥远而痛苦的记忆。Grunt本身只是一个"任务运行器",而所有繁重的工作都由"插件"完成,每个插件都为你的Gruntfile中的特定"任务"提供支持。因此,有一个编译SASS到CSS的插件,一个用于YUI文档的插件等等。您可以在GitHub社区和Grunt.js网站上找到数百个Grunt插件,网址为:http://gruntjs.com/plugins
此外,所有"grunt-contrib-"插件都经过Grunt.js核心团队的审核,每个插件都专注于做一些特定的事情。有一个插件用于压缩CSS,另一个用于Uglify(压缩/混淆)JavaScript,一个用于文件合并等等。甚至还有一个用于生成静态网站的插件:assemble(我是其中之一的维护者)。

1
我实际上在grunt方面有很多经验,这也是我在回答中推荐的。 - Brandon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接