如何使用 Ansible 管理具有多網站設定的多伺服器?

如何使用 Ansible 管理具有多網站設定的多伺服器?

我研究了 Ansible 來設定新伺服器,效果很好。我的遊戲安裝了 MySQL、Nginx 等。現在我想知道將它用作配置管理工具的最佳方法是什麼。

我們在每台伺服器上運行多個網站。對我來說,這意味著每台伺服器上的常規 Nginx 設定以及每個網站/網域所需的特定配置。我認為,當我需要時(例如新的見解或安全性),我可以使用 Ansible 獨立更新常規設定和特定配置。

在這種情況下我需要做什麼?這是否需要我保留一個變數來保存所有網站以及它們位於哪個網站?或者,有更好的選擇嗎?

答案1

模板的一個功能是它的模板功能,您可以利用該功能來實現此目的。

範本模組可讓您為每個主機部署具有唯一值的檔案。目前正在使用的主機的名稱保存在 inventory_hostname 和 inventory_hostname_short 變數中(後者是主機名稱的第一個點部分)。

您可以將主機特定變數儲存在 group_vars/all 的字典中。例如:

www_sites: {
    host1: "www.mysite1.com",
    host2: "www.mysite2.com",
  }

然後 nginx conf 檔案的範本可以包含以下內容:

server {
  listen       80;
  server_name  {{ www_sites[inventory_hostname_short] }};
  access_log   logs/{{ www_sites[inventory_hostname_short] }}.access.log  main;

Ansible 使用的 Jinja2 範本語言的文檔可以找到這裡

答案2

我使用變數對相關主機執行特定操作。我的建議是盡可能將主機分組並使用群組變數。請記住,Ansible playbook 對於 git 或 SVN 中的版本控制非常有用,因此您可以追蹤您的變更。

可能對您有用的方法是使用vars_prompt,特別是如果您不運行在 cron 上安排的劇本。

希望這可以幫助!

相關內容