繼續升級某些 Debian 發行版中的所有內容(包括發行版)?
如何以安全的方式持續升級發行版中的所有內容(包括一些 Debian 發行版)?
為什麼我問這個問題
我問這個問題是因為當我的 Nginx 環境安裝腳本越來越大,並且需要越來越多的時間來維護時,我感覺自己做錯了什麼。
由於學習、實踐和社區共享,維護腳本是我可以並且喜歡處理的事情,即使我必須盡快作為員工出去工作並且維護這些腳本的時間會更少。鑑於這些情況,我總是有這樣的恐懼:
– 如果我目前的發行版 LTS 不再受支持怎麼辦。
– 即使它是 Debian 穩定版而不是其他東西,我也可能因為幾個月前的舊發行版而出現安全漏洞,但僅此而已。
- 如果一個配置良好的
unattended-upgrades
版本不足以讓我安全安靜,因為發行版已經過時等等。至於現在,我在 DigitalOcean 中為一個 droplet 支付 5 美元,我真的不知道擁有具有以下特性的 LEMP 堆棧的最佳解決方案是什麼:
- 可免費訪問的 Bash。
- 無人值守升級。
- CSF-LFD 和 Maldet。
- Certbot 處理的 webapp confs。
- 我在 cron 中創建的即時和自動 cron 備份(在我的腳本中可用)。
- 自動發行版升級(比如從 Ubuntu 16.04 到 18.04 以及從 18.04 到 20.04 等等),無需我手動移動數據,即使使用
rsync
.- WordPress網站
- 命令行界面
- VPS 不超過 10 美元。
我不確定 Ansible 或 Salt 是否是答案(Ansible 在我看來並不是很容易學習,儘管它在市場上被傳言很容易學習,而且我擔心我沒有時間研究它在接下來的 3 個月內進行深入研究)。
我不確定 Azure 是否是答案(僅因為價格,我了解我想要的環境在 Azure 中至少要花費 15 美元)。
也許我需要一個在每個基本方面都具有持續傳遞能力的發行版(假設有一個)。
基本上就是這樣的故事。
好的 CI(持續集成)至少依賴於三件事:
- 腳本化部署
- 帶外測試環境
- 覆蓋整個表面的自動化測試。
你目前只有#1。另一個 VPS 可以作為 #2,但您沒有任何(明顯的)測試。
但在我們進一步討論之前,請簡要說明一下支持基於節奏的版本。
Ubuntu LTS 版本在發布後五年內獲得更新。不是每個包,而是 LEMP 所需的一切。這些更新支持來自未來版本的安全修復,因此您可以獲得帶有現代修復的舊主要版本(如果可能)。這意味著事情繼續進行。
滾動發布隨時更新所有內容。您不知道什麼時候會發生破壞配置的更改(例如 systemd),或者需要多少工作才能修復。如果您要自動安裝更新,這也意味著在時間需求上沒有可預測的間隔。
使用 Ubuntu LTS,您知道每 4-5 年您需要在伺服器上花費一兩個小時來指導它完成升級。您可以在下一個 LTS 發布後的 3 年內**選擇何時執行此操作。**這是一個主要特點,而不是一個缺陷。
對於你的作戰計劃,我會——也許是有爭議的——完全禁用自動更新,並用一個相對簡單的腳本替換它們:
- 啟動第二個 VPS(使用供應商的 API,因此您只需在執行時為其付費)。基於相同作業系統版本的模板(例如 Ubuntu 16.04,如果您的主 VPS 位於該模板上)。
- 更新到您的軟體的最新版本,部署您的東西並恢復數據庫
- 執行您的測試套件並報告所有服務的正面或負面
- 失敗時向您發送電子郵件,
apt dist-upgrade
成功時在主 VPS 上執行。如果您沒有獲得更新,獲得**響亮的回饋是關鍵。**是的,您也需要對其進行測試。
您可以遷移到 Ansible(等),但這不是您的主要問題。寫作測試是。
這是一項繁重的工作,但這些東西也讓你有利於擴大規模和擴大規模。如果您達到了擁有負載平衡集群的地步,您可以分離一個,對其進行更新並進行測試,然後再將其重新引入集群。