6

我们现在正在调查 Ansible 来配置我们的服务器。这是一个相当默认的 nginx、php-fpm 和 mysql 设置。但是,我想知道这些软件包的安装以及如何使 playbook 在服务运行时具有幂等性。

对于 nginx,我们有一个默认值nginx.confconf.d/. 对于 php,我们有一个php.ini,一个php-fpm.conf,一个池pool.d/和一些 ini 文件conf.d/。在每个 ansible playbook 调用上覆盖所有文件的想法是什么?

如果所有配置都被覆盖,是否可以执行 aservice nginx reload甚至service php5-fpm reload在服务器负载较重的情况下?对于初始安装,areload不会启动服务器,所以我必须先检查状态,然后在start和之间切换reload

如果我寻找安装了 nginx 的剧本,他们通常使用将重新启动 nginx 的处理程序。但是,这并不优雅,所以我不太喜欢这种方法:

service: name=nginx state=restarted

一般来说,在不强制重启的情况下,使用 ansible 和配置服务器以及nginx、php-fpm 和 mysql 等服务的常见模式是什么?

4

2 回答 2

5

服务模块可以使用.state=reloaded

如果服务器上已经有相同的版本,则不会上传配置文件。因此,如果您在处理程序中使用,重新加载将不会触发service: name=nginx state=restarted

您也可以使用service: name=nginx enable=yesso 服务在启动时启动(因此不需要显式地使用startnginx,仅reload在需要时)。

于 2013-11-29T10:51:14.313 回答
4

在#ansible IRC 频道上,我已经得到了一个有效的答案。apt 系统的一般模式是在安装后启动服务。因此,您可以完全省略start并且仅reload在配置更改的情况下。

然后设置将是(例如,采用 Nginx)

  1. 安装 Nginx
  2. 覆盖所有配置文件
  3. 如果在#2中发生了变化,请运行重新加载

这应该足够了;未安装 Nginx 时,执行步骤 1,2 和 3。安装 Nginx 并且配置正常后,不会发生重新加载。如果我们更新配置,步骤 #2 会导致更改,因此会发生重新加载。

这应该足以涵盖所有情况。

于 2013-11-29T10:47:12.107 回答