Deployment

如何自動部署同一應用程序的新實例(在一台伺服器上)?

  • November 18, 2012

我正在開發一個 SaaS 應用程序,每個客戶都執行自己的應用程序版本。目前所有應用程序實例都在單個伺服器上執行。這對我們來說效果很好(我們總共需要更少的資源)。該應用程序不使用大量資源,因此即使是小型 VPS 也會過大(而且成本更高)。

添加新客戶目前是一項相當多的工作:

  • 創建一個允許 ssh 的使用者
  • 創建一個新的 MySQL 數據庫和使用者
  • 為應用程序創建一個虛擬主機
  • 使用新使用者登錄,對應用程序執行 git checkout(在正確的位置)
  • 在新數據庫中創建表,並添加一些初始化數據
  • 添加一些 cron 作業
  • 創建第一個可以登錄的使用者
  • 將此新實例添加到 capistrano

自動化這些任務的最佳方法是什麼?可以(在適當的配置下)執行此操作的應用程序嗎?理想情況下,這應該對銷售人員有用(所以基於網路的東西)。

我可以編寫一個(bash)腳本來完成大部分這些任務,然後可能添加一個基於 Web 的小型包裝器,以便有人可以提供域/預設使用者資訊。當然,這也需要刪除腳本,因為一些客戶最終會離開,這意味著您需要所有現有客戶/實例的列表。

事實上,這是您作為系統管理員的工作。為所有重複的事情編寫腳本,以便您可以處理其他需要完成或修復的事情。

如果您對自己的腳本編寫技能還沒有信心,那麼您應該有一個類似於您的生產環境的測試環境,您可以在一個環境中測試您的腳本,如果您破壞它不會花費您的金錢和客戶。

我的答案將取決於您期望有多少新客戶。如果您“每隔一段時間”添加一個新客戶 - 我會為您的所有上述程序創建一個清單,並在每次添加新客戶時仔細遵循它。如果每天要多次添加新客戶 - 或者在許多伺服器上,那麼我會自動化它。

我的系統管理經驗法則:很難保持過度的肛門保持性,因此在添加客戶時對您接觸的每個文件進行備份……

1.) 使用 useradd 和命令行參數編寫腳本以創建使用者 - 確保在發出 useradd 命令之前製作 /etc/passwd 和 /etc/shadow 的“600 root:root”副本(如果是本地使用者)。2.) mkdir /etc/ssh。date +%Y%m%d 3.) cp /etc/ssh/* /etc/ssh. date +%Y%m%d 4.) awk, sed, sshkeygen (或其他) 來製作 ssh 密鑰並添加使用者 5.) bash 腳本,它採用命令行參數來創建 SQL 鏡頭以創建數據庫。…等等等等等等

你明白我的推理……最後一步 - 創建一個將所有步驟聯繫在一起的“超級腳本”。

嗯……“網路”方面……除非你有一些非常好的防火牆和安全措施。我不會創建一個網頁來添加客戶。我相信您已經想到了這一點……如何進行取決於您,但我的想法是您說您想要一個可以在盒子上以 root 身份執行腳本的網頁。您必須是 root 才能添加使用者。也許您可以做到,但我不相信自己會創建一個頁面,某些使用者可以隨意將數據輸入表單並讓它以 root 身份執行某些操作。我可以進行消毒……我可以按照消毒食譜進行操作……但是,我不相信我在“黑客”方面的技能足以測試我自己的具有根級命令的應用程序……對不起,我是個懦夫猜測 :-)

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