首页
/ reNgine项目Docker Compose部署架构深度解析

reNgine项目Docker Compose部署架构深度解析

2025-07-07 02:30:02作者:余洋婵Anita

项目概述

reNgine是一个基于Docker容器化部署的网络安全扫描与自动化渗透测试平台。该项目采用微服务架构设计,通过Docker Compose编排多个服务组件,包括Web应用、数据库、消息队列、任务调度等核心模块。本文将深入解析其Docker Compose配置架构,帮助安全研究人员和DevOps工程师理解其部署逻辑。

核心服务组件

1. 数据库服务 (PostgreSQL)

db:
  image: "postgres:12.3-alpine"
  environment:
    - POSTGRES_DB=${POSTGRES_DB}
    - POSTGRES_USER=${POSTGRES_USER}
    - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
    - POSTGRES_PORT=${POSTGRES_PORT}
  volumes:
    - postgres_data:/var/lib/postgresql/data/
  • 采用轻量级PostgreSQL 12.3 Alpine镜像
  • 数据持久化通过命名卷postgres_data实现
  • 关键配置通过环境变量注入,增强安全性
  • 仅绑定到本地回环地址(127.0.0.1),限制外部访问

2. 缓存与消息队列 (Redis)

redis:
  image: "redis:alpine"
  hostname: redis
  • 使用官方Redis Alpine镜像
  • 固定主机名为redis,便于其他服务通过服务发现访问
  • 作为Celery任务队列的消息代理和结果后端

3. 异步任务处理 (Celery Worker)

celery:
  build: ./web
  entrypoint: /usr/src/app/celery-entrypoint.sh
  volumes:
    - ./web:/usr/src/app
    - github_repos:/usr/src/github
    - wordlist:/usr/src/wordlist
    - scan_results:/usr/src/scan_results
  • 基于Web服务镜像构建
  • 挂载多个专用卷用于存储扫描结果、字典文件等
  • 支持动态伸缩(autoscale),根据配置调整并发工作进程数
  • 依赖PostgreSQL和Redis服务

4. 定时任务调度 (Celery Beat)

celery-beat:
  build: ./web
  command: celery -A reNgine beat -l INFO --scheduler django_celery_beat.schedulers:DatabaseScheduler
  • 使用数据库作为调度器后端,确保任务调度持久化
  • 与Worker共享相同的代码基础和依赖
  • 支持分布式环境下的定时任务协调

5. Web应用服务

web:
  build: ./web
  entrypoint: /usr/src/app/entrypoint.sh
  ports:
    - "127.0.0.1:8000:8000"
  • 基于Django框架构建的Web界面
  • 仅暴露8000端口给本地网络
  • 通过Nginx反向代理对外提供服务
  • 包含静态文件服务和管理员初始化功能

6. 反向代理 (Nginx)

proxy:
  image: nginx:alpine
  ports:
    - 8082:8082/tcp
    - 443:443/tcp
  secrets:
    - source: proxy.ca
      target: /etc/nginx/certs/rengine_chain.pem
  • 提供HTTPS终止和静态文件服务
  • 使用Docker Secrets管理SSL证书
  • 自定义Nginx配置通过卷挂载注入
  • 同时暴露8082(HTTP)和443(HTTPS)端口

7. 大模型服务 (Ollama)

ollama:
  image: ollama/ollama
  ports:
    - "11434:11434"
  • 提供本地大模型推理能力
  • 暴露11434端口供其他组件调用
  • 数据持久化通过ollama_data卷实现

网络架构设计

networks:
  rengine_network:
  • 创建专用桥接网络rengine_network
  • 所有服务加入同一网络,实现服务间通信隔离
  • Web服务设置别名rengine,便于内部DNS解析

数据持久化方案

volumes:
  tool_config:
  postgres_data:
  gf_patterns:
  nuclei_templates:
  github_repos:
  wordlist:
  scan_results:
  static_volume:
  ollama_data:
  • 每种数据类型使用独立命名卷
  • 关键数据包括:
    • PostgreSQL数据库文件
    • 扫描工具配置(GF模式、Nuclei模板等)
    • GitHub仓库缓存
    • 字典文件(wordlist)
    • 扫描结果数据
    • 静态资源文件
    • 大模型数据

安全特性

  1. 证书管理:通过Docker Secrets安全存储和分发SSL证书
  2. 网络隔离:服务间通信限制在专用网络内
  3. 最小权限:数据库服务仅监听本地接口
  4. 配置分离:敏感信息通过环境变量注入

部署建议

  1. 准备环境变量文件(.env),包含所有必要的配置参数
  2. 确保证书文件放置在./secrets/certs/目录下
  3. 根据硬件资源调整Celery Worker的并发参数
  4. 生产环境应考虑:
    • 启用HTTPS强制跳转
    • 配置定期备份策略
    • 监控服务健康状态

总结

reNgine的Docker Compose架构展示了现代安全工具的典型部署模式,通过容器化技术实现了:

  • 服务组件解耦
  • 资源隔离与安全控制
  • 弹性伸缩能力
  • 便捷的部署与维护

这种架构既适合本地研发环境,也能扩展到生产部署,为安全团队提供了灵活可靠的自动化扫描平台基础。