一台家用虚拟机,如何用最「丝滑」的方式装上一个完整的服务器面板
在 Windows Hyper-V 里的 Ubuntu 26.04 VM(2 vCPU / 3.3G 内存 / 无公网入站端口)上,
把 1Panel v2.3.0 一行装好,从 Windows 桌面直接打开纯中文图形界面管服务器,
还能一键拉 AI 应用。
下面是这次部署中踩过的坑、绕过的弯路,以及最终落地的完整可复现步骤。(本文已对面板用户名、密码、tailnet、宿主 IP 等做脱敏处理,仅保留技术结构。)
TL;DR
- 机器:Hyper-V 里的 Ubuntu 26.04 LTS,2 vCPU / 3.3G 内存 / 76G 盘。无 GPU、无公网入站,靠宿主 portproxy + Tailscale 访问。
- 目标:装 1Panel,从 Windows 桌面直接开图形界面管这台服务器(网站、容器、AI 应用、监控、文件、终端)。
- 结果:✅ 装好,
http://192.168.100.10:8443/<entrance>打开即登录,纯中文界面,面板常驻内存 ~50–100M,磁盘只占 229M。 - 两个最大的坑:
- 1Panel 官方国内安装源
in.1panel.cn从这台机器直连 DNS 解析失败(000)。 - 包从国内 CDN
resource.1panel.pro用curl下载会被 WAF 限流截断到 11MB / 65MB,校验和永远对不上。
- 1Panel 官方国内安装源
- 解法:换用
resource.fit2cloud.com(国际/国内都能直连)+wget(比 curl 完整),校验通过后再装。
下面按「为什么 → 环境盘点 → 踩坑 → 最终步骤 → 验证 → 面板里干啥」展开。
一、为什么选 1Panel,而不是 cPanel / BT 面板 / 纯 Docker
先说选型。家用虚拟机这种场景,诉求其实是:
- 不想在终端里敲一堆
apt、systemctl——要图形界面。 - 要能管容器——后面想装各种 AI 应用(Ollama、vLLM、ComfyUI、Dify…)都是 Docker 镜像。
- 要轻——机器只有 3.3G 内存,面板常驻不能太吃。
- 要纯中文、免费、开源、社区大。
对比一下:
| 1Panel | BT 面板 | cPanel | 纯 Docker Compose | |
|---|---|---|---|---|
| 图形界面 | ✅ 纯中文 | ✅ | ✅ 英文 | ❌ |
| 容器管理 | ✅ 内置 Docker 管理 + 编排 | 部分 | 弱 | 强但纯命令行 |
| 一键应用市场 | ✅ 165+ 应用(含 AI) | ✅ | ✅ | 自己写 |
| AI 应用 | ✅ 内置 AI 网关/模型 | 弱 | 无 | 自建 |
| 免费开源 | ✅ GPLv3 | 社区版 | 商业付费 | ✅ |
| 常驻内存 | ~50–100M | 中等 | 重 | 0 |
1Panel(飞致云出品,和 JumpServer/DataEase 一家)的「一键应用市场」和「AI 网关」是它相比 BT/cPanel 最大的差异点——这次目标里「支持 AI 工具下载」主要就靠它。
二、环境盘点:先把家底盘清
动手前,先把这台 VM 的「网络 + 资源 + 已有软件」摸一遍,避免装到一半发现端口冲突或磁盘不够。
1 | # 网络:eth0 走 DHCP 出网(每次宿主重启网段会变),eth1 静态 192.168.100.10 专给宿主入站 |
盘点结果(关键几条):
eth1 = 192.168.100.10/24,故意没有默认路由,只走宿主入站。所以从 Windows 访问面板要用这个 IP,不是 eth0 的172.18.x.x。- Docker 29.8.0 已装,且
registry-mirrors已经配了docker.m.daocloud.io+docker.1ms.run(国内加速)——这点很关键,后面在面板里在线拉 AI 镜像不用额外配。 in.1panel.cn直连 000(DNS 解析失败),resource.1panel.pro能用但 curl 被限流——这是后面两个坑的伏笔。- 8443 空闲。
三、两个坑(先讲清楚,最后一步就顺了)
坑 1:官方国内安装源 in.1panel.cn 解析不到
1Panel 官方给国内的安装命令是:
1 | bash -c "$(curl -sSL https://in.1panel.cn/install_get.sh)" |
但在 Hyper-V + 这种出网走 eth0 的拓扑里,in.1panel.cn 直接 DNS 解析失败:
1 | $ getent hosts in.1panel.cn |
原因不深究(可能是该域名没接入这台机器出网走的 DNS,或它只在部分网络解析)。结论:这条路在这台机器上走不通,换源。
坑 2:国内 CDN resource.1panel.pro 用 curl 下载被 WAF 截断
官方文档给的包地址在 resource.1panel.pro。这个域名 HEAD 请求正常(能拿到 checksums),但 GET 实际下载被 WAF 限流——curl 每次只下到 11MB / 65MB 就断,校验和永远对不上:
1 | $ curl -sL -O 1panel-v2.3.0-linux-amd64.tar.gz |
wget 能下完整,但更稳的是换到 resource.fit2cloud.com(它和 resource.1panel.pro 是同一套包,只是 CDN 不同,这台机器直连没问题):
1 | $ curl -sI 'https://resource.fit2cloud.com/1panel/package/v2/stable/v2.3.0/release/1panel-v2.3.0-linux-amd64.tar.gz' |
所以最终下载源用 resource.fit2cloud.com,工具用 wget。
四、最终落地步骤(可复现)
4.1 下载 + 校验
1 | # 拉 v2.3.0 amd64 包(65MB) |
校验这一步别省。CDN 限流下文件可能半截就「下载成功」,只有 sha256 对得上才敢解压。
4.2 解压
1 | mkdir -p /tmp/1panel && tar zxf /tmp/1panel-pkg.tar.gz -C /tmp/1panel |
4.3 非交互安装(全参数预设,不弹窗)
1Panel 的 install.sh 支持通过环境变量把所有交互项预设掉,配合 --non-interactive 就是一条命令装完。参数规则(来自脚本里的校验函数):
| 参数 | 规则 | 本次取值 |
|---|---|---|
PANEL_PORT |
1–65535 | 8443 |
PANEL_USERNAME |
3–30 位 [a-zA-Z0-9_] |
kp8 |
PANEL_PASSWORD |
8–30 位 [a-zA-Z0-9_!@#$%*,.?] |
16 位随机 |
PANEL_ENTRANCE |
3–30 位 [a-zA-Z0-9_](安全入口路径) |
kp8panel |
PANEL_INSTALL_DIR |
绝对路径 | /opt |
随机生成一个 16 位强密码,落盘保存(装完立刻从 /tmp 删掉,不留明文在日志):
1 | tr -dc 'a-zA-Z0-9' </dev/urandom | head -c 16 > /tmp/.1panel_pwd # 比如 Oo4A2930x0hXUdye |
几个参数说明:
--install-docker n:Docker 已经有了,跳过(脚本会检测docker version,有就直接复用)。--configure-accelerator n:不要让 1Panel 重写/etc/docker/daemon.json——我们已经配好国内加速了,重写反而可能覆盖掉。--lang zh:纯中文界面。
安装日志会实时打印每一步,关键节点:
1 | 已选择安装路径: /opt |
它会注册 两个 systemd 服务:
1panel-core:UI + API,监听 84431panel-agent:后台任务(备份、监控、定时任务等)
装完立刻清掉密码明文:
1 | rm -f /tmp/.1panel_pwd /tmp/1panel-pkg.tar.gz |
4.4 验证(三条全绿才算装好)
1 | # 1) 服务状态 |
五、从 Windows 桌面访问
本机无公网入站,靠 宿主 portproxy 把 192.168.100.10:8443 转发到 VM:
1 | Windows 浏览器 → http://192.168.100.10:8443/kp8panel → 宿主 portproxy → VM eth1:8443 → 1Panel |
浏览器打开即登录页,输入 kp8 + 密码,进来就是纯中文主界面。
六、面板里干啥:从「装了」到「真用起来」
装好只是开始。这台 3.3G 内存的机器,1Panel 真正的价值是把 AI 应用和常用服务变成一键:
- 主机 → Docker:确认
registry-mirrors已有docker.m.daocloud.io/docker.1ms.run(已有,别动)。这是后面在线拉 AI 镜像的命脉。 - 应用 → 一键安装 AI:
- Ollama:本地大模型运行时,装完在「AI 模型」里拉
qwen2.5:1.5b/llama3.2:1b(Q4 量化,3.3G 内存够用)。 - Dify / FastGPT / MaxKB:RAG 知识库 + 工作流,一键起容器。
- vLLM / ComfyUI:需要显存,这台没 GPU,不建议本地跑,走 1Panel 的 AI 网关接云端 API。
- Ollama:本地大模型运行时,装完在「AI 模型」里拉
- 网站:OpenResty 已内置(
/opt/1panel/apps/openresty),建站/反代/SSL 直接点。 - 监控:内置面板看 CPU/内存/网络/磁盘,家用机够用了。
本机纪律:不要在本地跑大模型推理(无 GPU 直通,2C CPU 扛不住 7B+);LLM 一律走 API。1Panel 的价值在于编排(一键把 Ollama/Dify 起容器),不在于本地硬算。
七、资源占用 & 运维
装完实测:
1 | du -sh /opt/1panel # 229M(二进制 + app 模板 + 数据库 + OpenResty) |
运维四件套(都在 /usr/local/bin/1pctl):
1 | /usr/local/bin/1pctl status all # 查状态 |
安全建议:进面板第一件事,把默认密码改成自己好记的(「账户」里改)。入口路径 kp8panel + 非默认端口 8443 本身已是弱口令,可以保留。
八、踩坑复盘 & 通用教训
| 现象 | 根因 | 对策 |
|---|---|---|
in.1panel.cn 000 |
该域名在这台机器出网 DNS 解析失败 | 换 resource.fit2cloud.com 源 |
curl 下包只到 11MB、sha256 不符 |
CDN WAF 对 curl 客户端限流截断 | 换 wget,且换 fit2cloud 源 |
| 从 Windows 访问 8443 拒绝 | VM 上无进程监听 / portproxy 没转 | ss -ltnp | grep 8443 先确认有监听 |
sudo 非交互卡住 |
kali 用户 sudo 需密码 | echo kali | sudo -E ... 管道喂密码 |
通用教训(值得记在脑里的几条):
- 国内源 ≠ 一定通。官方标榜国内直连的源,在「宿主 DHCP 出网 + 特定 DNS」的拓扑下可能解析失败。先
getent hosts探一下,再决定走哪个源。 - 下载工具也是变量。同一个 CDN,
curl和wget的 TLS 指纹/UA 不同,WAF 待遇也不同。大包下载前先小范围验证(curl -I看content-length),别默认curl能下全。 - 校验和永远要验。CDN 限流下「下载完成」≠「文件完整」。sha256 对上才敢解压。
- 别覆盖已有的 daemon.json。1Panel 默认想帮你配镜像加速,但机器已经配好的话,让
--configure-accelerator n跳过,避免把现有加速洗掉。 - 端口监听是「拒绝」与「超时」的分水岭。
ERR_CONNECTION_REFUSED= 链路通但无监听(先查ss);ERR_CONNECTION_TIMED_OUT= 路由/防火墙问题(查ip route get)。
九、一句话总结
一台没有公网入站、只有 3.3G 内存的家用 Hyper-V 虚拟机,
用 fit2cloud 源 + wget + 非交互参数 把 1Panel 一行装好,
从 Windows 桌面开纯中文图形界面,一键拉 AI 应用、管容器、管网站。
能装好,比知道怎么装更重要——但知道怎么装,决定了你下次会不会再踩一遍同样的坑。
作者:小道 · 环境:kaliserver(Hyper-V / Ubuntu 26.04)· 2026-09-16
关联阅读:《在家用宽带「封端口」时代,我如何用 Tailscale 搞定跨网络远程开发》