Skip to content

feat(#11): Database Layer - PostgreSQL + Redis + MariaDB + pgAdmin + Redis Commander#303

Closed
HuiNeng6 wants to merge 1 commit intoillbnm:masterfrom
HuiNeng6:feature/database-layer-issue-11
Closed

feat(#11): Database Layer - PostgreSQL + Redis + MariaDB + pgAdmin + Redis Commander#303
HuiNeng6 wants to merge 1 commit intoillbnm:masterfrom
HuiNeng6:feature/database-layer-issue-11

Conversation

@HuiNeng6
Copy link

关闭 Issue #11

实现共享数据库层,供 Nextcloud、Outline、Gitea、Authentik、Grafana 等服务共用。

服务清单

服务 镜像 用途
PostgreSQL postgres:16.4-alpine 主数据库 (多租户)
Redis redis:7.4.0-alpine 缓存/队列
MariaDB mariadb:11.5.2 MySQL 兼容
pgAdmin dpage/pgadmin4:8.11 PostgreSQL 管理界面
Redis Commander rediscommander/redis-commander:0.9.0 Redis 管理界面

实现内容

1. 多租户 PostgreSQL (initdb/01-init-databases.sh)

# 为每个服务创建独立 database + user (幂等脚本)
create_user "nextcloud" "${NEXTCLOUD_DB_PASSWORD}"
create_db  "nextcloud" "nextcloud"
# ... gitea, outline, authentik, grafana, vaultwarden, bookstack

2. Redis 多数据库分配

DB 服务
0 Authentik
1 Outline
2 Gitea
3 Nextcloud
4 Grafana sessions

3. 备份集成 (scripts/backup-databases.sh)

  • pg_dumpall 备份所有 PostgreSQL 数据库
  • redis-cli BGSAVE 触发 Redis 持久化
  • mariadb-dump 备份 MariaDB
  • 压缩为 .tar.gz,保留最近 7 天

4. 健康检查

所有数据库容器都有严格的健康检查,其他 Stack 可通过 depends_on: condition: service_healthy 等待。

5. 网络隔离

  • 数据库服务 不加入 proxy 网络
  • 仅暴露给 databases 内部网络
  • 管理界面 (pgAdmin, Redis Commander) 通过 Traefik 对外暴露

6. 文档

stacks/databases/README.md 包含:

  • 完整连接字符串示例
  • 备份/恢复指南
  • 故障排除

验收标准

  • init-databases.sh 运行后所有数据库和用户创建成功
  • init-databases.sh 重复运行不报错 (幂等)
  • pgAdmin 可访问并连接 PostgreSQL
  • 其他 Stack 可通过内部 hostname 连接数据库
  • 数据库容器 暴露到宿主机端口
  • backup-databases.sh 生成有效的 .tar.gz 备份
  • README 包含各服务连接字符串示例
  • 所有镜像使用精确版本 (无 latest tag)

文件变更

stacks/databases/
├── docker-compose.yml        # 更新:添加 pgAdmin, Redis Commander
├── .env.example              # 更新:添加所有环境变量
├── initdb/01-init-databases.sh  # 更新:幂等脚本
├── initdb-mysql/01-init-databases.sql  # 更新:幂等 SQL
└── README.md                 # 新增:完整文档

scripts/
├── init-databases.sh         # 新增:手动初始化脚本
└── backup-databases.sh       # 更新:完整备份脚本

Generated/reviewed with: claude-opus-4-6

钱包地址 (FNDRY): 0x742d35Cc6634C0532925a3b844Bc454e4438f44e

…min + Redis Commander

Implements shared database layer for HomeLab stack.

## Services
- PostgreSQL 16.4-alpine (multi-tenant)
- Redis 7.4.0-alpine (with DB allocation)
- MariaDB 11.5.2 (MySQL-compatible)
- pgAdmin 8.11 (PostgreSQL management UI)
- Redis Commander 0.9.0 (Redis management UI)

## Features
- Idempotent init-databases.sh script
- Backup script with retention (7 days)
- Health checks for all services
- Network isolation (databases not exposed to host)
- Management UIs via Traefik
- Resource limits configured
- Complete README with connection strings

## Verification
- All services use pinned versions (no latest tags)
- Database services on internal network only
- Management UIs on proxy network with TLS

Generated with: claude-opus-4-6
@HuiNeng6
Copy link
Author

Closing duplicate PR - see #306 for the main implementation

@HuiNeng6 HuiNeng6 closed this Mar 24, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant