Git

在單個伺服器上暫存多個 Git 分支

  • August 11, 2014

使用單個登台伺服器來登台多個 git 分支是一個壞主意嗎?

例如,如果持續集成伺服器在所有測試完成後自動執行 Ansible、Chef、Puppet 等供應套件,並將應用程序部署到 StagingApplicationServer.com/<此處的分支名稱>

這將允許 master、develop 和其他功能分支是可分階段的。

如果這不是一個壞主意,有沒有辦法能夠分離單個系統上的不同分支?因此,例如,分支 1 的 Nginx/Redis/MongoDB 服務可能與分支 2 不同,並且很容易被拆除。

在短時間內啟動 Amazon EC2 實例是理想的,但不幸的是,這不是一種選擇。此外,對於這個特定的應用程序,使用子域不是一個選項。

編輯:

具體細節,該應用程序是一個使用 Redis、MongoDB 的 Python Flask 應用程序。伺服器配備了 Ansible。

編輯2:

澄清一下,我擔心這是一個壞主意,因為無論您在哪裡讀到,您的開發、登台和生產環境都應該盡可能地接近。這意味著如果您的部署策略適用於暫存,您應該能夠在生產環境中複製它而不會出現問題。即,如果您的 Ansible 劇本適用於 staging,它們將適用於生產。

為了在暫存時容納多個分支,您需要自定義 Nginx,例如配置。您可能還需要更改數據庫的配置方式,或者您可能會執行額外的步驟來配置 VM 以包含您的數據庫等。所有這些最終都會使您的暫存環境與生產環境不同。

我看不出有任何理由這將是一個壞主意。暫存意味著非生產服務,因此您可以在一台伺服器上進行所有暫存,而不用擔心冗餘、性能等。分離應用程序和應用程序實例的另一個原因是為了安全,但同樣是為了非生產服務這不是一個問題,除非您在登台伺服器上託管生產數據的副本(這是另一種需要考慮的分離類型)。如果存在安全問題,並且您不能使用子域,您仍然可以在 nginx 中使用代理來將實例劃分為多個 VM。但是,以最簡單的形式,您只需在同一個實例上執行它們,並使用“位置”指令來確定每個路徑執行的應用程序。

nginx 不關心您如何劃分應用程序,儘管您需要根據目錄為每個應用程序伺服器配置不同的代理配置(配置文件的不同埠或不同位置,具體取決於應用程序伺服器)。你如何做到這一點在一定程度上取決於你的應用伺服器是什麼,你沒有指定。

例如,使用 Ruby 使用乘客應用程序伺服器,您將遵循以下說明:https ://www.phusionpassenger.com/documentation/Users%20guide%20Nginx.html#deploying_rails_to_sub_uri

請注意,Passenger 對您隱藏了一些實現細節,因此您無需考慮埠,只需考慮目錄。而在以下範例中,您將指定代理埠,並且每個應用程序實例需要不同。

使用 Perl Mojolicious,您可以遵循以下範例:http ://search.cpan.org/~sri/Mojolicious-5.27/lib/Mojolicious/Guides/Cookbook.pod#Nginx

請注意,location任何一個範例中的部分都可以復製到您需要應用程序的獨立實例的任意多路徑。這與執行多個應用程序相同;您只需為每個人提供自己的目錄和配置文件。

我懷疑到目前為止您沒有得到任何答案的原因是您沒有提供有關您的部署的任何具體資訊。當您指定您將使用“Ansible、Chef、Puppet 等”時,我發現很難提供建議。和“Redis/MongoDB”……你是否在使用所有這些東西,儘管它們做的工作非常相似?大多數人選擇一種部署工具(來自 Ansible、Chef、Puppet 等)和一種鍵/值儲存(Redis/MongoDB)。所有這些的配置範例,以及需要注意的事項的警告將因每個而異。

無論如何,對您的問題的簡短回答是:是的,您可以這樣做,並且沒有技術上的理由您不應該這樣做。

引用自:https://serverfault.com/questions/619445