RSSchool应用项目Docker Compose部署架构解析
2025-07-06 06:15:01作者:农烁颖Land
项目概述
RSSchool应用是一个基于微服务架构的教育平台,采用Docker Compose进行容器化部署。该部署方案包含了前端客户端、后端服务、NestJS中间层、Nginx反向代理以及Certbot证书管理等多个组件,构成了一个完整的Web应用解决方案。
核心服务组件
1. 客户端服务(Client)
客户端服务作为前端应用容器,具有以下特点:
- 使用8081端口映射到容器内部的8080端口
- 依赖服务器和NestJS服务启动后才运行
- 配置了两个关键环境变量:
- RS_HOST:定义应用主机地址
- RSSHCOOL_UI_GCP_MAPS_API_KEY:Google云地图API密钥
2. 服务器服务(Server)
服务器服务是应用的核心后端,配置丰富:
- 使用8080端口直接暴露
- 包含大量敏感信息的配置,通过环境变量注入:
- 认证相关:OAuth回调、客户端ID/密钥、会话密钥等
- 数据库连接:PostgreSQL主机、用户名、密码和数据库名
- AWS云服务:访问密钥、区域和REST API配置
- GitHub集成:应用ID、安装ID和私钥
- 管理员凭据:用户名和密码
3. NestJS服务
NestJS作为中间层服务,提供额外功能:
- 使用8082端口映射
- 继承了服务器的大部分数据库和云服务配置
- 添加了特定功能配置:
- 预定义管理员用户列表
- GitHub Webhook活动密钥
- JWT密钥配置
- OpenAI API密钥
- Sentry错误监控DSN
- 日志配置为直接发送到AWS CloudWatch日志服务
基础设施组件
1. Nginx服务
作为反向代理和负载均衡器:
- 使用官方Nginx Alpine镜像
- 挂载了三个关键卷:
- Nginx配置目录
- Let's Encrypt证书目录
- Certbot验证文件目录
- 配置了自动重载机制(每12小时)
- 暴露标准HTTP(80)和HTTPS(443)端口
2. Certbot服务
负责SSL证书管理:
- 使用官方Certbot镜像
- 共享Nginx的证书和验证文件目录
- 配置了自动续期机制(每12小时检查)
- 依赖Nginx服务运行
网络配置
所有服务都连接到一个名为shared-network
的自定义网络,这使得容器间可以通过服务名直接通信,同时隔离了外部网络访问。
部署特点
-
高可用性:所有核心服务都配置了
restart: on-failure
或unless-stopped
,确保异常后自动恢复 -
安全隔离:敏感配置全部通过环境变量注入,不硬编码在配置文件中
-
自动化运维:内置了Nginx重载和证书续期机制
-
微服务架构:明确的服务拆分和依赖关系定义
最佳实践建议
-
环境变量管理:建议使用.env文件或秘密管理服务来存储敏感的环境变量
-
日志收集:可以扩展日志收集方案,如ELK栈,而不仅限于AWS日志
-
健康检查:可以添加健康检查端点和服务健康检查配置
-
监控:考虑添加Prometheus和Grafana进行系统监控
-
扩展性:对于高流量场景,可以考虑添加Redis缓存和数据库读写分离
这个Docker Compose配置展示了现代Web应用的典型容器化部署方案,涵盖了从前端到后端,从应用到基础设施的完整链条,是学习微服务架构和容器化部署的优秀范例。