1. 装之前先算清楚ubuntu server 2204 到底该不该现在上先交代背景。ubuntu server 2204 说的是 Ubuntu Server 22.04 LTS代号 Jammy JellyfishLTS 这几个字母是长期支持的意思标准维护周期五年配合扩展支持能拉得更久。很多人问我现在都出 24.04 了还装 22.04 是不是过时我的回答是看你要干什么。如果你是要跑一套已经在生产环境验证过的技术栈或者公司内部文档、脚本、Ansible role 全是按 22.04 写的那 22.04 反而是更省心的选择因为它的坑早被人踩完了社区里搜到的解决方案基本都是对的。这篇东西写给三类人第一类是刚接触 Linux 服务端、想在自己电脑上开个虚拟机练手的同学第二类是手上有一台旧机器或者一台云主机想从零装一套干净的服务器环境第三类是运维老手想找一份能直接抄的安装检查清单。我不会只给你点下一步就完事每个界面为什么这么填、哪个选项选错了后面会付出什么代价我都会讲清楚。关于图解这件事我这里的做法是把安装器界面上每一屏长什么样、有哪几个可选项、默认值是什么、光标停在哪儿用文字逐屏复述出来。你照着屏幕对照着看效果和自己截图标注是一回事而且文字版本能搜索、能复制比一张模糊的截图更实用。装一台服务器其实就两三个小时的事但选错分区方案或者漏勾 SSH 服务后面补起来能折腾你一整晚所以开头这十几分钟的决策值得认真对待。1.1 版本生命周期这笔账要算明白22.04 LTS 的标准支持到 2027 年 4 月之后进入 ESM 阶段还能延续。这意味着你现在装它至少还有一年多的常规安全更新对绝大多数个人项目、内网服务、教学环境来说完全够用。相比之下 24.04 虽然更新但一些第三方软件仓库、商业软件的适配还没完全铺开尤其是老版本的数据库客户端、某些国产中间件、还有一部分工业软件的 Linux 版官方给的安装文档往往还停留在 20.04/22.04。装服务器最怕的不是版本旧而是你遇到问题搜不到答案。另一个现实因素是硬件驱动。22.04 的内核版本是 5.15 系列对 2018 到 2023 年间的主流服务器网卡、RAID 卡、虚拟化半虚拟化驱动支持都很成熟。如果你手上是一台五六年前的二手服务器或者工控机22.04 的兼容性通常比 24.04 更好因为内核版本更接近硬件出厂年代的驱动生态。1.2 硬件和运行场景的匹配装之前先确认你的目标载体是哪一种这直接决定后面的操作路径运行场景推荐配置关键注意点VMware / VirtualBox 虚拟机2 核 CPU、4GB 内存、40GB 磁盘磁盘类型选 SCSI 或 NVMe别选 IDE物理机直装4 核、8GB 内存、120GB SSD提前备份原数据U 盘启动要关安全启动云主机重装按套餐走走控制台的镜像重装不用自己做 U 盘树莓派等 ARM 设备4GB 内存以上要下 arm64 镜像不是 amd64内存这块我有话说。官方最低要求写着 1GB但那是能装完的标准不是能用的标准。你要是打算在这台机器上跑 Docker2GB 内存会非常难受容器一多就开始疯狂换页。4GB 是我给新手的保底推荐8GB 以上才能比较舒服地同时跑几个服务。磁盘同理20GB 能装下系统和一点软件但 Docker 镜像、日志、数据库文件涨得非常快40GB 起步比较稳妥。1.3 镜像从哪下、下哪一个这件事新手最容易搞混Ubuntu 官网的下载页面会同时提供 Desktop 和 Server 两个版本还有 Live Server 和传统的 alternate 安装镜像。你要的是Ubuntu Server 22.04.x LTS 的 live-server 版本文件名形如ubuntu-22.04.5-live-server-amd64.iso体积大约 1.8GB 到 2GB。那个带-desktop字样的是带图形桌面的装完会占用更多资源服务端用不上。下载渠道建议只认官方 releases 目录或者国内的大学镜像站清华 TUNA、中科大 USTC、阿里云开源镜像站等这些站点同步的是同一份文件下载快而且不会被人塞东西。下完之后一定校验一下 SHA256官方页面会给出校验值Linux 下用sha256sumWindows 下用 PowerShell 的Get-FileHash。我见过太多次因为镜像下载中断导致安装到一半报无法读取介质的情况校验一遍能省掉后面半小时的排查。还有个小细节如果你准备在 VMware 里装其实不一定非要下完整 ISO但我不推荐用什么迷你网络安装镜像。泰山崩于前而色不变的前提是你手上有完整的本地安装介质网络装一旦中途断网你会卡在一个没法回退的界面里。2. 安装介质准备与虚拟机参数怎么定这一节把地基打牢。很多人装完系统才发现磁盘只有 20GB 或者网卡是 NAT 导致后面 SSH 连不上返工的代价比前面多花十分钟检查大得多。我会按做启动盘和建虚拟机两条线讲你按自己的场景挑一条走。2.1 做启动 U 盘的正确姿势物理机安装需要一个 8GB 以上的 U 盘注意制作过程会把 U 盘上所有数据清空先备份。Windows 下我一般用 Rufus开源、单文件、免安装界面上 Device 选你的 U 盘Boot selection 选下载好的 ISOPartition scheme 保持 GPTTarget system 选 UEFI其余默认点 START。如果弹出ISOHybrid image detected的提示选择以 ISO 镜像模式写入这样兼容性最好。Linux 下更简单一条命令搞定但盘符千万别写错写错就是把你的系统盘覆盖了# 先确认 U 盘设备名通常是 /dev/sdb 之类看容量和型号 lsblk -o NAME,SIZE,TYPE,MOUNTPOINT,MODEL # 卸载已挂载的分区如果有 sudo umount /dev/sdb* 2/dev/null # 写入镜像注意 of 后面是整盘设备不是分区 sudo dd ifubuntu-22.04.5-live-server-amd64.iso of/dev/sdb bs4M statusprogress oflagsync执行完sync一下再拔盘。macOS 下dd的参数略有不同bs4m小写 m并且要先diskutil list找到/dev/disk2这种整盘设备再操作。2.2 VMware 新建虚拟机的关键参数虚拟机的新建虚拟机向导里前面几步随便选真正影响后续的是自定义硬件那一步我一般这么配内存给 4096MB别开太大宿主机压力大也别给 2048MB 以下安装过程会明显卡顿。处理器给 2 核勾上虚拟化 Intel VT-x/EPT 或 AMD-V/RVI这一项关系到后面能不能在虚拟机里跑 Docker 和嵌套虚拟化。硬盘给 40GB存储为单个文件性能比拆成多个 2GB 文件好迁移也不容易丢块。网络适配器选NAT 模式。这是给新手最省心的选择虚拟机通过宿主机上网能访问外网宿主机也能通过 NAT 网段访问虚拟机。如果你选桥接模式虚拟机会在你的局域网里拿一个独立 IP好处是同一个 Wi-Fi 下的其他设备能直接连它坏处是公司网络里可能被 DHCP 策略限制或者被安全设备拦。等你有需求了再改。显示适配器不用管服务器安装全程是文本界面。但有个例外如果安装时出现黑屏或花屏把加速 3D 图形取消勾选试试。有个坑要提前说VMware 默认创建的虚拟磁盘是 SCSI 控制器某些老版本 VMware 在 22.04 下会报找不到磁盘。遇到这种情况把控制器改成 SATA 类型重试或者在虚拟机设置里把磁盘类型从LSI Logic换成LSI Logic SAS一般就正常了。2.3 引导启动时容易卡住的几个点虚拟机直接开机就行它会自动从 ISO 引导。物理机需要在开机时按 F2/F10/F12品牌不同按键不同进 BIOS 或启动菜单然后第一关闭 Secure Boot。22.04 其实是支持安全启动的但如果你后面要装某些第三方内核模块比如 VirtualBox 增强工具、部分显卡驱动开着它会报签名错误。图省事的话直接关掉装完再考虑要不要开。第二启动模式选 UEFI。现代主板默认就是 UEFI保持即可。如果引导菜单里同时看到 U 盘的 UEFI 项和传统 BIOS 项选带 UEFI 前缀的那个。第三如果开机直接进了原来的系统而不是安装界面说明启动顺序不对去 BIOS 的 Boot Order 里把 U 盘或者光驱调到第一位。进入安装界面后你会先看到 GRUB 菜单默认项是Try or Install Ubuntu Server。这里有个实用技巧如果安装过程中反复黑屏光标停在 GRUB 界面时按e键进入编辑模式在linux那一行的末尾加上nomodeset再按 F10 启动能绕过大部分显卡驱动导致的显示问题。3. 安装向导逐步走一遍文字版图解好正式进入安装界面。整个流程大概 15 到 25 分钟取决于你的磁盘速度和网络。下面我按屏幕顺序一屏一屏说。3.1 语言、键盘和安装类型选择第一屏是语言选择。列表里有 English、Chinese (Simplified) 等几十种。我的建议是选English。原因很实在安装器的中文翻译并不完整选了中文之后你会看到中英文混杂的界面关键词对不上搜报错信息时反而更麻烦。而且服务端日常操作全是英文输出早点适应没坏处。第二屏是键盘布局检测。安装器会提示你按几个键来识别或者让你手动从列表选。国内用户直接选English (US)就行物理键盘基本都是这个映射。如果你的键盘有特殊配列比如某些紧凑型键盘手动选对应的 Layout 再测试一下字符输入是否正常。这一步选错的后果是后面敲密码时某些符号打不出来登录都登不进去。第三屏是安装类型两个选项Ubuntu Server—— 完整版带一些常用工具。Ubuntu Server (minimized)—— 精简版只装最基础的东西装完再按需加。我一般选完整版。省下来的那几百 MB 空间意义不大但精简版可能会缺一些你后面马上要用的命令比如nano编辑器在某些精简配置里就没有你得先用vi顶着很别扭。3.2 网络配置DHCP 还是静态name servers 到底是什么第四屏是网络连接。你会看到系统识别出来的网卡列表虚拟机里通常叫ens33或ens160物理机上可能是enp3s0之类。每个网卡下面显示当前是通过 DHCP 拿到的 IP、网关。这里补一个很多人问的问题安装界面里的 Name servers 是什么意思它不是服务器名称也不是主机名而是DNS 解析服务器地址。当你在系统里访问www.example.com时系统需要先问一台 DNS 服务器这个域名对应的 IP 是多少Name servers 就是你填这些 DNS 服务器地址的地方。安装器默认会从 DHCP 那里继承宿主机或路由器下发的 DNS 地址一般不用改。如果你要手动指定国内常用的公共 DNS 有 223.5.5.5阿里、119.29.29.29腾讯或者直接用你公司内网的 DNS。填多个用逗号分隔。如果你要设静态 IP操作路径是选中网卡 - 回车 - 选Edit IPv4- 把DHCP改成Manual然后填四个字段字段示例值说明Subnet192.168.1.0/24网段和掩码不是单个 IPAddress192.168.1.100/24这台机器要用的固定 IPGateway192.168.1.1路由器地址写错就上不了网Name servers223.5.5.5DNS 地址Subnet 这一栏新手最容易填错成192.168.1.100。注意它是网段必须是192.168.1.0/24这种形式。填错的直接后果是网络配置校验失败安装器会提示你重填。选静态 IP 还是 DHCP我给你个判断标准如果这台机器只是你自己临时练手用 DHCP 就行省事。如果它要长期提供服务、要被其他机器通过固定地址访问、要写进 Ansible 的 inventory 文件那必须设静态 IP否则路由器重启一次 IP 变了你的所有配置全部失效。这是我踩过最多次的坑之一。3.3 代理、镜像源与安装源设置第五屏是代理地址Proxy address。内网环境需要走代理才能访问外网的话在这里填格式是http://用户名:密码代理地址:端口。没有就留空直接回车。第六屏是 Ubuntu 归档镜像源。默认值一般是http://cn.archive.ubuntu.com/ubuntu这个在国内访问速度还可以但不算最快。你可以在这里改成清华源https://mirrors.tuna.tsinghua.edu.cn/ubuntu或者阿里源https://mirrors.aliyun.com/ubuntu安装过程下载包的速度会明显快一截。这一步改不改都行因为装完之后你八成还要再改一次后面第 4 节会讲。但如果你现在网络环境访问默认源特别慢改一下能节省十几分钟。3.4 磁盘分区整盘自动还是手动布局第七屏是存储配置Storage configuration这是整个安装过程中最需要思考的一屏。两个选项Use an entire disk—— 整盘使用安装器自动帮你分区。Custom storage layout—— 手动分区。新手直接选第一个然后在下一屏勾上Set up this disk as an LVM group。LVM 是逻辑卷管理简单说就是把物理磁盘抽象成一层可以动态调整的池子。好处有两个一是以后磁盘空间不够了加一块新盘可以直接扩容到现有分区不用重装二是可以做快照升级前打个快照搞砸了秒回滚。这层抽象带来的那点性能损耗在服务端场景完全可以忽略。如果你要手动分区我给一套通用方案挂载点大小文件系统用途说明/boot/efi512MB ~ 1GBFAT32UEFI 引导分区UEFI 模式必须/boot1GBext4内核和引导文件只在使用 LVM 或加密时建议单独分/剩余全部ext4根分区装系统和软件swap内存大小或 4GBswap交换空间内存小于 8GB 建议单独分关于 swap 现在有个变化22.04 默认不再单独划交换分区而是用根目录下的一个/swap.img文件。文件形式的 swap 调整大小更方便性能差距在现代 SSD 上可以忽略。所以如果你选了自动分区看不到 swap 分区是正常的别慌。选完分区后安装器会弹出一个确认页面列出它准备执行的所有破坏性操作并且明确提示该磁盘上的数据将全部丢失。确认之前再核对一遍磁盘容量对不对尤其是物理机上同时插了多块盘的情况——我见过有人手一抖选错了数据盘几百 GB 资料没了。3.5 用户、主机名、SSH 与快照选择第八屏是创建用户。四个字段你的名字Your name可以随便写、服务器名称server name也就是主机名、用户名username、密码password。主机名建议用有意义的名字比如dev-01、db-test别用默认的ubuntu-server以后你管理多台机器时会感谢自己。用户名用全小写字母别用大写和特殊字符某些工具对用户名格式敏感。密码要设强一点因为这台机器一旦暴露在网络上弱密码会在几小时内被扫描到。第九屏是 Ubuntu Pro 订阅提示。个人使用直接选Skip for now它是付费的企业级支持服务对个人学习来说用不上。第十屏是 SSH 配置。这里一定要勾上Install OpenSSH server。勾了它装完就能直接用 SSH 从你的笔记本连过去不用在虚拟机窗口里敲命令。不勾的话你得先在本机登录再手动apt install openssh-server多绕一圈。下面还有个Import SSH identity的选项意思是允许从 GitHub 或 Launchpad 拉取你的公钥直接写进 authorized_keys如果你有现成的公钥可以填没有就选No装完再手动传。第十一屏是 Featured Server Snaps会列出 microk8s、nextcloud 等一堆打包好的应用。这里一个都不要选直接 Done。原因很简单你现在需要一个干净的系统这些 snap 包体积大、启动项多、和 apt 装的同名软件还会打架。需要什么后面自己装。3.6 安装过程与重启确认之后安装就开始了界面会显示一个进度列表依次下载并安装内核、基础系统、软件包。这一步耗时取决于网络10 到 20 分钟都算正常。安装日志在屏幕下方滚动curtin相关的报错信息会实时显示。安装完成后屏幕底部会出现Reboot Now。有件事必须做先拔掉 U 盘或者把虚拟机的 ISO 弹出否则重启后又会从安装介质引导你会以为系统没装上。虚拟机的话在 VMware 菜单里选虚拟机 - 设置 - CD/DVD - 取消勾选启动时连接。物理机拔 U 盘。重启后如果看到localhost login:这样的登录提示说明系统已经正常启动了。用刚才设的用户名和密码登录进去第一件事是确认网卡和 IPip -brief addr正常的话你会看到类似ens33 UP 192.168.1.100/24的输出。如果网卡显示DOWN或者没有 IP先别急着折腾往下看第 6 节的排查部分。4. 装完必须做的第一轮配置系统装好那一刻只是开始。下面这几件事我建议在装完的当天就做完别拖——拖到出问题的时候再补成本高好几倍。4.1 换源与系统更新先备份原始源文件再换成国内镜像这个顺序很重要改错了能一键还原# 备份 sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak # 替换为清华源22.04 代号是 jammy sudo sed -i s|http://cn.archive.ubuntu.com|https://mirrors.tuna.tsinghua.edu.cn|g /etc/apt/sources.list # 更新索引并升级 sudo apt update sudo apt -y upgrade注意apt upgrade和apt full-upgrade的区别前者只升级不删包后者为了满足依赖可能会卸载一些东西。日常维护用upgrade就够full-upgrade在跨大版本时再用。还有一个后台服务会跟你抢 apt 锁就是unattended-upgrades。它负责自动装安全更新默认是开着的。如果你在它正在跑的时候执行 apt 命令会看到Could not get lock /var/lib/dpkg/lock-frontend的报错。等几十秒重试就行别去kill它容易把 dpkg 状态搞坏。真卡住了用# 先看是谁占着锁 sudo lsof /var/lib/dpkg/lock-frontend # 确认没有 apt 进程在跑之后再手动恢复 sudo dpkg --configure -a4.2 SSH 加固从密码登录切到密钥登录装完系统后你的 SSH 是允许密码登录的这在公网上就是邀请别人来爆破。正确做法是配置密钥登录并关掉密码认证。流程是三步顺序不能乱顺序错了你会把自己锁在门外第一步在你自己的电脑上不是服务器生成密钥对ssh-keygen -t ed25519 -C your_emailexample.com # 一路回车密钥默认存在 ~/.ssh/id_ed25519我用 ed25519 而不是老的 RSA因为它密钥更短、签名更快现代 OpenSSH 都支持安全性也足够。第二步把公钥推送到服务器ssh-copy-id -i ~/.ssh/id_ed25519.pub your_username192.168.1.100执行时会让你输一次密码成功后再连一次应该就不需要密码了。第三步确认密钥登录已经生效之后再上服务器改配置关掉密码登录# 新建一个独立配置文件不直接改主配置方便回滚 sudo tee /etc/ssh/sshd_config.d/99-hardening.conf /dev/null EOF PermitRootLogin no PasswordAuthentication no PubkeyAuthentication yes MaxAuthTries 3 ClientAliveInterval 300 EOF # 先检查配置语法再重启服务 sudo sshd -t sudo systemctl restart sshsshd -t这一步千万别省。配置写错了直接重启服务起不来你的现有 SSH 会话一断就再也连不上了。如果真要出这种事只能去虚拟机的控制台或者物理机的键盘前面救。改完配置后建议新开一个终端窗口测试能否登录成功确认没问题了再关掉旧窗口。4.3 时区、主机名与时间同步服务器时间不对是个隐蔽但后果严重的问题。日志时间戳错乱、定时任务跑错点、HTTPS 证书校验失败、数据库主从同步报错根源经常就是时间。# 设置时区 sudo timedatectl set-timezone Asia/Shanghai # 查看当前时间同步状态 timedatectl status输出里重点看两行System clock synchronized: yes和NTP service: active。如果同步是 no检查一下是不是虚拟机暂停太久导致的时钟漂移装个systemd-timesyncd或者chrony都行sudo apt install -y chrony sudo systemctl enable --now chrony主机名改起来分两处只改一处不生效sudo hostnamectl set-hostname dev-01 # 同时把 /etc/hosts 里的旧名字也改掉否则 sudo 会卡几秒 sudo sed -i s/旧主机名/dev-01/g /etc/hosts4.4 打快照和建立备份习惯如果你在虚拟机里现在立刻打一个快照名字就叫fresh-install-2204。这是性价比最高的一步后面无论你把系统折腾成什么样回滚一次只要几十秒。等你装了 Docker、数据库、各种依赖之后快照体积会膨胀那时候再打就来不及了。物理机没有快照这一说那就至少做到重要配置文件改动前先cp xxx xxx.bak把/etc目录定期打包备份到另一台机器或移动硬盘。5. 一次性把基础开发环境搭好系统干净了接下来按需装工具。我按几乎所有服务器都要装到按场景选装的顺序排列你可以照单全收也可以跳过不需要的。5.1 Git 安装与全局配置sudo apt install -y git git config --global user.name 你的名字 git config --global user.email 你的邮箱 git config --global init.defaultBranch main git config --global core.editor viminit.defaultBranch main这一条是为了避免每次git init时看到那个master 是默认分支名已过时的提示。core.editor设成你习惯的编辑器不设的话某些操作会弹出 nano用不惯的人会直接懵在界面里不知道怎么退出提示CtrlX 退出Y 确认回车保存。如果你的代码仓库需要 SSH 认证在服务器上也生成一份密钥并添加到代码托管平台。服务器上的私钥权限必须是 600否则 SSH 会拒绝使用它ssh-keygen -t ed25519 -C server-dev-01 chmod 600 ~/.ssh/id_ed25519 cat ~/.ssh/id_ed25519.pub # 复制输出粘贴到平台的 SSH Keys 设置里顺便提一句 Git 的一个常见困惑git config --global写的配置存在~/.gitconfig只对当前用户有效--system写的存在/etc/gitconfig对所有用户有效不带参数写在当前仓库的.git/config只对这个仓库有效。三者的优先级是仓库 用户 系统搞不清顺序就会出现我明明配了邮箱提交记录里却是别人的名字这种问题。5.2 Python 环境系统 Python、venv 和小白该选哪个22.04 自带 Python 3.10.12。不要动系统自带的这个 PythonUbuntu 的很多系统工具依赖它你去升级或替换它轻则 apt 报错重则系统起不来。正确做法是用虚拟环境隔离项目依赖sudo apt install -y python3-pip python3-venv python3-dev build-essential # 建一个项目环境 python3 -m venv ~/venv/demo source ~/venv/demo/bin/activate # 激活后 pip 安装的东西都在这个环境里不会污染系统 pip install --upgrade pip pip install requests虚拟环境的核心价值是解决项目 A 要 Django 3.2项目 B 要 Django 4.2这种冲突。每个 venv 目录里都有一份独立的 Python 解释器软链接和独立的 site-packages互相看不见。用完deactivate退出。如果你做的是数据科学方向经常要在多个环境间切换那可以考虑 Miniconda# 下载安装脚本后执行安装过程中一路回车最后选 yes 初始化 bash Miniconda3-latest-Linux-x86_64.sh # 让配置生效或重新登录 shell source ~/.bashrcconda 的优势是它不只管 Python 包还能管非 Python 的二进制依赖比如 CUDA 库、MKL 数学库装 PyTorch 这类带原生扩展的包时比 pip 省心。缺点是它比较重一个基础环境就占几百 MB 到 1GB 空间纯 Web 开发用 venv 就够了。5.3 Node.js 与 npm别用 apt 装这是一个我强烈建议坚持的做法不要用sudo apt install nodejs。Ubuntu 仓库里的 Node 版本往往落后好几个大版本前端项目跑起来各种奇怪的语法报错最后排查半天发现是 Node 版本太老。推荐用 nvm 管理多版本# 安装 nvm curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash # 重新加载配置 source ~/.bashrc # 装一个 LTS 版本 nvm install --lts nvm use --lts nvm alias default node # 验证 node -v npm -vnvm 的好处是nvm install 18/nvm use 20可以随时切换版本不同项目用不同 Node 版本的需求轻松满足。npm 如果下载慢可以换个 registrynpm config set registry https://registry.npmmirror.com5.4 Docker 安装与必做的几项配置Docker 是服务器上最值得装的东西之一。注意同样不要用apt install docker.io那个版本旧且更新慢。要用官方仓库sudo apt install -y ca-certificates curl gnupg sudo install -m 0755 -d /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | \ sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg sudo chmod ar /etc/apt/keyrings/docker.gpg echo deb [arch$(dpkg --print-architecture) signed-by/etc/apt/keyrings/docker.gpg] \ https://download.docker.com/linux/ubuntu $(. /etc/os-release echo $VERSION_CODENAME) stable | \ sudo tee /etc/apt/sources.list.d/docker.list /dev/null sudo apt update sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin装完之后有两件事必做。第一把当前用户加进 docker 组省得每条命令都 sudosudo usermod -aG docker $USER # 重新登录后生效注意加入 docker 组等价于给了这个用户 root 权限因为可以挂载宿主目录到容器里。个人开发机没问题多人共用的服务器要谨慎。第二配置镜像加速和日志轮转。Docker 默认日志无限增长跑几个月能把磁盘写满这个坑非常多人踩sudo tee /etc/docker/daemon.json /dev/null EOF { log-driver: json-file, log-opts: { max-size: 50m, max-file: 3 } } EOF sudo systemctl daemon-reload sudo systemctl restart docker这段配置的意思是每个容器最多保留 3 个日志文件、每个最大 50MB单个容器日志上限 150MB。对于跑着几十个容器的机器来说这一条能救命。5.5 MySQL 安装与初始安全设置sudo apt install -y mysql-server sudo systemctl enable --now mysql sudo mysql_secure_installationmysql_secure_installation会依次问你几个问题是否设置密码强度校验插件个人环境选 no 省事、是否设置 root 密码、是否移除匿名用户、是否禁止 root 远程登录、是否删除 test 数据库、是否重载权限表。除了密码强度那一项其余全选 yes。这里有个很多人被绕晕的点在 Ubuntu 上执行sudo mysql能直接进但换了普通用户或者用密码就进不去。原因是 MySQL 8.0 的 root 用户默认使用auth_socket认证插件它检查的是发起连接的 Linux 用户是不是 root根本不管密码。要改成密码认证ALTER USER rootlocalhost IDENTIFIED WITH caching_sha2_password BY 你的强密码; FLUSH PRIVILEGES;改完之后sudo mysql反而进不去了得用mysql -u root -p。别慌这是正常的。22.04 仓库里的 MySQL 默认监听127.0.0.1:3306也就是只允许本机连接。如果你需要从别的机器访问得改bind-address和创建远程用户CREATE USER appuser192.168.1.% IDENTIFIED BY 强密码; GRANT ALL PRIVILEGES ON appdb.* TO appuser192.168.1.%; FLUSH PRIVILEGES;授权时把%写宽了比如appuser%就等于对整个网络开放公网环境下这是非常危险的。按需最小化授权这个习惯要养成。本地要连数据库做图形化管理的话装个 DBeaver 社区版就行开源免费支持 MySQL、PostgreSQL、SQLite 等一大堆数据库功能上完全够用不需要去找别的来路不明的客户端。5.6 VSCode 远程开发把服务器当本地用这个组合我用得最多强烈推荐。在你自己的电脑上装 VSCode然后装Remote - SSH扩展按 F1 输入Remote-SSH: Connect to Host填用户名192.168.1.100连上之后服务器就变成了一个远程工作区。你可以在本地编辑器的界面里浏览服务器文件、开终端、装服务器端的扩展、调试在服务器上运行的代码体验和本地几乎没有差别。想让连接更省事在本地电脑的~/.ssh/config里加一段Host dev-01 HostName 192.168.1.100 User your_username IdentityFile ~/.ssh/id_ed25519 ServerAliveInterval 60ServerAliveInterval 60会让客户端每分钟发一次心跳避免长时间不操作被网络设备掐断连接。之后 VSCode 里直接选dev-01就能连不用再敲 IP。5.7 Ansible 入门给以后管多台机器留个口子如果你手上不止一台机器或者打算以后扩展到多台Ansible 值得现在就装上。它是无代理的只需要能从控制机 SSH 到目标机就行sudo apt install -y ansible ansible --version建一个最简单的 inventory 文件# ~/ansible/hosts.ini [web] 192.168.1.100 ansible_useryour_username [db] 192.168.1.101 ansible_useryour_username然后测一下连通性ansible all -i ~/ansible/hosts.ini -m ping返回ping: pong就说明通了。这条命令背后的原理是Ansible 通过 SSH 登录目标机上传一小段 Python 脚本并执行然后把结果收回来。所以目标机上有 Python 就行不需要装任何 agent。这个特性让它在临时环境、容器、云主机上特别好用。刚开始你可能只有一台机器用不上但等你有三台五台的时候一条命令批量装软件、改配置、分发公钥效率差距非常明显。6. 踩过的坑常见问题与排查速查前面流程走通不代表后面就顺。我把这些年在这套组合上遇到的问题整理一下按安装阶段和运行阶段分开遇到问题直接查表。6.1 安装阶段的高频故障黑屏、花屏、卡在某个画面不动是安装阶段最常见的三类问题。黑屏基本是显卡驱动或者显示模式的问题在 GRUB 界面按e给内核参数加nomodeset能解决大多数。如果你用的是较新的独立显卡还可以试试nomodeset acpioff但acpioff会影响电源管理装完系统后记得把这两个参数从 GRUB 里去掉不然会有副作用。虚拟机里报 This kernel requires an x86-64 CPU, but only detected an i686 CPU意思是虚拟机的 CPU 类型没设对。在 VMware 里检查虚拟机设置 - 处理器确认没有勾选虚拟化 32 位之类的选项并且宿主机的 BIOS 里 Intel VT-x 或 AMD-V 是开启状态。安装到磁盘阶段报空间不足先确认你给的虚拟机磁盘是不是 20GB 以下。22.04 完整安装大约占 6 到 8GB但如果你勾了一堆 snap再加上系统预留空间20GB 会很紧张分区时就会失败。还有个比较隐蔽的安装界面能显示但键盘完全没反应。这通常是 USB 3.0 接口的兼容性问题把 U 盘换到 USB 2.0 接口通常是黑色那个口重试。6.2 运行阶段的网络和服务问题能 ping 通 IP 但域名解析失败这是 DNS 配置问题不是网络问题。先看当前的解析配置resolvectl status cat /etc/resolv.conf如果你手动改过/etc/resolv.conf却发现重启后又被改回去了那是正常的——这个文件在 22.04 上是由 systemd-resolved 动态生成的。想永久生效要改 netplan 配置sudo vim /etc/netplan/00-installer-config.yaml文件内容大概是这样的结构network: version: 2 ethernets: ens33: dhcp4: false addresses: - 192.168.1.100/24 routes: - to: default via: 192.168.1.1 nameservers: addresses: [223.5.5.5, 119.29.29.29]注意addresses下面那个短横线是 YAML 的列表语法缩进必须是空格不能是 Tab缩进错了会报解析错误。改完执行sudo netplan try # 试运行120 秒内没确认会自动回滚非常安全 sudo netplan apply # 确认没问题后正式应用netplan try这个命令是我最喜欢的防呆设计你在远程改网络配置一旦改错120 秒后它会自动恢复到旧配置你的 SSH 会话就还能救回来。直接apply是不带回滚的改错了就只能去控制台救。SSH 连不上按这个顺序排查先确认服务在跑systemctl status ssh再看端口监听ss -tlnp | grep 22然后检查防火墙sudo ufw status如果是 active 且没放行 22那就是它拦的sudo ufw allow 22/tcp最后确认虚拟机的网络模式NAT 模式下宿主机要访问虚拟机没问题但局域网其他设备访问需要配端口转发或者改桥接。6.3 问题速查表现象大概率原因处理方式安装黑屏显卡驱动/显示模式GRUB 加 nomodeset虚拟机不识别磁盘SCSI 控制器兼容性改 SATA 或 LSI Logic SAS装完重启又进安装界面未拔出安装介质弹出 ISO 或拔 U 盘apt 报 lock 错误unattended-upgrades 占用等待或查 lsof 后重试域名解析失败DNS 未正确配置改 netplan 的 nameservers手动改 resolv.conf 无效文件由服务动态管理改 netplan 而非直接改SSH 密码登录被拒已关闭密码认证用密钥登录或改配置磁盘无故写满Docker 日志膨胀配 log-opts 限制大小时间不准导致证书报错NTP 未同步装 chrony 并启用sudo 卡几秒才响应/etc/hosts 主机名不匹配同步修改 hosts 文件容器里 DNS 不通宿主 DNS 配置异常检查 daemon.json 与 resolvectl远程连接老掉线网络设备空闲超时SSH 配 ServerAliveInterval这张表建议存下来遇到问题先对一遍能省掉大量搜索时间。6.4 三条我反复验证过的经验第一条改动前先备份尤其网络和 SSH 配置。cp sshd_config sshd_config.20240101这种操作花两秒钟但它决定了你出问题时是五分钟解决还是通宵折腾。我在物理机上改错过一次网卡配置因为没法回滚最后只能用 U 盘进救援模式那次之后我所有的网络改动都用netplan try。第二条虚拟机要养成打快照的习惯但别依赖它。快照会让磁盘文件持续膨胀而且快照链太长之后性能明显下降。正确用法是在即将做有风险的操作前打一个验证完就删掉而不是攒十几个留着。第三条别急着把公网暴露出去。刚装好的系统还没有任何防护默认端口、默认配置就是攻击面。真要对外提供服务至少做到改 SSH 端口、禁 root 登录、上密钥认证、装 fail2ban 限制爆破、只开放必要端口。这些操作加起来不到二十分钟但能挡掉绝大部分自动化扫描。我在几台长期运行的机器上用的就是这个组合运行一年多没有出现被入侵的迹象日志里能看到大量爆破尝试全部被拦在门外说明这几层防护确实起作用。装一台 ubuntu server 2204 本身没什么难度真正拉开差距的是装完之后那一小时的收尾工作那部分才是决定这台机器能不能长期安心跑下去的关键。