Pad.ws项目Docker Compose部署架构深度解析
2025-07-10 05:52:49作者:郦嵘贵Just
项目概述
Pad.ws是一个基于容器化技术构建的现代化Web应用平台,其部署架构采用了Docker Compose编排多个关键服务组件。本文将从技术架构角度深入分析该项目的容器化部署方案,帮助开发者理解其服务组成和交互关系。
核心服务组件
1. PostgreSQL数据库服务
postgres:
image: postgres:16
environment:
POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
POSTGRES_DB: ${POSTGRES_DB}
volumes:
- postgres_data:/var/lib/postgresql/data
- 使用PostgreSQL 16作为主数据库
- 通过环境变量配置数据库用户、密码和数据库名称
- 采用数据卷持久化存储数据库文件,确保数据不丢失
- 使用
network_mode: host
实现主机网络模式,简化容器间通信
2. Redis缓存服务
redis:
image: redis:alpine
command: redis-server --requirepass ${REDIS_PASSWORD} --save 60 1 --loglevel warning
- 基于轻量级Redis Alpine镜像
- 配置了密码保护和自动持久化策略(每60秒或至少有1个变更时保存)
- 同样采用主机网络模式,暴露标准Redis端口6379
身份认证服务(Keycloak)
keycloak:
image: quay.io/keycloak/keycloak:25.0
environment:
KC_DB: postgres
KC_DB_URL: jdbc:postgresql://localhost:5432/${POSTGRES_DB}
- 使用Keycloak 25.0提供OIDC身份认证
- 后端集成PostgreSQL数据库存储认证数据
- 配置了管理账号和HTTP访问(非生产环境适用)
- 支持代理转发,适合边缘部署场景
Coder开发环境服务
coder:
image: ghcr.io/coder/coder:latest
environment:
CODER_PG_CONNECTION_URL: postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@localhost:5432/${POSTGRES_DB}
- 使用最新版Coder提供云端开发环境
- 集成OIDC认证(与Keycloak对接)
- 连接同一PostgreSQL实例
- 挂载Docker socket实现容器管理能力
- 需要配置Docker用户组权限
Pad.ws主应用服务
pad:
image: ghcr.io/pad-ws/pad.ws:main
environment:
- OIDC_CLIENT_ID=${OIDC_CLIENT_ID}
- OIDC_CLIENT_SECRET=${OIDC_CLIENT_SECRET}
- POSTGRES_HOST=localhost
- REDIS_HOST=${REDIS_HOST}
- 主应用镜像来自项目构建的main分支
- 完整的前后端资源部署(包含静态资源目录)
- 深度集成OIDC认证、PostgreSQL和Redis
- 与Coder服务API对接(需要配置API密钥)
- 可配置多个API工作进程提高并发能力
网络与存储设计
-
网络架构:
- 所有服务均采用
network_mode: host
,简化容器间通信 - 依赖localhost地址进行服务发现
- 适合单机开发环境部署
- 所有服务均采用
-
存储设计:
- PostgreSQL和Redis使用命名卷持久化数据
- 确保服务重启后数据不丢失
- 数据卷定义在文件底部统一管理
环境变量设计
整个部署架构高度依赖环境变量配置,主要包括:
- 数据库凭证(POSTGRES_*系列)
- Redis访问配置(REDIS_*系列)
- Keycloak管理账号和端口设置
- OIDC认证相关参数
- Coder集成配置
- 应用特定参数(如前端URL、工作进程数等)
部署建议
-
开发环境:
- 可直接使用此配置
- 注意配置合理的环境变量
- 建议使用.env文件管理敏感信息
-
生产环境:
- 应考虑替换主机网络模式为自定义网络
- 增加适当的资源限制
- 配置TLS加密通信
- 实现服务健康检查和监控
总结
Pad.ws项目的Docker Compose文件展示了一个典型的现代化Web应用架构,集成了数据库、缓存、身份认证和开发环境服务。这种设计提供了良好的开发体验,同时也保持了向生产环境演进的可能性。理解这个架构有助于开发者根据实际需求进行调整和扩展。