2013-03-05 164 views
5

我正在研究在同一臺服務器上有多個redmine實例的最佳方式(基本上我需要每個redmine組都有一個數據庫)。多個redmine實例最佳實踐

到現在我有兩個選擇:

  1. 部署管理平臺的實例爲每個組
  2. 部署一個管理平臺實例與多個數據庫

我真的不知道什麼是最好的在這種情況下練習,我看到一些人以這種方式做這件事。

我已經用nginx和乘客測試了多個redmines(3個實例)的部署。它運作良好,但我認爲有很多例子可能不可行。每個應用程序需要大約100MB的RAM,隨着請求的增加,它傾向於爲應用程序分配更多的進程。如果我們有很多實例,這種情況看起來很糟糕。

選項2似乎是合理的,我想我可以在rails環境中實現該選項。但我認爲會話有一些安全問題(我認爲A站點的用戶可以在A站點進行身份驗證後在站點B上進行操作)。

這種情況有什麼好的做法嗎?在這種情況下采取的最佳做法是什麼?

與此相關的其他要求是:我們必須能夠創建或關閉一個redmine實例而不會中斷其他實例(例如,我們應該避免服務器重新啓動..)。

感謝您的任何意見和抱歉我的英語!

編輯:

我的解決辦法: 我用了一個管理平臺的實例爲每個組。我使用nginx +獨角獸來獨立管理每個實例(因爲乘客不允許我獨立管理每個實例)。

回答

3

兩個選項是畢竟沒有那麼不同。唯一的區別是在選項2中,您的磁盤上只有一個代碼副本。

在任何情況下,您仍然需要爲每個實例運行不同的工作進程,因爲Redmine(通常大多數Rails應用程序)不支持每個請求的數據庫切換,並且某些環境的某些數據在進程中被緩存。

鑑於這種情況,即使分配代碼庫也沒有多少動機,因爲它需要某些猴子補丁和符號鏈接魔術來允許針對故意配置差異進行正確初始化(數據庫和電子郵件配置,上傳文件的路徑, ...)。 Debian軟件包就是這樣做的,但它(在我眼中)非常脆弱,導致一個相當不標準的系統。

但要再次強調一下:即使您在實例之間的磁盤上共享相同的代碼,您也不能共享正在運行的工作進程。

1

Redmine不正式支持從同一代碼庫運行多個實例。然而,Debian/Ubuntu的軟件包似乎支持這種做法,...查看:

所以,一般爲:

  • 如果你使用Debian/Ubuntu的去與選項#2
  • 其他請與#1
+0

即時通訊使用基於Debian的服務器,我會嘗試使用#2進行部署,但該鏈接沒有太多有關如何做的信息 – 2013-03-06 11:32:50

0

向前推進了幾年,現在您可能想考慮爲每個redmine實例使用docker容器的第三種選擇。

我一直在使用https://github.com/sameersbn/docker-redmine.git,除了它還不支持處理傳入郵件以創建和評論票據之外,對它一直很滿意。