首页
/ RSSchool应用项目Docker Compose部署架构解析

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的自定义网络,这使得容器间可以通过服务名直接通信,同时隔离了外部网络访问。

部署特点

  1. 高可用性:所有核心服务都配置了restart: on-failureunless-stopped,确保异常后自动恢复

  2. 安全隔离:敏感配置全部通过环境变量注入,不硬编码在配置文件中

  3. 自动化运维:内置了Nginx重载和证书续期机制

  4. 微服务架构:明确的服务拆分和依赖关系定义

最佳实践建议

  1. 环境变量管理:建议使用.env文件或秘密管理服务来存储敏感的环境变量

  2. 日志收集:可以扩展日志收集方案,如ELK栈,而不仅限于AWS日志

  3. 健康检查:可以添加健康检查端点和服务健康检查配置

  4. 监控:考虑添加Prometheus和Grafana进行系统监控

  5. 扩展性:对于高流量场景,可以考虑添加Redis缓存和数据库读写分离

这个Docker Compose配置展示了现代Web应用的典型容器化部署方案,涵盖了从前端到后端,从应用到基础设施的完整链条,是学习微服务架构和容器化部署的优秀范例。