我研究过使用 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 上安排的剧本时。
希望这可以帮助!