生产就绪的 PostgreSQL 运行时, 包含向量搜索、中文分词、消息队列等扩展, 支持多种安全部署模式。
| 维度 | 要求 / 规格 | 说明 |
|---|---|---|
| 网络 | 公网 IP + 域名 (DNS) | 域名需解析至主机 IP (用于 ACME 证书) |
| 端口 | 开放 80, 5443 |
80 用于证书验证 (HTTP-01),5443 为 Stunnel TLS 入口(默认) |
| 最低 | 1 CPU / 2GB RAM / 20GB SSD | 仅支持基础数据库功能 |
| 推荐 | 2 CPU / 4GB RAM / 50GB SSD | 支持向量搜索、高并发等全量扩展 |
提示:
80/TCP仅用于 ACME 证书验证。本服务默认使用5443/TCP作为 Stunnel 安全入口;如需兼容历史客户端可改为443。
curl -fsSL https://raw.githubusercontent.com/ai-workspace-infra/postgresql.svc.plus/main/scripts/init_vhost.sh \
| bash -s -- 17 db.example.com- bash -s -- <PG版本> <域名>
- 默认安装最新稳定版 (PG 16),使用当前主机名作为域名
详细指南: 查看 docs/QUICKSTART.md | 完整指南
使用脚本: scripts/db_full_migration.sh
- 初始化目标机 + 全量迁移(源域名与目标域名独立)
scripts/db_full_migration.sh \
root@postgresql.svc.plus \
ubuntu@57.183.19.25 \
--init-db \
--target-domain postgresql-aws.svc.plus1.1) 与 agent.svc.plus(caddy.service+xray) 共存时(复用 host caddy 申请证书)
scripts/db_full_migration.sh \
root@postgresql.svc.plus \
ubuntu@57.183.19.25 \
--init-db \
--target-domain postgresql-aws.svc.plus \
--acme-mode host-caddy- 只测迁移流程(不重做目标机 init)
scripts/db_full_migration.sh \
root@postgresql.svc.plus \
ubuntu@57.183.19.25 \
--skip-init \
--target-domain postgresql-aws.svc.plus- 常用可选参数
--source-domain <domain> 源服务域名(用于提示/切换说明)
--target-domain <domain> 目标域名(用于 init_vhost ACME 证书检查)
--target-tls-port <port> 目标 TLS 端口,默认 5443
--acme-mode <mode> ACME模式:auto|bootstrap|host-caddy(默认 auto)
--import-globals 导入 globals.sql(角色/表空间)
--skip-import 仅做 init/校验,不做导入
--skip-compare 跳过源目标对比
| 模式 | 复杂度 | TLS隧道 | 适用场景 |
|---|---|---|---|
| Stunnel + ACME | ⭐ | ✅ (自动证书) | 个人/生产单机 |
| Kubernetes/Helm | ⭐⭐⭐ | ✅ (Sidecar) | 企业级生产 |
GitHub Actions 工作流 (.github/workflows/ci-pipeline.yaml / pipeline.yaml):
- ✅ 统一矩阵构建 (Matrix Strategy): 一键并发构建并推送镜像 (
stunnel-server,stunnel-client,postgresql) - ✅ Helm Chart 自动发布: 自动打包并推送 Helm Chart 到 GHCR
- ✅ Vault OIDC 凭据接入: 无缝对接 HashiCorp Vault 动态鉴权
- ✅ 多环境智能路由: 根据 Git 事件自动路由部署至
sit/uat/prod环境
当前 CI/CD 约定的发布路径如下:
oci://ghcr.io/ai-workspace-infra/charts/postgresqlghcr.io/ai-workspace-infra/postgresqlghcr.io/ai-workspace-infra/stunnel-clientghcr.io/ai-workspace-infra/stunnel-server
一个 PostgreSQL 实例替代多个专用数据库:
| 传统方案 | PostgreSQL 扩展 | 用途 |
|---|---|---|
| Pinecone | pgvector | 向量嵌入和语义搜索 |
| Elasticsearch | pg_jieba + pg_trgm | 中文分词和全文搜索 |
| Kafka | pgmq | 轻量级消息队列 |
| MongoDB | JSONB + GIN | 文档存储 |
| Redis | hstore + UNLOGGED | 高速键值缓存 |
- PostgreSQL: 16/17/18 (PGDG)
- 扩展: pgvector, pg_jieba, pgmq, pg_cron, pg_trgm
- TLS 隧道: stunnel4
- 证书管理: Caddy (ACME) 或自签名
- 容器编排: Docker Compose 或 Kubernetes/Helm
MIT License - 详见 LICENSE 文件
欢迎贡献! 请查看文档并提交 Pull Request。
一个 PostgreSQL, 替代多个数据库 🚀
本仓库的持续集成流水线 (.github/workflows/ci-pipeline.yml) 使用 GitHub Actions OIDC 机制与 HashiCorp Vault (vault.svc.plus) 进行无密钥身份认证。
为了遵循最小权限原则(Least Privilege)和环境隔离,本仓库的 CI 拥有独立的 Vault Policy 和 Role,具体安全约束如下:
-
凭据访问范围(路径隔离)
- CI 流水线仅拥有
kv/data/CICD的只读权限。 - 该路径仅包含基础的公共服务凭据(例如 GHCR_USERNAME 和 GHCR_TOKEN),用于构建完成后推送镜像。
- CI 无法读取任何环境特有的底层云资源凭据、Terraform State 或主机 SSH 部署私钥。
- CI 流水线仅拥有
-
身份铸造限制(绑定收紧)
- 本服务在 Vault 中对应 3 个独立环境的 Role(
sit、uat、prod)。 job_workflow_ref白名单钉死:Vault 强制校验调用方的流水线文件。只有本仓库白名单内的流水线(即ci-pipeline.yml)发起的请求才能成功换取 Token。- 仓库内任何人新增或重命名未经授权的 workflow 文件,皆无法绕过限制获取凭据。
- 本服务在 Vault 中对应 3 个独立环境的 Role(
⚠️ 排障指南 (403 Forbidden) 如果 CI 流水线在Fetch Vault Secrets步骤报403权限拒绝,请确认:
- 请求的凭据路径是否超出了
kv/data/CICD层的范围。- 流水线文件名称或仓库名称是否发生了变更。
如果确需修改流水线名称,必须由管理员在
platform-ops-toolkit仓的docs/tasks/vault_service_repo_roles.sh中更新白名单,并重新对 Vault 服务端执行该脚本。