操作指南/Ubuntu 版本与架构选择

Ubuntu 版本与架构:部署前检查兼容性

选择 Ubuntu Linux VPS 镜像时,先根据应用支持范围确定系统版本和 CPU 架构,再下单。实例创建后,还要检查实际系统、候选软件包和应用行为,确保拿到的环境符合预期。

· 更新: · 约 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

相关教程