首页
/ Freika/dawarich项目Docker部署架构解析与配置指南

Freika/dawarich项目Docker部署架构解析与配置指南

2025-07-08 01:27:26作者:江焘钦

项目概述

Freika/dawarich是一个基于Rails框架开发的Web应用项目,采用微服务架构设计,通过Docker容器化部署。该项目主要包含Web应用服务、后台任务处理服务和数据存储服务三大核心组件,是一个典型的现代Web应用架构实现。

核心服务组件

1. Redis缓存服务

dawarich_redis:
  image: redis:7.4-alpine
  volumes:
    - dawarich_shared:/data
  healthcheck:
    test: [ "CMD", "redis-cli", "--raw", "incr", "ping" ]
  • 使用Redis 7.4的Alpine版本,轻量且高效
  • 配置了健康检查机制,通过redis-cli命令验证服务可用性
  • 数据持久化存储在共享卷dawarich_shared
  • 采用Alpine基础镜像,显著减少容器体积

2. PostgreSQL数据库服务

dawarich_db:
  image: postgis/postgis:17-3.5-alpine
  environment:
    POSTGRES_USER: postgres
    POSTGRES_PASSWORD: password
    POSTGRES_DB: dawarich_development
  • 使用PostgreSQL 17与PostGIS 3.5的组合镜像,支持地理空间数据
  • 配置了独立的数据库卷dawarich_db_data确保数据持久化
  • 提供自定义配置选项(注释状态),可通过挂载postgresql.conf实现
  • 健康检查通过pg_isready命令验证数据库连接状态

3. 主应用服务

dawarich_app:
  image: freikin/dawarich:latest
  ports:
    - 3000:3000
  entrypoint: web-entrypoint.sh
  command: ['bin/rails', 'server', '-p', '3000', '-b', '::']
  • 主应用基于Rails框架,默认监听3000端口
  • 配置了多个数据卷用于存储应用数据:
    • dawarich_public: 公共资源文件
    • dawarich_watched: 监控目录
    • dawarich_storage: 应用存储
  • 健康检查通过API端点/api/v1/health验证应用状态

4. Sidekiq后台任务服务

dawarich_sidekiq:
  image: freikin/dawarich:latest
  entrypoint: sidekiq-entrypoint.sh
  command: ['sidekiq']
  environment:
    BACKGROUND_PROCESSING_CONCURRENCY: 10
  • 使用与主应用相同的镜像,但运行Sidekiq进程
  • 配置并发处理数为10,可根据服务器性能调整
  • 健康检查通过pgrep命令验证Sidekiq进程状态
  • 依赖Redis和PostgreSQL服务,确保任务队列和状态持久化

网络与存储配置

网络架构

networks:
  dawarich:
  • 创建专用网络dawarich,实现容器间安全通信
  • 所有服务共享同一网络,可通过服务名直接访问

存储卷设计

volumes:
  dawarich_db_data:
  dawarich_shared:
  dawarich_public:
  dawarich_watched:
  dawarich_storage:
  • dawarich_db_data: 专用数据库存储,确保数据安全
  • dawarich_shared: Redis与数据库共享卷
  • dawarich_public: 应用公共资源目录
  • dawarich_watched: 文件监控目录
  • dawarich_storage: 应用主存储目录

关键配置参数解析

环境变量配置

environment:
  RAILS_ENV: development
  REDIS_URL: redis://dawarich_redis:6379
  DATABASE_HOST: dawarich_db
  MIN_MINUTES_SPENT_IN_CITY: 60
  APPLICATION_HOSTS: localhost
  • RAILS_ENV: 设置应用环境(开发/生产)
  • REDIS_URL: Redis连接字符串
  • DATABASE_*: 数据库连接配置
  • MIN_MINUTES_SPENT_IN_CITY: 业务相关参数
  • APPLICATION_HOSTS: 允许访问的主机名

资源限制

deploy:
  resources:
    limits:
      cpus: '0.50'
      memory: '4G'
  • CPU限制为0.5核
  • 内存限制为4GB
  • 可根据实际运行情况调整

健康检查机制

所有服务均配置了完善的健康检查:

  1. Redis: 通过redis-cli incr ping命令检查
  2. PostgreSQL: 通过pg_isready命令检查
  3. 主应用: 通过HTTP API端点检查
  4. Sidekiq: 通过进程检查

检查参数包括:

  • interval: 检查间隔(10秒)
  • retries: 重试次数(5-30次)
  • start_period: 启动宽限期(30秒)
  • timeout: 超时时间(10秒)

部署建议

  1. 生产环境调整:

    • 修改RAILS_ENVproduction
    • 调整资源限制(CPU/内存)
    • 启用Prometheus监控(取消相关注释)
  2. 性能优化:

    • 根据负载调整Sidekiq并发数
    • 配置数据库连接池
    • 考虑添加Redis缓存策略
  3. 安全建议:

    • 修改默认密码
    • 限制网络访问
    • 启用TLS加密

故障排查

  1. 容器启动失败:

    • 检查依赖服务状态(数据库/Redis)
    • 查看容器日志docker logs <container>
  2. 性能问题:

    • 监控资源使用情况
    • 调整Sidekiq并发数
    • 检查数据库查询性能
  3. 健康检查失败:

    • 延长start_period给服务更多启动时间
    • 调整检查间隔和重试次数

通过以上配置,Freika/dawarich项目实现了一个高可用、易扩展的容器化部署方案,各组件职责明确且相互隔离,适合中小型Web应用的部署需求。