Skip to content

独立开发的基础建设:重新规划网络、虚拟化与本地算力

决定独立开发之后,我没有立刻把全部时间都投入业务代码。

在真正开始长期开发一款产品之前,我先重新整理了自己的基础设施:升级网络、增加服务器、重新安装虚拟化平台,并重新规划数据库、存储、网关和本地大模型的运行环境。

这些工作短期内不会直接产生产品功能,却会影响后续的开发、部署、测试、数据安全和运维效率。

为什么重新建设开发环境

过去,我的设备和服务更多是为了学习而搭建。

想学习一项技术,就创建一台虚拟机;想测试一个服务,就临时部署一个环境。即使把系统搞崩了,也可以直接重装。

但现在开始独立开发,环境的目标已经发生了变化。

它不再只是一个用于学习和实验的家庭实验室,而是要逐渐承担产品开发、内部测试、数据存储、模型运行和服务部署等任务。

以前可以接受环境随时重装,今后则需要更多地考虑稳定性、数据安全、故障恢复和长期维护。

因此,我决定将整个环境重新规划一次。

将网络升级为企业级结构

首先调整的是网络。

原来家里使用的是华为 Q6 路由器套装,能够满足日常上网需求。但随着服务器、NAS、数据库、大模型和远程访问设备逐渐增加,普通家庭路由器在网络隔离和精细化管理方面开始显得不足。

这次,我将原有设备更换为爱快企业级路由器,并搭配爱快 AX3000 AP,开始按照更接近企业网络的方式规划整个环境。

在选购设备之前,我研究和比较了几套方案:

  • 飞塔
  • UniFi UCG 系列
  • 爱快路由器与 AP 套装
  • 自建 OPNsense 软路由

飞塔的能力比较完整,但整体成本较高;UniFi 的产品设计和管理体验很好,但整套设备的投入也不低。

现阶段,我最需要解决的是 VLAN、网段隔离、访问控制和多设备统一管理,并不需要一开始就追求完整的企业安全体系。

综合预算和实际需求后,我最终选择了爱快。

同时,我还购置了一台配备 5 个 2.5G 网口和 16GB 内存的软路由主机。

原本购买一套 UCG 设备的预算,被拆分成了两部分:一部分用于当前稳定使用的爱快路由器和 AP,另一部分用于软路由主机。

这样既能先解决当前网络的实际问题,也保留了一台可以长期学习和测试 OPNsense 的独立设备。必要时,这台主机还可以作为备用网关使用。

这次升级的目的,不是把家庭网络做得过度复杂,而是希望建立一个边界清晰、容易维护的基础网络。

例如:

  • 开发设备使用独立网段
  • 服务器使用独立网段
  • 存储设备限制访问范围
  • 不同 VLAN 之间通过规则控制访问
  • 对外服务通过统一入口暴露
  • 远程访问通过 VPN 进入内网
  • 不需要公网访问的服务不直接开放端口

当环境中只有一两台电脑时,这些设计可能显得多余。

但当数据库、NAS、大模型、代码仓库、测试服务和远程办公设备逐渐增加后,网络本身也会成为整个系统的一部分。

从 ESXi 迁移到 PVE

这次调整中的另一个重要决定,是停止使用 ESXi 8,将几台虚拟化主机统一迁移到 Proxmox VE,也就是 PVE。

过去使用 ESXi,主要是为了学习企业虚拟化平台。

它帮助我理解了虚拟机、虚拟交换机、存储管理和资源分配等基础概念,也让我对虚拟化环境有了更完整的认识。

但现在,我已经不再只是处于体验和学习阶段。

对于需要长期使用的基础设施,我更希望选择授权清晰、能够持续维护,并且适合个人开发者和小型团队使用的平台。

尊重软件厂商的知识产品和授权模式,也是技术选型的一部分。

因此,这次我重新安装了所有主机,并统一使用 PVE。

选择 PVE,主要基于以下几个原因:

  • 基于 Debian,系统和生态比较熟悉
  • 同时支持 KVM 虚拟机和 LXC 容器
  • Web 管理界面完整
  • 备份、快照和迁移能力比较完善
  • 社区活跃,相关资料丰富
  • 适合家庭实验室和小型开发环境
  • 后续可以扩展为多节点环境

统一虚拟化平台以后,主机之间的管理方式、虚拟机模板、备份流程和网络配置也可以逐渐标准化。

相比同时维护多套虚拟化平台,这种方式更适合当前阶段。

三台主机的职责划分

这次一共规划了三台主机。

它们不会组成一个追求高可用的大型集群,而是按照不同用途进行资源隔离。

32GB 主机:基础服务节点

新增加的一台 32GB 内存主机,主要用于运行需要长期保持稳定的基础服务,包括:

  • MySQL
  • PostgreSQL
  • Redis
  • NAS 和存储相关服务
  • 内部代码仓库
  • Docker 服务
  • DDNS
  • VPN 服务
  • 监控和日志
  • 产品开发与测试环境

这台主机更关注稳定性。

数据库、存储和内部服务不需要大量计算资源,但需要长期运行,并且要有清晰的备份和恢复方案。

因此,我会尽量减少在这台主机上进行高风险实验,把它作为整个开发环境的基础服务节点。

产品开发阶段使用的数据库、代码仓库和内部服务可以先运行在这里。以后正式产品上线时,再根据实际情况迁移到云服务器或独立的生产环境。

64GB 主机:计算与开发节点

原来的一台主机只有 16GB 内存,这次将它升级到了 64GB。

升级后的主要用途,是运行对内存和计算资源要求较高的环境,包括:

  • 本地大语言模型
  • Ollama
  • Open WebUI
  • 向量模型
  • Ubuntu Server
  • Ubuntu Desktop
  • Windows 开发环境
  • AI Agent 和 RAG 实验
  • 临时开发与测试虚拟机

这台主机的定位不是承载稳定的基础服务,而是负责 AI 算力、开发和实验。

虽然内存已经升级到 64GB,但它并不意味着可以同时运行所有环境。实际使用时,通常只会同时启动一到两台虚拟机。

如果运行本地大模型,尤其是体量较大的量化模型,往往会占用大部分可用内存。这种情况下,通常只保留大模型所在的 Ubuntu Server,暂停 Windows、Ubuntu Desktop 和其他实验环境。

因此,这台主机更像是一个可以按需切换用途的计算节点:

  • 需要运行大模型时,优先分配资源给 Ubuntu Server
  • 需要 Windows 开发时,关闭不使用的模型环境
  • 需要桌面 Linux 实验时,再切换到 Ubuntu Desktop
  • 临时测试结束后,及时释放虚拟机资源

这样的规划并不是为了同时运行尽可能多的服务,而是为了在不同任务之间灵活调配资源。

即使某个模型或实验环境出现问题,也不会影响数据库、NAS 和其他长期运行的服务。

16GB 五网口主机:网络实验节点

新增加的另一台主机配备了 5 个 2.5G 网口和 16GB 内存。

这台主机同样安装 PVE,主要用于创建 OPNsense 等网络虚拟机,学习和实践更接近企业环境的网络架构,包括:

  • OPNsense
  • 路由与防火墙
  • VLAN
  • VPN
  • 多网口隔离
  • 网络策略实验
  • 流量监控
  • 网关备份与切换验证

对于软路由来说,16GB 内存已经比较充足。

使用 PVE 后,除了运行 OPNsense,还可以根据需要增加网络监控、DNS 或其他辅助服务。

将网络实验独立出来,也可以避免频繁调整路由和防火墙配置时,影响数据库和开发环境。

现阶段,爱快设备负责日常网络的稳定运行,这台软路由主机则主要承担学习、测试和备用职责。

为什么不把所有服务放在一台主机上

从资源利用率来看,把所有服务运行在一台大内存主机上,似乎更加简单。

但这种方案有一个明显问题:故障影响范围太大。

如果虚拟化平台需要重启,数据库、NAS、网关、大模型和开发环境都会同时中断。

如果某个大模型占用了过多内存,也可能挤压数据库和其他基础服务所需的资源。

因此,这次没有追求把全部资源集中到单台主机,而是按照职责进行拆分:

text
网络实验节点
负责路由、防火墙、VPN 和网络测试

基础服务节点
负责数据库、存储、代码仓库和长期运行服务

计算开发节点
负责大模型、Windows、Ubuntu 和实验环境

这种结构并不复杂,但基本形成了网络、数据和计算三个相对独立的区域。

其中,实体爱快路由器继续承担当前网络入口,软路由主机则用于 OPNsense 实验和备用验证。即使实验环境出现问题,也不会直接影响日常网络。

对于个人独立开发来说,这套结构已经能够满足较长一段时间的需要。

对独立开发的意义

这些基础设施并不会直接出现在最终产品中。

用户不会知道数据库运行在哪台主机,也不会关心开发环境使用的是 ESXi 还是 PVE。

但对于开发者来说,这些选择会影响很多实际问题:

  • 能否快速创建测试环境
  • 能否安全地进行远程开发
  • 数据库是否有可靠备份
  • 新版本能否顺利部署
  • 实验大模型时是否会影响其他服务
  • 出现故障后能否快速恢复
  • 后续迁移到云服务器是否方便

独立开发意味着很多事情都需要自己负责。

不仅要编写业务代码,也要考虑网络、数据、部署、安全、备份和恢复。

不需要一开始就建设一套完整的企业级平台,但需要在自己的能力范围内,建立一个稳定、清晰并且能够持续演进的基础环境。

写在最后

这次基础设施调整,并不只是简单地增加了几台设备。

更重要的是,我开始按照长期运行一款产品的方式,重新思考自己的开发环境。

从家庭路由器升级到支持 VLAN 和访问控制的网络结构,从 ESXi 迁移到 PVE,再将网络、基础服务和计算资源拆分到不同主机,我正在逐渐建立一套适合独立开发的基础设施。

这些工作不会立即带来产品功能上的进展,却能减少后续开发过程中反复出现的环境问题。

独立开发的第一步,不一定是写下第一行业务代码。

有时候,是先为接下来几年的开发工作,准备一块稳定的地基。