目录
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 准备工作
-
创建必要的目录:
mkdir -p nginx/conf.d nginx/ssl nginx/www data db redis
-
配置 Nginx:
- 将 Nginx 配置文件放入
nginx/conf.d
目录 - 修改配置文件中的域名为实际域名
- 将 Nginx 配置文件放入
5.2 启动服务
-
启动所有服务:
docker compose up -d # -d参数表示后台运行
-
检查服务状态:
docker compose ps # 查看所有容器状态
5.3 访问服务
- 通过配置的域名访问 DocMost 服务
- 默认端口:80 (HTTP) 或 443 (HTTPS)
6. 维护指南
6.1 备份数据
-
数据库备份:
docker compose exec db pg_dump -U docmost docmost > backup.sql # 导出数据库
-
文件备份:
- 备份
data
目录 - 文档存储 - 备份
db
目录 - 数据库数据 - 备份
redis
目录 - 缓存数据
- 备份
6.2 更新服务
-
拉取最新镜像:
docker compose pull # 更新所有镜像
-
重启服务:
docker compose up -d # 重启所有服务
7. 故障排除
7.1 常见问题
- 服务无法启动:
- 检查端口是否被占用 - 使用
netstat -tulpn
查看 - 检查目录权限 - 确保目录可读写
- 检查配置文件格式 - 使用
docker compose config
验证
- 检查端口是否被占用 - 使用
- 数据库连接问题:
- 检查数据库密码 - 确保密码正确
- 检查网络连接 - 确保容器间可以通信
- 文件上传问题:
- 检查存储目录权限 - 确保目录可写
- 检查 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. 安全建议
- 修改默认密码:
- 修改数据库密码 - 使用强密码
- 修改 APP_SECRET - 使用随机生成的密钥
- 启用 HTTPS:
- 配置 SSL 证书 - 使用Let’s Encrypt
- 修改 Nginx 配置 - 启用HTTPS
- 定期更新:
- 更新 Docker 镜像 - 获取安全补丁
- 更新系统补丁 - 保持系统安全
9. 性能优化
- 数据库优化:
- 配置数据库缓存 - 提升查询性能
- 优化查询语句 - 减少数据库负载
- Redis 优化:
- 配置内存限制 - 防止内存溢出
- 设置持久化策略 - 确保数据安全
- Nginx 优化:
- 配置缓存 - 减少后端压力
- 优化连接数 - 提升并发能力
10. 扩展功能
- 添加监控:
- Prometheus - 指标收集
- Grafana - 可视化监控
- 添加日志收集:
- ELK Stack - 日志分析
- Fluentd - 日志收集
- 添加负载均衡:
- 配置多实例 - 提升可用性
- 使用 HAProxy - 实现负载均衡
11. 项目迁移指南
11.1 数据备份
-
停止所有服务:
docker compose down # 停止并移除所有容器
-
备份数据库:
# 导出数据库 docker compose exec db pg_dump -U docmost docmost > docmost_backup.sql # 或者直接备份数据目录 tar -czvf db_backup.tar.gz ./db
-
备份文档数据:
tar -czvf data_backup.tar.gz ./data
-
备份Redis数据:
tar -czvf redis_backup.tar.gz ./redis
-
备份配置文件:
tar -czvf config_backup.tar.gz ./nginx/conf.d docker-compose.yml
11.2 新环境准备
-
安装必要软件:
# 安装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
-
创建目录结构:
mkdir -p nginx/conf.d nginx/ssl nginx/www data db redis
11.3 数据恢复
-
恢复数据库:
# 方法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 ./
-
恢复文档数据:
tar -xzvf data_backup.tar.gz -C ./
-
恢复Redis数据:
tar -xzvf redis_backup.tar.gz -C ./
-
恢复配置文件:
tar -xzvf config_backup.tar.gz -C ./
11.4 服务迁移
-
修改配置文件:
- 更新
docker-compose.yml
中的环境变量 - 更新Nginx配置中的域名
- 检查所有路径配置
- 更新
-
启动服务:
docker compose up -d
-
验证服务:
# 检查容器状态 docker compose ps # 检查日志 docker compose logs
11.5 迁移注意事项
- 数据一致性:
- 确保在业务低峰期进行迁移
- 迁移前停止所有写入操作
- 迁移后验证数据完整性
- 网络配置:
- 更新DNS记录
- 配置防火墙规则
- 检查端口映射
- 权限设置:
- 确保目录权限正确
- 检查文件所有权
- 验证服务账户权限
- 性能优化:
- 根据新环境调整配置
- 优化数据库参数
- 调整缓存策略
11.6 回滚方案
-
准备回滚:
# 备份当前数据 tar -czvf rollback_backup.tar.gz ./data ./db ./redis
-
执行回滚:
# 停止服务 docker compose down # 恢复备份 tar -xzvf rollback_backup.tar.gz -C ./ # 重启服务 docker compose up -d
-
验证回滚:
- 检查服务状态
- 验证数据完整性
- 确认功能正常