news 2026/9/30 12:51:32

Ubuntu Server 22.04 LTS 安装图解与初始化配置指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Ubuntu Server 22.04 LTS 安装图解与初始化配置指南

1. 装之前先算清楚:ubuntu server 2204 到底该不该现在上

先交代背景。ubuntu server 2204 说的是 Ubuntu Server 22.04 LTS(代号 Jammy Jellyfish),LTS 这几个字母是长期支持的意思,标准维护周期五年,配合扩展支持能拉得更久。很多人问我现在都出 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,但那是"能装完"的标准,不是"能用"的标准。你要是打算在这台机器上跑 Docker,2GB 内存会非常难受,容器一多就开始疯狂换页。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 下用sha256sum,Windows 下用 PowerShell 的Get-FileHash。我见过太多次因为镜像下载中断导致安装到一半报"无法读取介质"的情况,校验一遍能省掉后面半小时的排查。

还有个小细节:如果你准备在 VMware 里装,其实不一定非要下完整 ISO,但我不推荐用什么"迷你网络安装镜像"。泰山崩于前而色不变的前提是你手上有完整的本地安装介质,网络装一旦中途断网,你会卡在一个没法回退的界面里。

2. 安装介质准备与虚拟机参数怎么定

这一节把地基打牢。很多人装完系统才发现磁盘只有 20GB 或者网卡是 NAT 导致后面 SSH 连不上,返工的代价比前面多花十分钟检查大得多。我会按"做启动盘"和"建虚拟机"两条线讲,你按自己的场景挑一条走。

2.1 做启动 U 盘的正确姿势

物理机安装需要一个 8GB 以上的 U 盘,注意制作过程会把 U 盘上所有数据清空,先备份。Windows 下我一般用 Rufus,开源、单文件、免安装,界面上 Device 选你的 U 盘,Boot selection 选下载好的 ISO,Partition scheme 保持 GPT,Target 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 if=ubuntu-22.04.5-live-server-amd64.iso of=/dev/sdb bs=4M status=progress oflag=sync

执行完sync一下再拔盘。macOS 下dd的参数略有不同,bs=4m小写 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网段和掩码,不是单个 IP
Address192.168.1.100/24这台机器要用的固定 IP
Gateway192.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:这样的登录提示,说明系统已经正常启动了。用刚才设的用户名和密码登录进去,第一件事是确认网卡和 IP:

ip -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 -a

4.2 SSH 加固:从密码登录切到密钥登录

装完系统后你的 SSH 是允许密码登录的,这在公网上就是邀请别人来爆破。正确做法是配置密钥登录并关掉密码认证。流程是三步,顺序不能乱,顺序错了你会把自己锁在门外:

第一步,在你自己的电脑上(不是服务器)生成密钥对:

ssh-keygen -t ed25519 -C "your_email@example.com" # 一路回车,密钥默认存在 ~/.ssh/id_ed25519

我用 ed25519 而不是老的 RSA,因为它密钥更短、签名更快,现代 OpenSSH 都支持,安全性也足够。

第二步,把公钥推送到服务器:

ssh-copy-id -i ~/.ssh/id_ed25519.pub your_username@192.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 ssh

sshd -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/hosts

4.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 vim

init.defaultBranch main这一条是为了避免每次git init时看到那个"master 是默认分支名,已过时"的提示。core.editor设成你习惯的编辑器,不设的话某些操作会弹出 nano,用不惯的人会直接懵在界面里不知道怎么退出(提示:Ctrl+X 退出,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。不要动系统自带的这个 Python,Ubuntu 的很多系统工具依赖它,你去升级或替换它,轻则 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 ~/.bashrc

conda 的优势是它不只管 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 -v

nvm 的好处是nvm install 18/nvm use 20可以随时切换版本,不同项目用不同 Node 版本的需求轻松满足。npm 如果下载慢,可以换个 registry:

npm config set registry https://registry.npmmirror.com

5.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 a+r /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 组,省得每条命令都 sudo:

sudo 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_installation

mysql_secure_installation会依次问你几个问题:是否设置密码强度校验插件(个人环境选 no 省事)、是否设置 root 密码、是否移除匿名用户、是否禁止 root 远程登录、是否删除 test 数据库、是否重载权限表。除了密码强度那一项,其余全选 yes。

这里有个很多人被绕晕的点:在 Ubuntu 上执行sudo mysql能直接进,但换了普通用户或者用密码就进不去。原因是 MySQL 8.0 的 root 用户默认使用auth_socket认证插件,它检查的是"发起连接的 Linux 用户是不是 root",根本不管密码。要改成密码认证:

ALTER USER 'root'@'localhost' 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 'appuser'@'192.168.1.%' IDENTIFIED BY '强密码'; GRANT ALL PRIVILEGES ON appdb.* TO 'appuser'@'192.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 60

ServerAliveInterval 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_user=your_username [db] 192.168.1.101 ansible_user=your_username

然后测一下连通性:

ansible all -i ~/ansible/hosts.ini -m ping

返回"ping": "pong"就说明通了。这条命令背后的原理是:Ansible 通过 SSH 登录目标机,上传一小段 Python 脚本并执行,然后把结果收回来。所以目标机上有 Python 就行,不需要装任何 agent。这个特性让它在临时环境、容器、云主机上特别好用。刚开始你可能只有一台机器用不上,但等你有三台五台的时候,一条命令批量装软件、改配置、分发公钥,效率差距非常明显。

6. 踩过的坑:常见问题与排查速查

前面流程走通不代表后面就顺。我把这些年在这套组合上遇到的问题整理一下,按"安装阶段"和"运行阶段"分开,遇到问题直接查表。

6.1 安装阶段的高频故障

黑屏、花屏、卡在某个画面不动,是安装阶段最常见的三类问题。黑屏基本是显卡驱动或者显示模式的问题,在 GRUB 界面按e给内核参数加nomodeset能解决大多数。如果你用的是较新的独立显卡,还可以试试nomodeset acpi=off,但acpi=off会影响电源管理,装完系统后记得把这两个参数从 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 本身没什么难度,真正拉开差距的是装完之后那一小时的收尾工作,那部分才是决定这台机器能不能长期安心跑下去的关键。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/30 12:51:28

最大矩形与单调栈:LeetCode 85 二维矩阵降维解法全解析

1. 题目拆解&#xff1a;最大矩形到底在考什么1.1 题意速览与输入输出先花三十秒把题看清楚。LeetCode 85题"最大矩形"给的是一张二维的二进制矩阵&#xff0c;里面每个格子要么是0要么是1&#xff0c;要求在这个矩阵里找出一个“只包含1”的矩形区域&#xff0c;让它…

作者头像 李华
网站建设 2026/9/30 12:51:03

HCNA-VC实操能力:视讯系统端到端交付的最小能力基线

简介&#xff1a;本资源是面向华为HCNA-VC&#xff08;H11-851&#xff09;视讯工程师认证考生的专项备考资料&#xff0c;聚焦视讯系统基础原理、协议规范、设备配置与运维要点&#xff0c;适用于通信、音视频工程及ICT集成方向的技术人员夯实核心能力。文档为单个70KB的Word文…

作者头像 李华
网站建设 2026/9/30 12:50:44

云计算系统运维高技能人才缺口、能力标准与考核指标解析

简介&#xff1a;这份调研报告聚焦云计算系统运维高技能人才的市场现状与需求&#xff0c;面向企业技术管理者、人力资源从业者、职业院校师生以及云计算运维工程师&#xff0c;适用于人才盘点、招聘标准制定、课程设计和职业规划。报告基于调研指出运维人才供不应求&#xff0…

作者头像 李华
网站建设 2026/9/30 12:48:58

焊缝缺陷检测实战:CNN落地产线的6大关键环节

简介&#xff1a;本资源是一篇发表于《计算机测量与控制》2021年第7期的学术论文PDF&#xff0c;面向工业视觉检测工程师、深度学习初学者及焊接质量控制技术人员&#xff0c;聚焦激光焊接场景下焊缝表面缺陷&#xff08;如气孔、夹渣、未焊透等&#xff09;的自动化识别难题。…

作者头像 李华
网站建设 2026/9/30 12:48:58

论文查重与AI检测避坑指南:1元查重实测与正确工作流

又到毕业季&#xff0c;论文查重成了所有毕业生绕不过去的坎。群里天天有人问“哪个查重准”“免费查重会不会泄露论文”&#xff0c;还有人说“用AI写的论文会不会被看出来”。作为一个每年都要帮学弟学妹看论文的老学长&#xff0c;我今年实测了一款叫 Paperzz 的工具&#x…

作者头像 李华