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
- 可根据实际运行情况调整
健康检查机制
所有服务均配置了完善的健康检查:
- Redis: 通过
redis-cli incr ping
命令检查 - PostgreSQL: 通过
pg_isready
命令检查 - 主应用: 通过HTTP API端点检查
- Sidekiq: 通过进程检查
检查参数包括:
interval
: 检查间隔(10秒)retries
: 重试次数(5-30次)start_period
: 启动宽限期(30秒)timeout
: 超时时间(10秒)
部署建议
-
生产环境调整:
- 修改
RAILS_ENV
为production
- 调整资源限制(CPU/内存)
- 启用Prometheus监控(取消相关注释)
- 修改
-
性能优化:
- 根据负载调整Sidekiq并发数
- 配置数据库连接池
- 考虑添加Redis缓存策略
-
安全建议:
- 修改默认密码
- 限制网络访问
- 启用TLS加密
故障排查
-
容器启动失败:
- 检查依赖服务状态(数据库/Redis)
- 查看容器日志
docker logs <container>
-
性能问题:
- 监控资源使用情况
- 调整Sidekiq并发数
- 检查数据库查询性能
-
健康检查失败:
- 延长
start_period
给服务更多启动时间 - 调整检查间隔和重试次数
- 延长
通过以上配置,Freika/dawarich项目实现了一个高可用、易扩展的容器化部署方案,各组件职责明确且相互隔离,适合中小型Web应用的部署需求。