Unraid 上开一台 Ubuntu 虚拟机:从零到能干活的实录

这个站(stevenhome.com)就跑在家里 Unraid 上的一台 Ubuntu 虚拟机里。下面是从开箱到上线的完整过程,包括两个差点绊住人的坑。

机架上的网络和存储设备
机架设备示意图。

虚拟机配置

项目配置
系统Ubuntu 26.04 LTS
CPU / 内存中等配置,跑网站绰绰有余
硬盘几十 GB(开局只剩几 GB 可用,见下文)
网络桥接,内网 + Tailscale 双通道

跑个静态网站加一个小接口,这个配置绰绰有余。瓶颈不在 CPU 和内存,在硬盘 —— 一个全新的 Ubuntu 桌面镜像装完,几十 GB 的盘只剩几 GB。

坑一:12GB 的 snap 垃圾

查了一下磁盘占用:/snap 12GB,/usr 20GB。Ubuntu 桌面版预装了一堆 snap 应用:Firefox、Thunderbird、GNOME 组件、Snap Store……一台只跑网站的服务器根本用不上。处理办法:

for s in firefox thunderbird snap-store firmware-updater \
  desktop-security-center gnome-42-2204 gnome-46-2404 \
  gtk-common-themes mesa-2404 bare core18 core20 core22 core24; do
  sudo snap remove --purge "$s"
done
sudo apt purge -y snapd
sudo rm -rf /snap /var/snap /var/lib/snapd ~/snap

再加上一轮 apt autoremove、清 apt 缓存、把系统日志压到 100MB、清 npm 缓存,硬盘从只剩几 GB 回到了十几 GB 空闲。

坑二:sudo 要密码

新建的用户默认 sudo 每次都要输密码,远程装软件很不方便。给这个用户免密 sudo,一行命令:

echo "你的用户名 ALL=(ALL) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/你的用户名

注意:这台虚拟机只在家庭内网 + Tailscale 里,风险可控。如果是直接暴露在公网的机器,别这么干。

SSH 密钥登录

密码登录又慢又不安全,改成密钥:把公钥写进虚拟机用户的 ~/.ssh/authorized_keys,之后登录不用输密码,自动化脚本也能连。公钥本身不是秘密(私钥才是),但也没必要贴出来 —— 生成自己的就行:ssh-keygen -t ed25519,把 .pub 那个文件的内容贴过去。

装网站:nginx + 一个小接口

网站本身是静态页面,nginx 托管;机票提醒的报名表单需要存数据,后面挂了一个 60 行的 Python 小服务(标准库 http.server,不依赖任何框架),只监听本机 127.0.0.1:8001,nginx 把 /api/ 转给它。报名数据写进一个 CSV 文件,没有数据库,没有外部依赖。

对外发布是怎么接上的

家里出口有一台 Nginx Proxy Manager:域名解析到家里公网 IP,路由器把 80 端口转发到 NPM,NPM 再按域名转发到这台虚拟机的内网地址:80。HTTPS 证书也是 NPM 里一键申请的 Let's Encrypt。虚拟机本身不直接暴露在公网上。

如果你也在 Unraid 上跑服务,记住两点就行:桌面版 Ubuntu 镜像先清 snap 再干活;虚拟机只留内网和 Tailscale 两个入口,对外发布交给反代去做。

下一篇:Plex 家庭影音库搭建:片源整理与远程观看

2026 年 11 月。命令以实测为准,不同 Ubuntu 版本的包名可能略有出入。