Dawarich项目Docker Compose部署指南
2025-07-08 01:29:18作者:董灵辛Dennis
项目概述
Dawarich是一个基于Docker容器化部署的Web应用项目,采用多服务架构设计,包含主应用服务、后台任务处理服务和数据存储服务。本项目通过Docker Compose实现一键式部署,极大简化了环境配置和依赖管理的过程。
核心服务组件
1. Redis缓存服务
dawarich_redis:
image: redis:7.4-alpine
container_name: dawarich_redis
command: redis-server
restart: unless-stopped
volumes:
- ./redis:/var/shared/redis
- 使用Redis 7.4的Alpine轻量级镜像
- 配置了自动重启策略(unless-stopped)
- 通过卷挂载实现数据持久化
- Alpine版本镜像体积小,启动快,适合生产环境
2. PostgreSQL数据库服务
dawarich_db:
image: postgis/postgis:17-3.5-alpine
container_name: dawarich_db
restart: unless-stopped
environment:
POSTGRES_USER: ${DATABASE_USERNAME}
POSTGRES_PASSWORD: ${DATABASE_PASSWORD}
volumes:
- ./db_data:/var/lib/postgresql/data
- ./db_shared:/var/shared
- 使用PostgreSQL 17与PostGIS 3.5的Alpine镜像
- 支持地理空间数据存储和处理
- 通过环境变量配置数据库用户名和密码
- 双卷挂载确保数据安全和共享目录可用
3. 主应用服务
dawarich_app:
image: freikin/dawarich:latest
container_name: dawarich_app
depends_on:
- dawarich_db
- dawarich_redis
stdin_open: true
tty: true
entrypoint: web-entrypoint.sh
command: ['bin/dev']
restart: unless-stopped
env_file:
- .env
volumes:
- ./public:/var/app/public
- ./app_storage:/var/app/storage
ports:
- 32568:3000
- 基于自定义镜像freikin/dawarich:latest
- 依赖数据库和Redis服务
- 开放标准输入和TTY,便于调试
- 使用web-entrypoint.sh作为入口脚本
- 通过.env文件加载环境变量
- 挂载public和storage目录实现数据持久化
- 映射32568端口到容器内3000端口
4. Sidekiq后台任务服务
dawarich_sidekiq:
image: freikin/dawarich:latest
container_name: dawarich_sidekiq
depends_on:
- dawarich_db
- dawarich_redis
- dawarich_app
entrypoint: sidekiq-entrypoint.sh
command: ['sidekiq']
restart: unless-stopped
env_file:
- .env
volumes:
- ./public:/var/app/public
- ./app_storage:/var/app/storage
- 与主应用共享镜像
- 使用sidekiq-entrypoint.sh作为入口脚本
- 专用于处理后台异步任务
- 同样依赖数据库和Redis服务
- 共享主应用的环境变量和存储卷
部署准备
-
环境要求:
- 已安装Docker和Docker Compose
- 确保32568端口未被占用
-
配置文件:
- 创建.env文件,配置必要的环境变量
- 确保DATABASE_USERNAME和DATABASE_PASSWORD已设置
-
目录结构:
. ├── docker-compose.yml ├── .env ├── redis/ # Redis数据目录 ├── db_data/ # PostgreSQL数据目录 ├── db_shared/ # PostgreSQL共享目录 ├── public/ # 应用公共文件 └── app_storage/ # 应用存储目录
部署步骤
-
创建所需目录:
mkdir -p redis db_data db_shared public app_storage
-
配置.env文件:
DATABASE_USERNAME=your_db_username DATABASE_PASSWORD=your_db_password # 其他必要环境变量
-
启动服务:
docker-compose up -d
-
验证服务:
- 检查容器状态:
docker-compose ps
- 查看应用日志:
docker-compose logs dawarich_app
- 检查容器状态:
运维管理
-
服务启停:
- 停止服务:
docker-compose down
- 重启单个服务:
docker-compose restart dawarich_app
- 停止服务:
-
数据备份:
- 定期备份db_data和redis目录
- 考虑使用Docker卷插件实现自动备份
-
日志查看:
- 实时查看日志:
docker-compose logs -f
- 查看特定服务日志:
docker-compose logs dawarich_sidekiq
- 实时查看日志:
性能优化建议
- 根据实际负载调整Redis和PostgreSQL的内存配置
- 考虑为Sidekiq服务配置多个工作进程
- 在生产环境中使用特定版本标签而非latest
- 根据访问量调整主应用服务的副本数量
故障排查
-
服务启动失败:
- 检查端口冲突
- 验证.env文件配置
- 查看容器日志定位问题
-
数据库连接问题:
- 确认数据库服务已正常启动
- 检查用户名密码是否正确
- 验证网络连接
-
存储权限问题:
- 确保挂载目录有适当权限
- 检查容器内应用用户的UID/GID
通过本Docker Compose配置,Dawarich项目实现了完整的微服务架构部署,各组件职责明确,便于扩展和维护。这种部署方式特别适合中小规模的生产环境,兼顾了开发便捷性和运维可靠性。