管理多个应用的​​最佳方式

时间:2014-09-05 14:51:49

标签: ruby-on-rails git amazon-web-services architecture web-deployment

我正在使用不同的rails应用程序处理应用程序。 我们正在快速移动并经常向每个代码推送代码......每个堆栈依赖于另一个(我们有内部API)

在这种情况下,我找不到任何带有最佳做法的文章。

我是否应该在同一个git repo中拥有所有应用程序,每个堆栈都是子模块? 我部署时应该总是将所有堆栈部署在一起吗?

无论如何,这听起来像是一个非常常见的问题,但我找不到任何关于它的好文档。

1 个答案:

答案 0 :(得分:0)

您希望使用git将您的应用程序推送到您的服务器,how Heroku does it

我们已经在Rackspace自己的堆栈上实现了这个功能,我们必须做几件重要的事情才能让它工作。


<强>部署

根据经验:

  

应用程序的部署与代码更新不同。   虽然我不知道技术术语,但我知道知道如果   您将代码推送到单个应用程序,这将完全不同   到&#34;部署&#34;多个应用程序。

为此,我建议将两个过程分开处理。 IE应该只将代码推送到特定的存储库,并部署&#34;应用程序&#34;如你所愿。

由于您没有详细说明堆栈的具体内容,请根据我们使用自己的RackSpace堆栈的工作情况,向您提供解释。


<强> GIT中

您正在寻找的主要内容是git - 这将使您能够执行"single click deploy"

enter image description here

诀窍是在服务器上创建一个bare存储库(与Github&amp; Heroku一样),然后让你能够“推送”#34;你的代码到这些钩子。为此,您需要做几件事(即设置git repo,在服务器上路由它,然后创建任何post-receive hooks来管理部署:

-

裸露的回购

第一步是设置bare repo,可以非常简单地完成

如果您通过SSH连接到EC2实例,只需运行以下命令:

$ git init --bare /git/your_app.git

这将为您提供一个存储库,然后您可以推送&#34;你的代码。这个和一个工作存储库之间的区别在于裸机没有任何文件 - 只是参考文献和其他信息。诀窍是use a hook创建一个工作目录,然后您可以使用该目录来运行您的应用程序。

裸仓库将允许您推送所需的代码,并基本上为您提供Github&amp;其他人拥有 - 发送&#34;的能力你的代码简洁明了。

-

<强>主机

其次,你需要能够&#34;路由&#34;任何对这个git repo的请求,以及其他git repos你也有。为此,您需要使用您的网络服务器捕获任何请求。以下是使用Nginx的方法:

#/etc/nginx/sites-available/git
server {
        listen 80;
        server_name your_domain.com;
        root /git;

        auth_basic  "RESTRICTED ACCESS";
        auth_basic_user_file /etc/nginx/.htpasswd;

        location ~ ^.*\.git/(HEAD|info/refs|objects/info/.*|git-(upload|receive$
                root /gitk;

                client_max_body_size                    100M;

                fastcgi_param SCRIPT_FILENAME           /usr/lib/git-core/git-http-backend
                fastcgi_param REMOTE_USER               $remote_user;
                fastcgi_param GIT_HTTP_EXPORT_ALL       "";
                fastcgi_param GIT_PROJECT_ROOT          /git;
                fastcgi_param PATH_INFO                 $uri;
                fastcgi_pass                            unix:/var/run/fcgiwrap.socket
                include fastcgi_params;
        }
}

您希望use htpasswd to create an authentication file(尚未为此创建授权),然后您应该允许您在本地处理以下内容:

> git remote add production http://your_domain.com/your_repo.git
> git add .
> git commit -a -m "Production"
> git push production master

这将要求您进行身份验证,您必须使用auth文件中提供的详细信息进行身份验证。

-

<强>挂钩

最后,您可以使用许多git hooks来创建&#34;部署&#34;机制。通常,您使用post-receive

#git/your_app.git/hooks
cd /app/your_app
git --work-tree=${APP_PATH} --git-dir=${GIT_DIR} checkout -f
bundle install
touch tmp/restart.txt

这显然是非常基本的。你可以随心所欲地制作它,如果你愿意,甚至可以组合其他的回购!

希望这会给你一些想法!