首页
/ Dawarich项目Docker Compose部署指南

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服务
  • 共享主应用的环境变量和存储卷

部署准备

  1. 环境要求

    • 已安装Docker和Docker Compose
    • 确保32568端口未被占用
  2. 配置文件

    • 创建.env文件,配置必要的环境变量
    • 确保DATABASE_USERNAME和DATABASE_PASSWORD已设置
  3. 目录结构

    .
    ├── docker-compose.yml
    ├── .env
    ├── redis/          # Redis数据目录
    ├── db_data/        # PostgreSQL数据目录
    ├── db_shared/      # PostgreSQL共享目录
    ├── public/         # 应用公共文件
    └── app_storage/    # 应用存储目录
    

部署步骤

  1. 创建所需目录:

    mkdir -p redis db_data db_shared public app_storage
    
  2. 配置.env文件:

    DATABASE_USERNAME=your_db_username
    DATABASE_PASSWORD=your_db_password
    # 其他必要环境变量
    
  3. 启动服务:

    docker-compose up -d
    
  4. 验证服务:

    • 检查容器状态:docker-compose ps
    • 查看应用日志:docker-compose logs dawarich_app

运维管理

  1. 服务启停

    • 停止服务:docker-compose down
    • 重启单个服务:docker-compose restart dawarich_app
  2. 数据备份

    • 定期备份db_data和redis目录
    • 考虑使用Docker卷插件实现自动备份
  3. 日志查看

    • 实时查看日志:docker-compose logs -f
    • 查看特定服务日志:docker-compose logs dawarich_sidekiq

性能优化建议

  1. 根据实际负载调整Redis和PostgreSQL的内存配置
  2. 考虑为Sidekiq服务配置多个工作进程
  3. 在生产环境中使用特定版本标签而非latest
  4. 根据访问量调整主应用服务的副本数量

故障排查

  1. 服务启动失败

    • 检查端口冲突
    • 验证.env文件配置
    • 查看容器日志定位问题
  2. 数据库连接问题

    • 确认数据库服务已正常启动
    • 检查用户名密码是否正确
    • 验证网络连接
  3. 存储权限问题

    • 确保挂载目录有适当权限
    • 检查容器内应用用户的UID/GID

通过本Docker Compose配置,Dawarich项目实现了完整的微服务架构部署,各组件职责明确,便于扩展和维护。这种部署方式特别适合中小规模的生产环境,兼顾了开发便捷性和运维可靠性。