使用 Terraform 和 Proxmox 的 GitOps 自动化
Source: Dev.to
初始问题
每当我需要在 Proxmox 上创建一台 VM 时,流程总是重复:打开 Web 界面,填写表单,手动配置网络,等待 VM 创建完成,随后通过 SSH 登录并配置环境。
此外,还必须记住到底执行了哪些步骤,以便将来需要复现时能够重新操作。缺乏变更历史、统一的自动化和可追溯性。
即使使用脚本或 Terraform,本身仍有手动环节,使得整个过程比应有的更耗时,并且存在明显的改进空间。
解决方案:GitOps + Terraform + GitHub Actions
我实现了完整的 GitOps 流程,所有基础设施全部由 Git 中的代码进行管理。
效果非常显著:现在只需一次 commit 和 push,就能创建、修改或删除 VM。大约两到三分钟内,变更会自动应用到 Proxmox 环境。
路上学到的东西
并非所有事情都那么简单,尤其是对零基础的朋友来说。
因为我已经对这些工具有一定经验,正确配置 Proxmox 权限、在本地网络中部署 self‑hosted runner(因为 Proxmox 不能直接从云端访问)以及以可扩展、可复用的方式组织代码,对我来说并不算特别困难。
即便如此,每一步仍然是一次学习和改进 Infrastructure as Code、CI/CD 以及自动化最佳实践的机会。
注意: 对于从未做过类似事情的读者,我提供了详细的步骤指南以及 FAQ,帮助大家快速复现环境。
使用的技术
- Terraform – 基础设施即代码(IaC)
- GitHub Actions – CI/CD 自动化
- Terraform Cloud (HCP Terraform) – 远程状态管理
- Proxmox – 虚拟化管理程序
- Self‑hosted runners – 本地执行作业
所有工具均为 100 % 开源且免费,运行在自托管环境中,能够对数据和基础设施实现完全控制。
实际影响
| 之前 | 现在 |
|---|---|
| 每台 VM 需要 15–20 分钟(手动过程,易出错,无历史记录) | 约 30 秒即可在代码中定义 VM,提交 commit 并 push,自动完成,且通过 Git 完全可追溯 |
比起节省的时间,更重要的是可靠性的提升。每一次变更都会经过审查,记录在 Git 历史中,并且可以通过一次 git revert 轻松回滚。这在实验环境中尤为宝贵,因为能够安全地撤销操作往往决定成败。
经验教训
- 自动化的目标不是消除所有手工工作,而是减少重复且易出错的任务。
- 基础设施即代码并非大企业的专利,家庭实验室(homelab)是进行尝试的理想场所。
- 文档和代码同等重要——我花时间为每一步编写文档,以便未来的自己快速上手。
- Self‑hosted runner 大幅拓展了本地环境的自动化可能性。
后续计划 / 改进方向
我计划在项目中加入 Ansible,因为目前我使用 Semaphore UI 来完成 VM 创建后的配置,同时还会加入部署前的自动化测试。
如果你对实现细节感兴趣并想复现本项目,完整的步骤(包括所有问题的排查过程)已放在:homelab-infrastructure-template