闲置笔记本改造成 Ubuntu 开发测试服务器
最近把一台闲置的戴尔灵越 5580 改造成了家用开发测试服务器。目标很简单:旧电脑放在家里长期运行,通过 Windows 主力电脑远程连接,用 Docker 部署一些测试服务、数据库、接口环境和练习项目。
这次没有一上来选择 Ubuntu Server,而是选择了Ubuntu Desktop 26.04 LTS。原因是家里只有 Wi-Fi,而且我是第一次完整搭 Linux 服务器,桌面版连接 Wi-Fi、调整电源设置、排查问题都更直观。
一、硬件情况
旧电脑配置大致如下:
型号:Dell Inspiron 5580 内存:约 12GB 硬盘 0:1TB HDD,原 Windows 系统盘,包含 C/D/E 硬盘 1:120GB SSD,原 F 盘 网络:家里只有 Wi-Fi 主力电脑:Windows一开始查看任务管理器时发现,Windows 系统主要装在机械硬盘上,HDD经常 100%,这也是电脑明显卡顿的主要原因之一。
最终决定:
Ubuntu 安装到 120GB SSD 1TB HDD 上的 Windows 和原数据尽量保留二、制作 Ubuntu 启动 U 盘
准备工具:
Ubuntu Desktop 26.04 LTS ISO Rufus 32GB U 盘Rufus 参数选择:
分区类型:GPT 目标系统:UEFI(非 CSM) 文件系统:FAT32 持久分区:0这里有一个坑:第一次使用ISO 镜像模式写入后,Windows 可以正常打开 U 盘,但旧电脑的 F12 启动菜单里一直看不到 U 盘启动项。
后来用 Rufus 重新写入,并选择DD 镜像模式,旧电脑才成功识别出启动项:
UEFI: VendorCoProductCode 2.00, Partition 2经验总结:
如果 U 盘在 Windows 能打开,但 BIOS/F12 不显示启动项,可以尝试 DD 镜像模式。 如果仍然不行,换一个 U 盘通常更快。三、BIOS 与 BitLocker 问题
旧戴尔电脑:
F12:进入启动菜单 F2:进入 BIOSBIOS 里确认过:
USB Boot Support:开启 Enable External USB Port:开启 Boot List Option:UEFI Secure Boot:保持开启中途曾尝试关闭Secure Boot,结果 Windows 触发了 BitLocker 恢复:
这个现象不是系统坏了,而是 Windows 检测到启动安全环境变化后,触发了 BitLocker 保护。后来重新进入 BIOS,把Secure Boot打开,Windows 就恢复正常了。
这次安装 Ubuntu 后面没有再关闭 Secure Boot。
四、安装 Ubuntu 到 SSD
进入 Ubuntu 安装器后,前面几项大致这样选:
语言:English 安装方式:Install Ubuntu 安装类型:Interactive installation 应用选择:Default selection 第三方驱动和媒体格式:勾选 时区:Asia/Shanghai到了磁盘页面时,不能直接选Erase disk and install Ubuntu,因为电脑里有两块硬盘,选错就可能清掉原 Windows 盘。
所以选择:
Manual installation
在分区页面看到的磁盘大致是:
sda = 1TB HDD,原 Windows 盘,不能动 sdb = 120GB Netac SSD,Ubuntu 安装目标盘 sdc = 31GB U 盘,安装介质最终分区结果:
sdb1:VFAT,104MB,挂载 /boot/efi,不格式化 sdb2:Ext4,约 119GB,挂载 /,格式化 Boot loader installation:sdb Netac SSD 120GB安装确认页中重点看这些信息:
Type of installation:Manual installation Installation disk:Netac SSD 120GB sdb sda1:Unchanged确认没有格式化sda后,再点击安装。
安装完成后点击Restart now,并按提示拔掉 U 盘。
五、开启 SSH 远程连接
进入 Ubuntu 后,先更新系统并安装 SSH。
sudoaptupdate意思:更新软件源信息。
sudoaptupgrade-y意思:升级已安装软件,-y表示自动确认。
sudoaptinstallopenssh-server-y意思:安装 SSH 服务,让 Windows 可以远程连接 Ubuntu。
sudosystemctlenable--nowssh意思:设置 SSH 开机自启,并立即启动 SSH 服务。
一开始我误输入了:
aptupdate结果报权限错误:
Permission denied原因是更新系统需要管理员权限,前面必须加sudo。
查看服务器 IP:
ipa当时 Wi-Fi 地址是:
192.168.x.xxWindows 上可以连接:
ssh server@192.168.x.xx六、使用 dev-server.local 代替固定 IP
因为路由器不是自己的,不方便做 DHCP 静态绑定,所以没有在路由器里固定 IP。
后来测试发现 Windows 可以解析主机名:
ping dev-server.local所以后续优先使用:
dev-server.localMobaXterm、VS Code Remote SSH 都可以直接用这个主机名连接:
Host:dev-server.local Username:server Port:22这样即使路由器以后给服务器分配了新的 IP,只要局域网主机名解析正常,就不用重新记 IP。
七、安装 MobaXterm 和 VS Code Remote SSH
MobaXterm 用来日常管理服务器:
保存 SSH 连接 自带 SFTP 文件管理 可以拖拽上传文件 多标签终端方便看日志VS Code Remote SSH 用来远程开发。连接成功后,VS Code 左下角会显示:
SSH: dev-server.local这表示 VS Code 当前已经连到 Ubuntu 服务器,内置终端执行的命令也是在服务器上执行。
八、安装 Docker 和 Docker Compose
一开始尝试 Docker 官方安装脚本:
curl-fsSLhttps://get.docker.com|sudosh意思:下载 Docker 官方安装脚本,并用管理员权限执行。
但中途遇到:
curl: (35) Recv failure: Connection reset by peer原因是访问download.docker.com不稳定。解决办法是改用国内镜像源,比如清华源。
安装完成后,执行:
sudousermod-aGdockerserver意思:把server用户加入docker用户组。这样以后可以不加sudo直接执行 Docker 命令。
sudoreboot意思:重启系统,让用户组变更生效。
重启后验证:
docker--versiondockercompose version继续测试:
dockerrun hello-world意思:运行 Docker 官方测试镜像。如果能看到Hello from Docker!,说明 Docker 可以正常拉取镜像、创建容器并运行。
九、运行第一个 Nginx 服务
先用单条命令测试:
dockerrun-d--namenginx-test-p8080:80 nginx命令含义:
docker run:运行容器 -d:后台运行 --name nginx-test:容器名叫 nginx-test -p 8080:80:服务器 8080 端口映射到容器 80 端口 nginx:使用 nginx 镜像Windows 浏览器访问:
http://dev-server.local:8080如果能看到 Nginx 欢迎页,说明旧笔记本已经可以作为局域网 Web 服务器提供服务。
十、配置合盖不断网
笔记本当服务器,合盖后不能休眠,否则 SSH 会断、服务也会停。
先在 Ubuntu 图形设置里关闭自动休眠:
然后编辑系统配置:
sudonano/etc/systemd/logind.conf意思:用管理员权限编辑系统登录管理配置。
增加或修改:
HandleLidSwitch=ignore HandleLidSwitchExternalPower=ignore HandleLidSwitchDocked=ignore含义:
HandleLidSwitch=ignore:合盖时忽略,不休眠 HandleLidSwitchExternalPower=ignore:插电时合盖也不休眠 HandleLidSwitchDocked=ignore:外接设备时合盖也不休眠重启相关服务:
sudosystemctl restart systemd-logind意思:重启登录管理服务,让配置生效。
最后用 Windows 持续 ping:
ping dev-server.local合盖后仍能 ping 通,说明网络没有断。
十一、用 Docker Compose 部署一个小网页
创建项目目录:
mkdir-p~/projects/nginx-democd~/projects/nginx-demo意思:
mkdir -p:创建目录,存在也不报错 cd:进入目录创建index.html:
<!doctypehtml><htmllang="zh-CN"><head><metacharset="utf-8"><title>dev-server</title></head><body><h1>Hello from dev-server</h1><p>这是我的旧笔记本服务器。</p></body></html>创建compose.yaml:
services:web:image:nginx:latestcontainer_name:nginx-demoports:-"8080:80"volumes:-./index.html:/usr/share/nginx/html/index.html:rorestart:unless-stopped含义:
services:定义服务 web:服务名 image:使用 nginx 镜像 container_name:容器名 nginx-demo ports:服务器 8080 端口映射到容器 80 端口 volumes:把本地 index.html 挂载到 Nginx 默认首页 restart: unless-stopped:除非手动停止,否则重启后自动恢复启动服务:
dockercompose up-d意思:根据compose.yaml后台启动服务。
查看状态:
dockercomposeps意思:查看当前 Compose 项目的容器状态。
浏览器访问:
http://dev-server.local:8080成功看到自定义页面后,这台旧笔记本就完成了从“闲置电脑”到“局域网开发测试服务器”的最小闭环。
十二、当前成果
目前已经完成:
Ubuntu Desktop 26.04 LTS 已安装 默认启动 Ubuntu Wi-Fi 可用 SSH 开机自启 MobaXterm 可远程管理 VS Code Remote SSH 可远程开发 Docker 可用 Docker Compose 可用 合盖不断网 可以通过 dev-server.local 访问 局域网 Web 服务可访问十三、后续可以继续做什么
后续可以继续扩展:
安装 Dozzle:浏览器查看 Docker 容器日志 部署 MySQL / PostgreSQL / Redis:作为开发测试数据库 配置 Samba:让 Windows 直接访问 Ubuntu 文件夹 搭建 Gitea:轻量级 Git 代码仓库 搭建 Jenkins / Runner:做自动化测试或 CI 配置 Tailscale:外网安全访问家里的服务器 继续学习 Docker Compose:部署多服务项目这次最大的收获是:旧笔记本不一定只能闲置。只要装好 Ubuntu、SSH 和 Docker,就可以变成一台很实用的开发测试服务器。
最重要的是先完成最小闭环:
能远程连 能跑容器 能在浏览器访问服务 能合盖稳定运行完成这个闭环后,数据库、测试平台、自动化服务都可以慢慢往上加。