opswarden-git/opswarden-ops
GitHub: opswarden-git/opswarden-ops
OpsWarden 平台的基础设施仓库,通过 Terraform 和 Kubernetes 在 DigitalOcean 上实现端到端可重现的生产部署。
Stars: 0 | Forks: 0
# OpsWarden — Ops
[](https://kubernetes.io/) [](https://www.terraform.io/) [](https://traefik.io/) [](https://www.digitalocean.com/) [](https://nixos.org/)
参考集群拓扑 — 将由 OpsWarden 自己的图表替换。
## 关于 `opswarden-ops` 是 OpsWarden 的**基础设施与部署**仓库: 部署在 **DigitalOcean (DOKS)** 上的 Kubernetes,端到端由 **Terraform** 配置,由 **Traefik** 进行路由,并通过 **Nix** 提供可重现的开发环境。 它**独立于产品**(`opswarden-app`)且**有意设计为可选**: OpsWarden 只需运行一次 `docker compose up` 即可启动。本仓库是**作品集云展示** — 它绝不应成为运行该产品的前提条件。 ## 项目结构 ``` opswarden-ops/ │ ├── k8s/ │ ├── server/ # OpsWarden server (Rust/Axum) + HPA/PDB — manifest ready │ ├── client-web/ # Next.js client + ingress — manifest ready │ ├── postgres/ # PostgreSQL + encrypted off-cluster backups │ ├── redis/ # Redis — ready │ ├── traefik/ # ingress controller & LB (+ IngressClass, PDB) — ready │ └── observability/ # cAdvisor (+ prom/grafana/loki) — partial │ ├── terraform/ # DOKS cluster provisioning (main/outputs/providers/variables.tf) ├── scripts/ # smoke.sh, load.sh, soft-affinity.sh (ops helpers) ├── Makefile # single runner: provision → deploy → harden → verify → destroy + fmt/validate/lint ├── flake.nix / flake.lock # Nix dev shell (kubectl, terraform, k9s, helm…) ├── .env # API tokens (git-ignored) ├── LICENSE / NOTICE # Apache-2.0 └── README.md ``` ## 服务 | 服务 | 技术 | 状态 | | -------------- | :-----------------------------------------------------------------------------: | -------------------------------------- | | **server** |
**Node pool — 2 / 2 节点运行中**
**Worker pool 详情 — 由 Terraform 配置并打标签**
**集群洞察 — CPU、负载、内存、磁盘及 I/O**
**Traefik — 路由与服务健康,`:80` / `:8080` 成功率 100%**
## 安装与配置
### 前置条件
- [Nix](https://nixos.org/download.html) 包管理器
- 拥有 API token 的 [DigitalOcean](https://www.digitalocean.com/) 账户
- 启用了版本控制的 DigitalOcean Spaces bucket 以及用于 Terraform state 的受限访问密钥
- [Git](https://git-scm.com/)
### 1 — 克隆并进入环境
```
git clone git@github.com:opswarden-git/opswarden-ops.git && cd opswarden-ops
cp .env.example .env # add credentials and a reviewed TF_VAR_kubernetes_version
nix develop # loads kubectl, terraform, k9s, helm…
```
### 2 — 初始化远程 state 并配置集群
```
cp terraform/backend.hcl.example terraform/backend.hcl
# 使用 bucket 和 Spaces region 编辑本地的 git 忽略文件 backend.hcl。
# AWS_ACCESS_KEY_ID 和 AWS_SECRET_ACCESS_KEY 从 .env 中加载。
make infra TF_BACKEND_CONFIG=terraform/backend.hcl
export KUBECONFIG=$(pwd)/kubeconfig
```
后端使用 Spaces S3 兼容 API 以及原生的 Terraform lockfiles。
在首次 apply 之前请启用 bucket 版本控制。如果本地 state 已存在,
`make backend-init` 会停止并打印出明确的迁移命令,而不会
默默地将其丢弃。
### 3 — 引导 Secrets (SOPS)
```
# 1. 将你的私有 age key 提供给 SOPS
export SOPS_AGE_KEY_FILE=~/.config/sops/age/keys.txt
# 2. 显式选择你的目标环境
export EXPECTED_CONTEXT=minikube
export NAMESPACE=opswarden
# 3. 根据目标集群验证解密的 secret
make secrets-dry-run \
EXPECTED_CONTEXT="$EXPECTED_CONTEXT" \
NAMESPACE="$NAMESPACE"
# 4. 将解密的 secret 应用到集群
make secrets-apply \
EXPECTED_CONTEXT="$EXPECTED_CONTEXT" \
NAMESPACE="$NAMESPACE" \
CONFIRM=APPLY_POSTGRES_SECRET
```
### 4 — 部署基础设施层
```
make deploy \
EXPECTED_CONTEXT="$EXPECTED_CONTEXT" \
NAMESPACE="$NAMESPACE"
```
### 5 — 部署常规应用后端
这种常规的生产环境拆分是有意为之:`client-web` 运行在 Vercel 上的
`app.opswarden.dev`;Rust、PostgreSQL、Redis 和 Traefik 运行在 DOKS 上。请先创建
由 SOPS 管理的 `opswarden-server-secret`。生产环境仅接受
不可变的服务器摘要和 HTTPS 源。
```
make deploy-server \
EXPECTED_CONTEXT="$EXPECTED_CONTEXT" \
NAMESPACE="$NAMESPACE" \
SERVER_IMAGE="ghcr.io/opswarden-git/opswarden-server@sha256:
**Worker pool 详情 — 由 Terraform 配置并打标签**
**集群洞察 — CPU、负载、内存、磁盘及 I/O**
**Traefik — 路由与服务健康,`:80` / `:8080` 成功率 100%**
标签:ECS, Terraform, 子域名突变, 持续集成/部署, 搜索引擎查询, 测试用例, 自定义请求头, 运维