闲置笔记本改造成 Ubuntu 开发测试服务器

闲置笔记本改造成 Ubuntu 开发测试服务器

最近把一台闲置的戴尔灵越 5580 改造成了家用开发测试服务器。目标很简单:旧电脑放在家里长期运行,通过 Windows 主力电脑远程连接,用 Docker 部署一些测试服务、数据库、接口环境和练习项目。

这次没有一上来选择 Ubuntu Server,而是选择了 Ubuntu Desktop 26.04 LTS。原因是家里只有 Wi-Fi,而且我是第一次完整搭 Linux 服务器,桌面版连接 Wi-Fi、调整电源设置、排查问题都更直观。

一、硬件情况

旧电脑配置大致如下:

text 复制代码
型号:Dell Inspiron 5580
内存:约 12GB
硬盘 0:1TB HDD,原 Windows 系统盘,包含 C/D/E
硬盘 1:120GB SSD,原 F 盘
网络:家里只有 Wi-Fi
主力电脑:Windows

一开始查看任务管理器时发现,Windows 系统主要装在机械硬盘上,HDD 经常 100%,这也是电脑明显卡顿的主要原因之一。

最终决定:

text 复制代码
Ubuntu 安装到 120GB SSD
1TB HDD 上的 Windows 和原数据尽量保留

二、制作 Ubuntu 启动 U 盘

准备工具:

text 复制代码
Ubuntu Desktop 26.04 LTS ISO
Rufus
32GB U 盘

Rufus 参数选择:

text 复制代码
分区类型:GPT
目标系统:UEFI(非 CSM)
文件系统:FAT32
持久分区:0

这里有一个坑:第一次使用 ISO 镜像模式 写入后,Windows 可以正常打开 U 盘,但旧电脑的 F12 启动菜单里一直看不到 U 盘启动项。

后来用 Rufus 重新写入,并选择 DD 镜像模式,旧电脑才成功识别出启动项:

text 复制代码
UEFI: VendorCoProductCode 2.00, Partition 2

经验总结:

text 复制代码
如果 U 盘在 Windows 能打开,但 BIOS/F12 不显示启动项,可以尝试 DD 镜像模式。
如果仍然不行,换一个 U 盘通常更快。

三、BIOS 与 BitLocker 问题

旧戴尔电脑:

text 复制代码
F12:进入启动菜单
F2:进入 BIOS

BIOS 里确认过:

text 复制代码
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 安装器后,前面几项大致这样选:

text 复制代码
语言:English
安装方式:Install Ubuntu
安装类型:Interactive installation
应用选择:Default selection
第三方驱动和媒体格式:勾选
时区:Asia/Shanghai

到了磁盘页面时,不能直接选 Erase disk and install Ubuntu,因为电脑里有两块硬盘,选错就可能清掉原 Windows 盘。

所以选择:

text 复制代码
Manual installation

在分区页面看到的磁盘大致是:

text 复制代码
sda = 1TB HDD,原 Windows 盘,不能动
sdb = 120GB Netac SSD,Ubuntu 安装目标盘
sdc = 31GB U 盘,安装介质

最终分区结果:

text 复制代码
sdb1:VFAT,104MB,挂载 /boot/efi,不格式化
sdb2:Ext4,约 119GB,挂载 /,格式化
Boot loader installation:sdb Netac SSD 120GB

安装确认页中重点看这些信息:

text 复制代码
Type of installation:Manual installation
Installation disk:Netac SSD 120GB sdb
sda1:Unchanged

确认没有格式化 sda 后,再点击安装。

安装完成后点击 Restart now,并按提示拔掉 U 盘。

五、开启 SSH 远程连接

进入 Ubuntu 后,先更新系统并安装 SSH。

bash 复制代码
sudo apt update

意思:更新软件源信息。

bash 复制代码
sudo apt upgrade -y

意思:升级已安装软件,-y 表示自动确认。

bash 复制代码
sudo apt install openssh-server -y

意思:安装 SSH 服务,让 Windows 可以远程连接 Ubuntu。

bash 复制代码
sudo systemctl enable --now ssh

意思:设置 SSH 开机自启,并立即启动 SSH 服务。

一开始我误输入了:

bash 复制代码
apt update

结果报权限错误:

text 复制代码
Permission denied

原因是更新系统需要管理员权限,前面必须加 sudo

查看服务器 IP:

bash 复制代码
ip a

当时 Wi-Fi 地址是:

text 复制代码
192.168.x.xx

Windows 上可以连接:

powershell 复制代码
ssh server@192.168.x.xx

六、使用 dev-server.local 代替固定 IP

因为路由器不是自己的,不方便做 DHCP 静态绑定,所以没有在路由器里固定 IP。

后来测试发现 Windows 可以解析主机名:

powershell 复制代码
ping dev-server.local

所以后续优先使用:

text 复制代码
dev-server.local

MobaXterm、VS Code Remote SSH 都可以直接用这个主机名连接:

text 复制代码
Host:dev-server.local
Username:server
Port:22

这样即使路由器以后给服务器分配了新的 IP,只要局域网主机名解析正常,就不用重新记 IP。

七、安装 MobaXterm 和 VS Code Remote SSH

MobaXterm 用来日常管理服务器:

text 复制代码
保存 SSH 连接
自带 SFTP 文件管理
可以拖拽上传文件
多标签终端方便看日志

VS Code Remote SSH 用来远程开发。连接成功后,VS Code 左下角会显示:

text 复制代码
SSH: dev-server.local

这表示 VS Code 当前已经连到 Ubuntu 服务器,内置终端执行的命令也是在服务器上执行。

八、安装 Docker 和 Docker Compose

一开始尝试 Docker 官方安装脚本:

bash 复制代码
curl -fsSL https://get.docker.com | sudo sh

意思:下载 Docker 官方安装脚本,并用管理员权限执行。

但中途遇到:

text 复制代码
curl: (35) Recv failure: Connection reset by peer

原因是访问 download.docker.com 不稳定。解决办法是改用国内镜像源,比如清华源。

安装完成后,执行:

bash 复制代码
sudo usermod -aG docker server

意思:把 server 用户加入 docker 用户组。这样以后可以不加 sudo 直接执行 Docker 命令。

bash 复制代码
sudo reboot

意思:重启系统,让用户组变更生效。

重启后验证:

bash 复制代码
docker --version
docker compose version

继续测试:

bash 复制代码
docker run hello-world

意思:运行 Docker 官方测试镜像。如果能看到 Hello from Docker!,说明 Docker 可以正常拉取镜像、创建容器并运行。

九、运行第一个 Nginx 服务

先用单条命令测试:

bash 复制代码
docker run -d --name nginx-test -p 8080:80 nginx

命令含义:

text 复制代码
docker run:运行容器
-d:后台运行
--name nginx-test:容器名叫 nginx-test
-p 8080:80:服务器 8080 端口映射到容器 80 端口
nginx:使用 nginx 镜像

Windows 浏览器访问:

text 复制代码
http://dev-server.local:8080

如果能看到 Nginx 欢迎页,说明旧笔记本已经可以作为局域网 Web 服务器提供服务。

十、配置合盖不断网

笔记本当服务器,合盖后不能休眠,否则 SSH 会断、服务也会停。

先在 Ubuntu 图形设置里关闭自动休眠:

然后编辑系统配置:

bash 复制代码
sudo nano /etc/systemd/logind.conf

意思:用管理员权限编辑系统登录管理配置。

增加或修改:

ini 复制代码
HandleLidSwitch=ignore
HandleLidSwitchExternalPower=ignore
HandleLidSwitchDocked=ignore

含义:

text 复制代码
HandleLidSwitch=ignore:合盖时忽略,不休眠
HandleLidSwitchExternalPower=ignore:插电时合盖也不休眠
HandleLidSwitchDocked=ignore:外接设备时合盖也不休眠

重启相关服务:

bash 复制代码
sudo systemctl restart systemd-logind

意思:重启登录管理服务,让配置生效。

最后用 Windows 持续 ping:

powershell 复制代码
ping dev-server.local

合盖后仍能 ping 通,说明网络没有断。

十一、用 Docker Compose 部署一个小网页

创建项目目录:

bash 复制代码
mkdir -p ~/projects/nginx-demo
cd ~/projects/nginx-demo

意思:

text 复制代码
mkdir -p:创建目录,存在也不报错
cd:进入目录

创建 index.html

html 复制代码
<!doctype html>
<html lang="zh-CN">
<head>
  <meta charset="utf-8">
  <title>dev-server</title>
</head>
<body>
  <h1>Hello from dev-server</h1>
  <p>这是我的旧笔记本服务器。</p>
</body>
</html>

创建 compose.yaml

yaml 复制代码
services:
  web:
    image: nginx:latest
    container_name: nginx-demo
    ports:
      - "8080:80"
    volumes:
      - ./index.html:/usr/share/nginx/html/index.html:ro
    restart: unless-stopped

含义:

text 复制代码
services:定义服务
web:服务名
image:使用 nginx 镜像
container_name:容器名 nginx-demo
ports:服务器 8080 端口映射到容器 80 端口
volumes:把本地 index.html 挂载到 Nginx 默认首页
restart: unless-stopped:除非手动停止,否则重启后自动恢复

启动服务:

bash 复制代码
docker compose up -d

意思:根据 compose.yaml 后台启动服务。

查看状态:

bash 复制代码
docker compose ps

意思:查看当前 Compose 项目的容器状态。

浏览器访问:

text 复制代码
http://dev-server.local:8080

成功看到自定义页面后,这台旧笔记本就完成了从"闲置电脑"到"局域网开发测试服务器"的最小闭环。

十二、当前成果

目前已经完成:

text 复制代码
Ubuntu Desktop 26.04 LTS 已安装
默认启动 Ubuntu
Wi-Fi 可用
SSH 开机自启
MobaXterm 可远程管理
VS Code Remote SSH 可远程开发
Docker 可用
Docker Compose 可用
合盖不断网
可以通过 dev-server.local 访问
局域网 Web 服务可访问

十三、后续可以继续做什么

后续可以继续扩展:

text 复制代码
安装 Dozzle:浏览器查看 Docker 容器日志
部署 MySQL / PostgreSQL / Redis:作为开发测试数据库
配置 Samba:让 Windows 直接访问 Ubuntu 文件夹
搭建 Gitea:轻量级 Git 代码仓库
搭建 Jenkins / Runner:做自动化测试或 CI
配置 Tailscale:外网安全访问家里的服务器
继续学习 Docker Compose:部署多服务项目

这次最大的收获是:旧笔记本不一定只能闲置。只要装好 Ubuntu、SSH 和 Docker,就可以变成一台很实用的开发测试服务器。

最重要的是先完成最小闭环:

text 复制代码
能远程连
能跑容器
能在浏览器访问服务
能合盖稳定运行

完成这个闭环后,数据库、测试平台、自动化服务都可以慢慢往上加。

相关推荐
拾贰_C2 小时前
【OpenAI | Ubuntu | environment | env configuration】Ubuntu 怎么/如何配置环境变量
linux·运维·ubuntu
同聘云2 小时前
阿里云国际站服务器DNS服务器设置成什么?服务器dns怎么填写?
服务器·阿里云·云计算·云小强
小此方2 小时前
Re:Linux系统篇(六)权限篇 · 一:用户切换与进程嵌套&&sudo提权与sudoers设置精讲
linux·运维·服务器
原来是猿2 小时前
Linux线程同步与互斥(五):线程池的全面实现
linux·服务器·开发语言
嵌入式×边缘AI:打怪升级日志2 小时前
从零开始学习 Linux SPI 驱动开发(基于 IMX6ULL + TLC5615 DAC)
linux·驱动开发·学习
feng_you_ying_li2 小时前
linux之进程控制
linux
Mr_pyx2 小时前
CompletableFuture 使用全攻略:从异步编程到异常处理
linux·前端·python
开开心心_Every2 小时前
跨平台高速下载工具,支持浏览器功能强大
运维·服务器·随机森林·pdf·电脑·逻辑回归·excel
拾贰_C2 小时前
【OpenAI | Ubuntu | bigmodel】 openai规范配置bigmodel(zhipu)大模型api
linux·运维·ubuntu