DocMost 容器化部署实战

DocMost 容器化部署实战

本文档记录了DocMost文档管理系统的容器化部署过程,包含详细的配置说明和实战经验。

1. 项目介绍

DocMost 是一个开源的文档管理系统,提供文档存储、共享和协作功能。本项目使用 Docker 容器化部署,包含以下组件:

  • DocMost 应用服务 - 核心应用服务,处理文档管理功能
  • Nginx 反向代理 - 处理HTTP请求,提供域名访问支持
  • PostgreSQL 数据库 - 存储应用数据
  • Redis 缓存服务 - 提供缓存支持,提升性能

2. 系统要求

  • Docker - 容器运行环境
  • Docker Compose - 容器编排工具
  • 至少 2GB 内存 - 确保服务正常运行
  • 至少 10GB 磁盘空间 - 存储文档和数据库数据

3. 目录结构

|-- nginx
|   |-- conf.d   (Nginx配置文件目录,存放server配置)
|   |-- ssl      (SSL证书目录,用于HTTPS配置)
|   |-- www      (静态文件目录,存放网站静态资源)
|-- data         (DocMost存储目录,存放上传的文档)
|-- db           (PostgreSQL数据目录,持久化数据库)
|-- redis        (Redis数据目录,持久化缓存)

4. 配置文件说明

4.1 docker-compose.yml

version: '3'  # 使用Docker Compose版本3

services:
  docmost:
    image: docmost/docmost:latest  # 使用最新版本的DocMost镜像
    container_name: docmost-app  # 容器名称
    depends_on:  # 依赖服务
      - db  # 依赖数据库服务
      - redis  # 依赖Redis服务
    environment:  # 环境变量配置
      APP_URL: 'http://nginx'  # 应用访问地址
      APP_SECRET: 'G6phrmJxavAVU2JRsssasfaQSRrmJxwwe'  # 应用密钥
      DATABASE_URL: 'postgresql://docmost:STRONG_DB_PASSWORD@db:5432/docmost?schema=public'  # 数据库连接URL
      REDIS_URL: 'redis://redis:6379'  # Redis连接URL
    restart: always  # 容器崩溃后自动重启
    volumes:  # 数据卷挂载
      - ./data:/app/data/storage  # 挂载文档存储目录

  nginx:
    image: nginx:alpine  # 使用轻量级Nginx镜像
    container_name: docmost-nginx  # 容器名称
    ports:  # 端口映射
      - "80:80"  # HTTP端口
      - "443:443"  # HTTPS端口
    volumes:  # 数据卷挂载
      - ./nginx/conf.d:/etc/nginx/conf.d  # Nginx配置目录
      - ./nginx/www:/var/www/html  # 静态文件目录
      - ./nginx/ssl:/etc/nginx/ssl  # SSL证书目录
    depends_on:  # 依赖服务
      - docmost  # 依赖DocMost服务
    restart: always  # 容器崩溃后自动重启

  db:
    image: postgres:16-alpine  # 使用PostgreSQL 16版本
    container_name: docmost-db  # 容器名称
    environment:  # 环境变量配置
      POSTGRES_DB: docmost  # 数据库名称
      POSTGRES_USER: docmost  # 数据库用户
      POSTGRES_PASSWORD: 自己的密码  # 数据库密码
    restart: always  # 容器崩溃后自动重启
    volumes:  # 数据卷挂载
      - ./db:/var/lib/postgresql/data  # 挂载数据库数据目录

  redis:
    image: redis:7.2-alpine  # 使用Redis 7.2版本
    container_name: docmost-redis  # 容器名称
    restart: always  # 容器崩溃后自动重启
    volumes:  # 数据卷挂载
      - ./redis:/data  # 挂载Redis数据目录

4.2 Nginx 配置 (nginx/conf.d/http.conf)

server {
    listen 80;  # 监听80端口
    server_name example.com;  # 域名配置,需要替换为实际域名
    client_max_body_size 100M;  # 设置最大上传文件大小
    location / {
        proxy_pass http://docmost:3000;  # 反向代理到DocMost服务
        proxy_http_version 1.1;  # 使用HTTP/1.1协议
        proxy_set_header Upgrade $http_upgrade;  # 支持WebSocket
        proxy_set_header Connection 'upgrade';  # 支持WebSocket
        proxy_set_header Host $host;  # 传递主机头
        proxy_set_header X-Real-IP $remote_addr;  # 传递真实IP
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  # 传递转发IP
        proxy_set_header X-Forwarded-Proto $scheme;  # 传递协议
        proxy_cache_bypass $http_upgrade;  # 缓存控制
    }
}

5. 部署步骤

5.1 准备工作

  1. 创建必要的目录:

    mkdir -p nginx/conf.d nginx/ssl nginx/www data db redis
    
  2. 配置 Nginx:

    • 将 Nginx 配置文件放入 nginx/conf.d 目录
    • 修改配置文件中的域名为实际域名

5.2 启动服务

  1. 启动所有服务:

    docker compose up -d  # -d参数表示后台运行
    
  2. 检查服务状态:

    docker compose ps  # 查看所有容器状态
    

5.3 访问服务

  • 通过配置的域名访问 DocMost 服务
  • 默认端口:80 (HTTP) 或 443 (HTTPS)

6. 维护指南

6.1 备份数据

  1. 数据库备份:

    docker compose exec db pg_dump -U docmost docmost > backup.sql  # 导出数据库
    
  2. 文件备份:

    • 备份 data 目录 - 文档存储
    • 备份 db 目录 - 数据库数据
    • 备份 redis 目录 - 缓存数据

6.2 更新服务

  1. 拉取最新镜像:

    docker compose pull  # 更新所有镜像
    
  2. 重启服务:

    docker compose up -d  # 重启所有服务
    

7. 故障排除

7.1 常见问题

  1. 服务无法启动:
    • 检查端口是否被占用 - 使用netstat -tulpn查看
    • 检查目录权限 - 确保目录可读写
    • 检查配置文件格式 - 使用docker compose config验证
  2. 数据库连接问题:
    • 检查数据库密码 - 确保密码正确
    • 检查网络连接 - 确保容器间可以通信
  3. 文件上传问题:
    • 检查存储目录权限 - 确保目录可写
    • 检查 Nginx 配置的 client_max_body_size - 确保足够大

7.2 日志查看

# 查看所有服务日志
docker compose logs  # 查看所有容器日志

# 查看特定服务日志
docker compose logs docmost  # DocMost日志
docker compose logs nginx    # Nginx日志
docker compose logs db       # 数据库日志
docker compose logs redis    # Redis日志

8. 安全建议

  1. 修改默认密码:
    • 修改数据库密码 - 使用强密码
    • 修改 APP_SECRET - 使用随机生成的密钥
  2. 启用 HTTPS:
    • 配置 SSL 证书 - 使用Let’s Encrypt
    • 修改 Nginx 配置 - 启用HTTPS
  3. 定期更新:
    • 更新 Docker 镜像 - 获取安全补丁
    • 更新系统补丁 - 保持系统安全

9. 性能优化

  1. 数据库优化:
    • 配置数据库缓存 - 提升查询性能
    • 优化查询语句 - 减少数据库负载
  2. Redis 优化:
    • 配置内存限制 - 防止内存溢出
    • 设置持久化策略 - 确保数据安全
  3. Nginx 优化:
    • 配置缓存 - 减少后端压力
    • 优化连接数 - 提升并发能力

10. 扩展功能

  1. 添加监控:
    • Prometheus - 指标收集
    • Grafana - 可视化监控
  2. 添加日志收集:
    • ELK Stack - 日志分析
    • Fluentd - 日志收集
  3. 添加负载均衡:
    • 配置多实例 - 提升可用性
    • 使用 HAProxy - 实现负载均衡

11. 项目迁移指南

11.1 数据备份

  1. 停止所有服务:

    docker compose down  # 停止并移除所有容器
    
  2. 备份数据库:

    # 导出数据库
    docker compose exec db pg_dump -U docmost docmost > docmost_backup.sql
    
    # 或者直接备份数据目录
    tar -czvf db_backup.tar.gz ./db
    
  3. 备份文档数据:

    tar -czvf data_backup.tar.gz ./data
    
  4. 备份Redis数据:

    tar -czvf redis_backup.tar.gz ./redis
    
  5. 备份配置文件:

    tar -czvf config_backup.tar.gz ./nginx/conf.d docker-compose.yml
    

11.2 新环境准备

  1. 安装必要软件:

    # 安装Docker
    curl -fsSL https://get.docker.com | sh
    
    # 安装Docker Compose
    sudo curl -L "https://github.com/docker/compose/releases/download/v2.24.5/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
    sudo chmod +x /usr/local/bin/docker-compose
    
  2. 创建目录结构:

    mkdir -p nginx/conf.d nginx/ssl nginx/www data db redis
    

11.3 数据恢复

  1. 恢复数据库:

    # 方法1:使用SQL备份文件
    docker compose up -d db  # 先启动数据库服务
    docker compose exec -T db psql -U docmost docmost < docmost_backup.sql
    
    # 方法2:使用数据目录备份
    tar -xzvf db_backup.tar.gz -C ./
    
  2. 恢复文档数据:

    tar -xzvf data_backup.tar.gz -C ./
    
  3. 恢复Redis数据:

    tar -xzvf redis_backup.tar.gz -C ./
    
  4. 恢复配置文件:

    tar -xzvf config_backup.tar.gz -C ./
    

11.4 服务迁移

  1. 修改配置文件:

    • 更新docker-compose.yml中的环境变量
    • 更新Nginx配置中的域名
    • 检查所有路径配置
  2. 启动服务:

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

    # 检查容器状态
    docker compose ps
    
    # 检查日志
    docker compose logs
    

11.5 迁移注意事项

  1. 数据一致性:
    • 确保在业务低峰期进行迁移
    • 迁移前停止所有写入操作
    • 迁移后验证数据完整性
  2. 网络配置:
    • 更新DNS记录
    • 配置防火墙规则
    • 检查端口映射
  3. 权限设置:
    • 确保目录权限正确
    • 检查文件所有权
    • 验证服务账户权限
  4. 性能优化:
    • 根据新环境调整配置
    • 优化数据库参数
    • 调整缓存策略

11.6 回滚方案

  1. 准备回滚:

    # 备份当前数据
    tar -czvf rollback_backup.tar.gz ./data ./db ./redis
    
  2. 执行回滚:

    # 停止服务
    docker compose down
    
    # 恢复备份
    tar -xzvf rollback_backup.tar.gz -C ./
    
    # 重启服务
    docker compose up -d
    
  3. 验证回滚:

    • 检查服务状态
    • 验证数据完整性
    • 确认功能正常
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值