實用指南/Ubuntu 版本與架構

Ubuntu 版本與架構:先確認相容性

下單前,先依應用程式選擇 Ubuntu Linux VPS 的版本與架構。建立後驗證實際系統、候選套件及應用程式行為,確認收到的環境符合映像檔選擇時的要求。

・更新日期:・閱讀時間:約 6 分鐘

本篇目錄

建立伺服器前先選擇映像檔

列出應用程式及其擴充功能支援的作業系統、執行環境、資料庫與架構,也包含備份及監控代理程式。網站能運作,不代表必要的復原工具也支援所選平台。區分哪些條件由軟體廠商正式支援,哪些只是團隊自行測試過。

  1. 列出應用程式支援的 Ubuntu、執行環境及資料庫版本。
  2. 逐一確認原生擴充功能、容器映像檔及備份代理程式所需的架構。
  3. 依剩餘維護期限,縮小相容版本的選擇。
  4. 確認供應商在所需區域提供該 Ubuntu 映像檔與架構。
  5. 建立後以以下指令驗證映像檔;移轉資料或流量前,先測試應用程式。

以 Ubuntu 24.04 LTS 為例,其發行時預設使用 Python 3.12、PHP 8.3 及 PostgreSQL 16,修補版本會隨更新改變。相容於舊主要版本的軟體,不一定支援這些版本。維護時程見LTS 選擇表;本節重點是軟體組合是否相容。

辨識實際取得的映像檔

在 VPS 內執行以下唯讀指令,以辨識發行版、正在使用的核心、套件架構及機器架構。安裝更多軟體前,將結果連同部署筆記保存。

cat /etc/os-release
uname -r
dpkg --print-architecture
uname -m

小螢幕可左右捲動表格,查看所有欄位。

結果解讀方式
/etc/os-release 的 VERSION_ID已安裝的 Ubuntu 版本,例如 24.04
uname -r 顯示的核心目前執行中的核心;更新並重新啟動後可能改變
dpkg 的 amd64/uname 的 x86_6464 位元 x86 常見的套件與機器名稱
dpkg 的 arm64/uname 的 aarch6464 位元 Arm 常見的名稱

僅憑核心字串無法辨識 Ubuntu 版本或支援範圍;供應商可能使用雲端專用核心。不能假設僅支援 amd64 的二進位檔能在 arm64 原生執行,採用前應確認 Arm 版本或明確受支援的替代方式。

檢查映像檔的初始化方式

許多映像檔使用 cloud-init 安裝金鑰、建立帳號及設定網路。先確認是否存在,再查詢狀態。沒有 cloud-init 本身不代表故障;需了解供應商如何初始化該映像檔。

if command -v cloud-init >/dev/null 2>&1; then
    cloud-init status --long
else
    printf '%s\n' 'cloud-init is not installed; check the provider provisioning method.'
fi

running 代表設定仍在進行。即使 SSH 可用,error 或 degraded 仍需調查。有 cloud-init 時,查看相關紀錄:

sudo tail -n 50 /var/log/cloud-init.log
sudo tail -n 50 /var/log/cloud-init-output.log

初始化腳本可能輸出敏感值,分享紀錄前先遮蔽。不要只為消除錯誤而執行 cloud-init clean 或替換網路檔案。初始化完成也不代表應用程式、資料庫或備份工作正常,應分別驗證。

安裝前檢查候選套件

更新套件中繼資料,再檢查預計使用元件的候選版本。update 只更新索引,不會安裝這些應用程式套件。記錄候選版本及提供套件的套件庫。

sudo apt update
apt-cache policy python3 php postgresql
apt-cache policy python3.12 php8.3 postgresql-16

Installed: (none) 表示尚未安裝;候選版本為 (none) 表示目前套件來源未提供。先檢查名稱、架構及已設定的 Ubuntu 元件,不要任意新增套件庫。

php 與 postgresql 等中繼套件會選擇預設實作,也要查看帶版本號的套件。對已安裝軟體,確認實際執行檔或正在運作的服務。python3 --version 與 php --version 辨識的是對應執行檔;資料庫伺服器版本可能與用戶端工具不同。

實際走過相容性決策

假設某應用程式只支援 Python 3.10,而且原生擴充功能僅提供 amd64 版本。這是假設需求,不指涉特定產品。預設 Ubuntu 24.04 arm64 映像檔有兩處不符:預設 Python 是 3.12,擴充功能也針對另一種架構。

改用 amd64 能解決架構問題,卻不會改變預設 Python。虛擬環境使用建立它的直譯器來隔離套件,不能把 Python 3.12 變成 3.10。不要為了應用程式替換 Ubuntu 的系統 Python。

可以升級應用程式,或選擇另行維護、且有明確支援計畫的執行環境/容器。確認全部原生元件支援目標平台。較舊 Ubuntu 也有剩餘維護期限,並非必然解法。

驗收時,於測試環境執行擴充功能的程式路徑、資料庫操作、背景工作,以及完整備份/還原循環。記錄版本與應用程式組建。安裝成功或首頁能開啟,涵蓋範圍都不足以證明相容性。

把容器與套件支援納入規劃

容器能讓應用程式相依套件與 Ubuntu 預設套件分開,但仍依賴主機核心、儲存與網路。確認目標平台有受支援的容器映像檔。模擬執行會改變效能與支援假設,不應悄悄用來替代原生版本。

將資料持久化於有文件說明的磁碟區或外部儲存,並練習不依賴可丟棄容器的還原方式。固定版本或映像檔摘要以利重現,同時安排更新。永久固定的脆弱映像檔雖可重現,卻缺乏妥善維護。

區分 Ubuntu 版本支援與各已安裝套件的維護範圍。標準安全維護與 Ubuntu Pro 的涵蓋範圍不同;第三方套件庫、下載的二進位檔及容器映像檔各有維護者。記錄各層由誰更新,不要認為 Ubuntu 版本支援能涵蓋全部。

區分例行更新與版本升級

變更前,查看待更新套件與失敗服務。先更新套件中繼資料;以下指令只列出資訊,不會升級整個發行版。

apt list --upgradable
systemctl --failed
if [ -f /var/run/reboot-required ]; then cat /var/run/reboot-required; fi

在合適維護時段檢視並套用套件更新,再重做應用程式檢查。維護期間服務可能重新啟動。需要重新啟動的標記存在時很有用,但沒有標記也無法證明所有元件都已更新。

在副本或新建立的機器上測試版本升級,重新檢查執行環境、套件庫、資料庫升級要求與擴充功能。規劃最終資料同步及回復路徑,包含變更後的新寫入。升級前快照不可能包含之後產生的客戶訂單。

留下他人能重現的映像檔決策

小螢幕可左右捲動表格,查看所有欄位。

部署紀錄應保存的內容
作業系統版本、架構、核心及映像檔識別碼
應用程式環境組建、執行環境、鎖定檔及套件庫來源
初始化結果及不含機密的設定
驗收檢查已測流程、結果及尚未解決的失敗
維護套件負責人、更新時段及通知收件人
復原備份位置、程序與最後驗證還原時間

機密應另外保存,非機密設定可納入版本控制。重要相依元件改變時,另建環境重建驗證。公開雲端實驗可參考免費 Ubuntu VPS 設定;映像檔符合需求且準備發布後,請進行首次部署。

常見問題

Ubuntu 24.04 一定是最佳選擇嗎?

它是本指南的具體範例。請選擇整套軟體與供應商都支援的版本,並記錄剩餘維護期限。較新或較舊版本都可能需要修改應用程式。

更換映像檔可以保留資料嗎?

供應商的重新安裝通常會取代伺服器磁碟。先確認程序、匯出資料與設定並驗證還原。重新安裝與原地版本升級是不同操作。

映像檔、核心、套件及容器各有支援範圍。保留實測紀錄,別只依版本標籤判斷。

官方資料來源

  1. 文件 1:discourse.ubuntu.com
  2. 文件 2:ubuntu.com
  3. 文件 3:docs.cloud-init.io
  4. 文件 4:manpages.ubuntu.com
  5. 文件 5:docs.python.org
  6. 文件 6:ubuntu.com

相關指南