持续升级某些 Debian 发行版中的所有内容(包括发行版)?

持续升级某些 Debian 发行版中的所有内容(包括发行版)?

如何以安全的方式持续升级发行版中的所有内容(包括某些 Debian 发行版)?

为什么我问这个问题

我问这个问题是因为当我的Nginx环境安装脚本变得越来越大并且需要越来越多的时间来维护时,我觉得我做错了什么。

由于学习、实践和公共共享,维护脚本是我可以并且喜欢处理的事情,尽管我很快必须作为一名员工出去工作,并且维护这些脚本的时间会更少。鉴于这些情况,我总是有这样的恐惧:

-- 如果我当前的发行版 LTS 不再受支持怎么办?

-- 即使它是 Debian 稳定版而不是其他东西,我也可能会因为几个月前的旧发行版而存在安全漏洞,但也不会超过这个时间。

-- 如果由于发行版过时等原因,配置良好的配置unattended-upgrades不足以让我保持安全,该怎么办?

目前,我在 DigitalOcean 中支付了 5 美元购买 Droplet,我真的不知道对我来说拥有具有以下特征的 LEMP 堆栈的最佳解决方案是什么:

  • 可免费访问 Bash。
  • 无人值守升级。
  • CSF-LFD 和 Maldet。
  • Certbot 处理的 Web 应用程序配置。
  • 我在 cron 中创建的即时自动 cron 备份(在我的脚本中可用)。
  • 自动发行版升级(例如从 Ubuntu 16.04 到 18.04,以及当时从 18.04 到 20.04 等等),无需我手动移动数据,即使使用rsync.
  • WordPress 网站
  • WP-CLI
  • 所有 VPS 的价格不超过 10 美元。

我不确定 Ansible 还是 Salt 是答案(Ansible 在我看来并不容易学习,尽管它被宣传为易于学习,而且我担心我没有时间研究它未来 3 个月将进行深入研究)。

我不确定 Azure 是答案(只是因为价格,我知道像我想要的环境在 Azure 中至少要花费 15 美元)。

也许我需要一个在每个基本方面都具有持续交付的发行版(假设有一个)。

故事基本上就是这样。

答案1

良好的 CI(持续集成)至少依赖于三件事:

  1. 脚本化部署
  2. 带外测试环境
  3. 自动化测试覆盖整个表面。

你目前只有#1。另一个 VPS 可以作为 #2,但您没有任何(明显的)测试。


但在我们进一步讨论之前,先简单说明一下支持基于节奏的版本。

Ubuntu LTS 版本在发布后五年内会获得更新。不是每个包,而是 LEMP 所需的一切。这些更新向后移植未来版本的安全修复程序,以便您获得带有现代修复程序的旧主要版本(如果可能)。这意味着事情继续进行。

滚动发布可以随时更新所有内容。您不知道破坏性配置的更改(例如 systemd)何时会发生,也不知道修复需要多少工作。如果您自动安装更新,这也意味着没有可预测的时间间隔。

对于 Ubuntu LTS,您知道每 4-5 年您需要在服务器上花费一两个小时来指导其完成升级。当你这样做时你可以选择在下一个 LTS 发布后的 3 年内。这是主要功能,而不是缺陷。


对于你的作战计划,我会(也许有争议)完全禁用自动更新,并将其替换为相对地简单的脚本:

  • 启动第二个 VPS(使用供应商的 API,因此您只需在运行时付费)。基于相同操作系统版本的模板(例如 Ubuntu 16.04,如果您的主 VPS 位于该版本上)。
  • 更新到最新版本的软件、部署您的内容并恢复数据库
  • 运行您的测试套件并报告所有服务的正面或负面结果
  • 失败时向您发送电子邮件,apt dist-upgrade成功时在主 VPS 上运行。

关键是你能得到大声如果您没有收到更新,请反馈。是的,您也需要对此进行测试。

您可以转向 Ansible (等),但这不是您的主要问题。编写测试是。

这是一项繁重的工作,但这些东西也可以让你很好地进行扩展和扩展。如果您已经拥有负载平衡集群,则可以分离一个集群,对其进行更新并进行测试,然后再将其重新引入集群。

相关内容