在Ubuntu 14.04上通过Git部署我的Rails应用程序

时间:2016-01-13 16:15:49

标签: git ruby-on-rails-4 deployment ubuntu-14.04

我需要在新服务器上部署我的rails应用程序,而且现在还不知道如何继续。我阅读了很多指南和内容,但由于我不太了解有关部署的一般知识,所以我希望得到一些直接的帮助。

所以我开始做的是:

  • 通过ssh-key将我的Rails应用程序从本地系统推送到git存储库
  • 在Ubuntu服务器上安装Rails
  • 在Ubuntu服务器上安装Postgres
  • 在Ubuntu服务器上创建Postgres用户
  • 创建一个ssh密钥以将我的服务器连接到我的git帐户

现在我知道可以使用" hooks"从服务器上的git存储库中推送我的数据。但我不知道怎么做。此外,我不确定是否需要在我的服务器上创建数据库以及如何处理database.yml(是否足以设置生产部件的用户和密码?)。最后但并非最不重要的是,我不确定使用git是安全的还是我需要配置或安装其他任何东西以获得基本的安全级别。

我很感激任何建议。

编辑:

按照此guide设置capistrano。在第7步,我收到以下错误消息:

[6359a9ec]        Warning: Permanently added 'github.com,192.30.252.130' (RSA) to the list of known hosts.
[6359a9ec]
[6359a9ec]        Error reading response length from authentication socket.
[6359a9ec]
[6359a9ec]        Permission denied (publickey).
[6359a9ec]
[6359a9ec]        fatal: Could not read from remote repository.
[6359a9ec]
[6359a9ec]
[6359a9ec]        Please make sure you have the correct access rights
[6359a9ec]
[6359a9ec]        and the repository exists.
[6359a9ec]

2 个答案:

答案 0 :(得分:1)

我建议您查看TeamCity by JetBrains。我知道这是你必须学习的另一个工具,但从长远来看,它可以节省你的时间。

基本上,我认为您可能正在寻找设置部署管道。因此,您将需要应用程序所依赖的所有依赖项安装在其他服务器上。

对于Rails应用程序,这将是ruby,bundler和rails gems的所有依赖项,javascript运行时如node,postgres以及其他一些东西。我已经离开了我的头脑,所以我相信你需要安装更多的东西。我还建议使用像rbenv这样的ruby版本管理工具。有些人喜欢自动安装所有这些依赖项,但现在手动完成它可能更简单。

基本上TeamCity将要做的是允许您定义您的repo的URL,可以是Bitbucket或Github,并让您定义一系列步骤来构建和部署您的应用程序。该应用程序可以部署到您安装TeamCity的同一服务器上。我认为这对你来说是最简单的,至少目前是这样。

每当我在TeamCity中设置部署管道时,部署过程看起来与此类似:

1)我做了一个更改并将我的代码推送到了回购。 (Bitbucket或Github通常)。

2)TeamCity看到了这一变化,并下载了Rails应用程序的源代码。

3)TeamCity运行bundle install以获取我的Rails应用程序所需的任何宝石。

4)TeamCity运行我的测试。如果一个失败,那么它会停止构建并向我发送一封电子邮件。 (您可以在TeamCity中配置SMTP设置。我建议使用Mandrill,因为在此规模下它将是免费的。)

5)测试成功运行后,TeamCity会将源代码复制到部署目录(类似于/ var / www / myApp /)。

6)最后,运行一个命令来重新启动用于提供Rails应用程序的任何服务器。它可能是瘦,独角兽或其他什么。有时候我会把它放在Nginx后面并使用反向代理来平衡所有Rails应用程序实例。

这需要一段时间,但是一旦你掌握了它,你所做的每个项目都会有一些部署管道。我的第一次安装需要2周时间。

之后,当你只需对代码进行更改并用git将其推上以便在互联网上显示时,它会在你脸上露出笑容。

修改

具体回答你的问题:

  

此外,我不确定是否需要在服务器上创建数据库以及如何处理database.yml(是否足以设置生产部分的用户和密码?)

在当前版本的rails中,我认为生产数据库凭据存储在计算机本身的环境变量中。您可以根据需要存储凭据,只要它们不可公开访问。如果您的应用程序的源代码是私有的,那么您可以将其存储在.yml文件中。如果没有,则将生产YAML文件保留在源代码管理之外,并将其自行复制到部署服务器或使用环境变量。如果您使用TeamCity,则可以在TeamCity本身中设置这些变量。

  

最后但并非最不重要的是,我不确定使用git是安全的还是我需要配置或安装其他任何东西以获得基本的安全级别。

Git是安全的,是的。但是像许多工具一样,它可以以不安全的方式使用。在推送和提取代码时总是尝试使用git,ssh或https协议,你会没事的。

编辑2:

我不建议在代码更改时自动部署生产环境应用程序。在TeamCity中,您应该自动部署beta环境,一旦经过全面测试,您就可以点击按钮并将这些更改部署到生产环境中。

答案 1 :(得分:1)

首先,安装/运行postgres不应该是rails部署设置的一部分。也许,在未来的某个时刻,postgres甚至不会与你的rails应用程序在同一台机器上运行。

至于你的rails问题,我只能建议您查看capistrano,它可以执行您描述的任何操作,并且是稳定的,经过实战检验的开源。它比其他答案中描述的TeamCity应用程序少得多,因此设置起来要简单得多。配置完成后,工作流程非常简单:

  • git push
  • cap deploy
然后,capistrano将提取新代码,使用bundler安装依赖项,在需要时运行迁移并重新启动rails应用程序服务器。它还将处理database.yml和其他不在你的repo中的秘密文件(通过符号链接)。最后,如果你不小心部署了一些不好的东西,你也可以轻松地进行回滚。

tldr:使用capistrano