闲置笔记本改造成 Ubuntu 开发测试服务器最近把一台闲置的戴尔灵越 5580 改造成了家用开发测试服务器。目标很简单旧电脑放在家里长期运行通过 Windows 主力电脑远程连接用 Docker 部署一些测试服务、数据库、接口环境和练习项目。这次没有一上来选择 Ubuntu Server而是选择了Ubuntu Desktop 26.04 LTS。原因是家里只有 Wi-Fi而且我是第一次完整搭 Linux 服务器桌面版连接 Wi-Fi、调整电源设置、排查问题都更直观。一、硬件情况旧电脑配置大致如下型号Dell Inspiron 5580 内存约 12GB 硬盘 01TB HDD原 Windows 系统盘包含 C/D/E 硬盘 1120GB 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 OptionUEFI 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 SSDUbuntu 安装目标盘 sdc 31GB U 盘安装介质最终分区结果sdb1VFAT104MB挂载 /boot/efi不格式化 sdb2Ext4约 119GB挂载 /格式化 Boot loader installationsdb Netac SSD 120GB安装确认页中重点看这些信息Type of installationManual installation Installation diskNetac SSD 120GB sdb sda1Unchanged确认没有格式化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。查看服务器 IPipa当时 Wi-Fi 地址是192.168.x.xxWindows 上可以连接ssh server192.168.x.xx六、使用 dev-server.local 代替固定 IP因为路由器不是自己的不方便做 DHCP 静态绑定所以没有在路由器里固定 IP。后来测试发现 Windows 可以解析主机名ping dev-server.local所以后续优先使用dev-server.localMobaXterm、VS Code Remote SSH 都可以直接用这个主机名连接Hostdev-server.local Usernameserver Port22这样即使路由器以后给服务器分配了新的 IP只要局域网主机名解析正常就不用重新记 IP。七、安装 MobaXterm 和 VS Code Remote SSHMobaXterm 用来日常管理服务器保存 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意思用管理员权限编辑系统登录管理配置。增加或修改HandleLidSwitchignore HandleLidSwitchExternalPowerignore HandleLidSwitchDockedignore含义HandleLidSwitchignore合盖时忽略不休眠 HandleLidSwitchExternalPowerignore插电时合盖也不休眠 HandleLidSwitchDockedignore外接设备时合盖也不休眠重启相关服务sudosystemctl restart systemd-logind意思重启登录管理服务让配置生效。最后用 Windows 持续 pingping dev-server.local合盖后仍能 ping 通说明网络没有断。十一、用 Docker Compose 部署一个小网页创建项目目录mkdir-p~/projects/nginx-democd~/projects/nginx-demo意思mkdir -p创建目录存在也不报错 cd进入目录创建index.html!doctypehtmlhtmllangzh-CNheadmetacharsetutf-8titledev-server/title/headbodyh1Hello from dev-server/h1p这是我的旧笔记本服务器。/p/body/html创建compose.yamlservices:web:image:nginx:latestcontainer_name:nginx-demoports:-8080:80volumes:-./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就可以变成一台很实用的开发测试服务器。最重要的是先完成最小闭环能远程连 能跑容器 能在浏览器访问服务 能合盖稳定运行完成这个闭环后数据库、测试平台、自动化服务都可以慢慢往上加。