本文档解释了标准 Go 项目布局中 /init 和 /deployments 目录的用途和用法。这些目录对于系统初始化和部署配置至关重要,是应用程序代码与其运行时环境之间的连接纽带。
在应用程序的生命周期中,/init 和 /deployments 目录扮演着不同但互补的角色。
/init:包含系统初始化和进程管理配置。/deployments:存放将应用程序部署到各种平台的配置文件。这些目录不属于核心代码结构(如 /cmd、/internal 和 /pkg),而是支持应用程序的运行方面。有关配置文件的信息,请参阅 Configs Directory).
/init 目录包含系统初始化和进程管理配置。
/init 目录的主要目的是存储配置文件,这些文件定义了应用程序应如何由宿主操作系统启动、管理和监督。
来源:init/README.md1-3 README.md120-122
/init 目录通常包含:
系统初始化配置:
.service、.socket、.timer).conf)进程管理器配置:
.conf、.ini)典型的 /init 目录可能组织如下:
/init
├── systemd/
│ ├── myapp.service # Service unit file
│ └── myapp.socket # Socket unit file
├── upstart/
│ └── myapp.conf # Upstart job configuration
├── sysv/
│ └── myapp # SysV init script
├── supervisord/
│ └── myapp.conf # Supervisord program configuration
└── runit/
└── myapp/
├── run # Run script
└── log/
└── run # Log run script
来源:init/README.md1-3 README.md120-122
/deployments 目录包含将应用程序部署到各种平台和环境的配置文件和模板。
/deployments 目录的主要目的是存储基础架构配置,这些配置定义了应用程序应如何跨不同环境进行部署、扩展和管理。
来源:deployments/README.md1-3 README.md140-142
/deployments 目录通常包含:
容器编排配置:
docker-compose.yml).yaml 文件)Chart.yaml、模板等的目录结构)基础架构即代码 (IaC) 配置:
.tf).yaml、.json).yml)特定平台的部署配置:
典型的 /deployments 目录可能组织如下:
/deployments
├── docker/
│ └── docker-compose.yml # Docker Compose configuration
├── kubernetes/
│ ├── base/ # Base Kubernetes manifests
│ │ ├── deployment.yaml
│ │ ├── service.yaml
│ │ └── configmap.yaml
│ └── overlays/ # Environment-specific overlays
│ ├── development/
│ │ └── kustomization.yaml
│ ├── staging/
│ │ └── kustomization.yaml
│ └── production/
│ └── kustomization.yaml
├── helm/
│ └── myapp/ # Helm chart
│ ├── Chart.yaml
│ ├── values.yaml
│ └── templates/
├── terraform/
│ ├── modules/ # Reusable Terraform modules
│ └── environments/ # Environment-specific configurations
│ ├── dev/
│ ├── staging/
│ └── prod/
└── cloudformation/
└── myapp-stack.yaml # CloudFormation template
来源:deployments/README.md1-3 README.md140-142
下图说明了 /init 和 /deployments 目录如何融入 Go 应用程序的整体部署工作流。
来源:init/README.md1-3 deployments/README.md1-3 README.md120-122 README.md140-142
下图显示了部署配置与它们所针对的基础架构组件之间的关系。
来源:init/README.md1-3 deployments/README.md1-3 README.md120-122 README.md140-142
systemd/、supervisord/)。| 工具 | 描述 | 文件格式 | 位于 /init/ 中的位置 |
|---|---|---|---|
| systemd | 现代 Linux init 系统 | 单元文件(.service、.socket) | systemd/ |
| upstart | 早期 Ubuntu 版本的 Init 系统 | 作业配置(.conf) | upstart/ |
| SysV init | 传统的 Unix init 系统 | Shell 脚本 | sysv/ |
| supervisord | 进程控制系统 | 配置文件(.conf、.ini) | supervisord/ |
| runit | 服务监控套件 | 基于目录的 run 脚本 | runit/ |
| 平台 | 描述 | 文件格式 | 位于 /deployments/ 中的位置 |
|---|---|---|---|
| Docker Compose | 用于开发的容器编排 | YAML(.yml) | docker/ |
| Kubernetes | 容器编排平台 | YAML Manifests | kubernetes/ |
| Helm | Kubernetes 包管理器 | 包含 YAML 模板的 Charts | helm/ |
| Terraform | 基础架构即代码工具 | HCL(.tf) | terraform/ |
| CloudFormation | AWS 基础架构即代码 | YAML/JSON 模板 | cloudformation/ |
| Ansible | 配置管理 | YAML Playbooks | ansible/ |
来源:init/README.md1-3 deployments/README.md1-3 README.md120-122 README.md140-142
在一些仓库中,特别是那些使用 Kubernetes 部署的仓库,/deployments 目录可能被称为 /deploy。这是一个可接受的替代命名约定,但标准布局建议使用 /deployments 以保持一致性。
/init 和 /deployments 目录在 Go 应用程序的运行方面起着至关重要的作用。它们弥合了您的应用程序代码与运行环境之间的差距。通过正确组织这些目录,您可以简化部署流程,并确保应用程序在不同环境中的行为一致。