使用git部署Rails应用程序的最新技术

我正在寻找将当前在运行的服务器(而不是Heroku)上部署Rails应用程序的最佳实践信息分组在一起。 该应用程序由多人开发,他们都有权部署它。 应用程序将在可能有多个应用程序的服务器上运行。

  • Passenger使用Apache或Nginx
  • 我使用Ubuntu,但不应该做太多的区别。
  • Capistrano似乎是推送到服务器的最佳方式。

现在,我有一些疑问:

  • 是否使用RVM? 乘客只能使用一个版本的Ruby,所以这是没用的,不是?
  • 你将如何构build用户权限和SSH密钥? 我的想法是,你绝对不想让用户成为“你自己”(dnw,比如在服务器上),而是一个angular色账户。 Ubuntu的万维网数据是明智的,还是创build一个不同的用户更好? 每个应用程序一个? 如果有人在Web应用程序中发现漏洞,那么这些用户是否应该使系统尽可能地安全?哪种configuration(/ etc / passwd中的shell,例如组等) 你会用什么样的capistrano食谱来达到这个目的?
  • 现在,我们将git添加到混合中:git需要能够在没有git服务器密码的情况下提取,所以会有一些密钥交换正在进行。 远程git安装程序应该如何才能使事情变得更加美好和安全?
  • 还有什么,我不覆盖?

  • Nginx /独angular兽(Passenger比它的价值更麻烦,特别是当你处理多个Ruby版本时)。 由守护神/ 安拉pipe理的独angular兽,因为上帝让我的吉姆斯沙沙作响。
  • rbenv而不是RVM(rbenv是为了做一件事情而做的,而不是RVM的“做一切痛苦的一半”的方法)
  • 每个应用程序用户,每个开发人员使用SSH密钥来pipe理每个应用程序。
    • 您可以将应用程序本身作为单独的用户运行,并使用ACL来仅允许访问应用程序所需文件系统的那些部分; 这个应用程序用户不应该允许login。 我个人认为这太过分了,但是如果你想要一点一点的增加分离的话,这是可能的。
  • 卡皮斯特拉诺是另一个“痛苦的一切”的工具; 我推荐giddyup ,虽然这可能是因为我写的。

我写了一个电子书或多或less这个完全相同的设置,这是免费的人在我的邮件列表。

它包括从头开始用nginx,Unicorn,MySQL和rbenv设置一个服务器,并部署(和更新)一个示例Rails应用程序,以帮助您了解这个过程如何工作。

如果你认为这是你的东西,你可以在这里得到它。

更新:自从我写这个评论以来,已经有一段时间了。 从那时起,我发布了Efficient Rails DevOps ,这个专业书籍不仅涵盖了上面的大部分问题,而且还介绍了如何以受控,可重复的方式(使用Ansible作为configurationpipe理和部署工具)进行操作。