我遇到的问题似乎对所有发行者来说都是真实的,但让我们假设我使用全默认debian-stable
(服务器),然后运行apt update -y
。
在 Apache 中安装、升级、重新启动以及启用或禁用模块都是与版本无关的操作,我发现这是一个问题:
安装或升级 Apache 应该是
apt upgrade apache1
或apt upgrade apache2
。它不能只是“apt upgrade apache”,无论有什么版本,就像apt upgrade zip
或apt upgrade unzip
等等。要重新启动 Apache,必须执行
systemctl restart apache2
,要启用或禁用 Apache 模块,必须说a2enmod http2 deflate expires
或a2dismod http2 deflate expires
。
我考虑过解决这个问题的方法
我认为 Ansible 可能会在这里提供帮助,通过使用 Ansibleapt
模块的state=latest
选项转录旧的安装命令,但Ansible Apache 文档不包含这些命令的非版本无关语法,并且只安装 Apache2,因此即使 Apache3 出来了,我仍然必须手动 release_upgrade 将其从 2.4 升级到 3.x尽管我使用 Ansible 不断升级基本上所有其余的上述操作系统软件(如zip
和unzip
)。
1.将 Ansible 与正则表达式结合起来(如 Ansible 的 aptapache*
或systemctl restart apache*
)仍然不够,或者至少是“脆弱的”。
2.即使将 Ansible 与tasksel
正则表达式结合起来:
- name: Install latest Apache
apt: lamp-server^
state: latest
- do stuff and restart Apache
command:
args:
argv:
- aenmod http2 deflate expires # Non version-agnostic http version;
- systemctl restart apache*
可能还不够,因为当 Apache 3 或 4 或 5 发布时,仍然需要我进行手动更改(例如,对现有的虚拟主机文件)。
我的问题
我知道这可能是一个极端的愿望,但是有没有办法安装并完全持续地升级 Apache(包括 release_upgrades 和虚拟主机文件等)?
也许是一个共同维护和良好支持的Ansible-Galaxy 角色是正确的方法。也许我应该选择另一个网络服务器 - 我不知道。
根据评论更新
这是来自 Michael Hampton 的评论,他说这都是 Debian 特有的,其他发行版可能有与版本无关的安装 Apache 的方法 - 说实话,我考虑 ArchLinux 是因为它的完全滚动发布操作系统升级模型。答案可以举例说明几个可能满足我在 Apache 中寻求的方法的发行版。