安装与部署
安装与部署
相关源文件
本章引用的主要源码文件:
.gitlab-ci.yml.tx/configMakefileconfig.envcontrib/scripts/copy_config_env.pycontrib/scripts/password_randomizer.pycontrib/scripts/translations_helper.pycontrib/settings/ldap_connection_settings.pydocker/.envdocker/Makefiledocker/docker-compose.ymldocker/stack.ymldocs/parts/troubleshooting/static_files.txtmayan/apps/appearance/management/commands/appearance_prepare_static.pymayan/apps/authentication/dependencies.pymayan/apps/cabinets/migrations/0001_initial.pymayan/apps/common/management/base.pymayan/apps/common/tests/test_management_commands.pymayan/apps/mailer/locale/en/LC_MESSAGES/django.pomayan/apps/platform/management/commands/platform_template.pymayan/apps/platform/templates/platform/docker/dockerfile.tmplmayan/apps/platform/templates/platform/docker/entrypoint.tmplmayan/apps/platform/templates/platform/docker/supervisord.tmplmayan/apps/platform/templates/platform/gitlab-ci.tmplmayan/settings/literals.py
本文档涵盖了 Mayan EDMS 的安装与部署流程,包括基于 Docker 的部署、环境配置以及持续集成/持续部署(CI/CD)管线。文档重点介绍了容器化部署方式,这也是推荐的生产环境部署方法。
关于部署后的配置管理信息,请参见配置管理。关于开发环境搭建,请参见开发环境搭建。
概述
Mayan EDMS 提供了多种部署方法,其中 Docker Compose 是生产环境部署的主要推荐方式。该系统采用微服务架构设计,可以部署为单一的全功能容器,也可以拆分为独立服务以实现可伸缩性。
部署架构
来源:docker/docker-compose.yml:1-290
Docker Compose 部署
服务配置
Docker Compose 配置使用配置(profile)来控制部署哪些服务:
| 配置 | 服务 | 用途 |
|---|---|---|
all_in_one | app | 包含所有组件的单一容器 |
postgresql | postgresql | PostgreSQL 数据库 |
redis | redis | Redis 缓存与锁管理器 |
rabbitmq | rabbitmq | RabbitMQ 消息代理 |
elasticsearch | elasticsearch | Elasticsearch 搜索后端 |
extra_frontend | frontend | 独立的前端服务 |
extra_worker_* | worker_a、worker_b 等 | 独立的工作进程 |
traefik | traefik | 带 SSL 的反向代理 |
核心服务配置
来源:docker/docker-compose.yml:3-21
环境配置
部署使用 .env 文件和 config.env 中定义的环境变量:
安全配置:
MAYAN_DATABASE_PASSWORD=mayandbpass
MAYAN_REDIS_PASSWORD=mayanredispassword
MAYAN_RABBITMQ_PASSWORD=mayanrabbitpass
服务端点:
MAYAN_DOCKER_WAIT="postgresql:5432 rabbitmq:5672 redis:6379"
Compose 配置:
COMPOSE_PROFILES=all_in_one,postgresql,rabbitmq,redis
来源:docker/.env:1-83、config.env:1-74
容器构建流程
来源:mayan/apps/platform/templates/platform/docker/dockerfile.tmpl:1-204
多阶段构建详情
Docker 构建过程采用多阶段方法:
- 基础镜像(
base_image):安装运行时依赖- 操作系统包(tesseract-ocr、libreoffice 等)
- 创建
mayan用户 - 配置 FUSE 用于文档索引
- 构建镜像(
builder_image):编译应用程序- 安装构建依赖(gcc、python3-dev 等)
- 从源码构建 Python Wheel
- 使用
appearance_prepare_static收集静态文件
- 最终镜像:将基础镜像与构建产物合并
- 从构建镜像复制 Wheel 和静态文件
- 生成入口点和 supervisord 配置
- 设置卷挂载并暴露端口 8000
来源:mayan/apps/platform/templates/platform/docker/dockerfile.tmpl:8-204
持续集成/持续部署(CI/CD)管线
来源:.gitlab-ci.yml:1-431
测试任务
CI 管线包含全面的测试:
数据库测试:
job_postgres_test:针对 PostgreSQL 12.11 进行测试job_sqlite_test:针对 SQLite 进行测试- 环境变量:
MAYAN_DATABASES配置数据库连接
升级测试:
job_postgres_upgrade_test:安装旧版本、创建测试数据、执行升级job_sqlite_upgrade_test:针对 SQLite 的类似升级测试- 使用
common_perform_upgrade管理命令
来源:.gitlab-ci.yml:375-398、.gitlab-ci.yml:313-343
管理命令
初始设置
common_initial_setup 命令用于初始化新安装:
mayan-edms.py common_initial_setup [--force] [--no-dependencies]
流程:
- 创建媒体目录结构
- 生成
SECRET_KEY文件 - 创建用户设置文件夹
- 安装依赖(除非指定
--no-dependencies) - 通过
autoadmin_create创建管理员用户 - 准备静态文件
来源:mayan/apps/common/management/base.py:36-86
升级流程
common_perform_upgrade 命令用于处理版本升级:
mayan-edms.py common_perform_upgrade [--no-dependencies]
流程:
- 发送
signal_pre_upgrade信号 - 如果用户设置文件夹缺失则创建
- 安装依赖(除非指定
--no-dependencies) - 发送
signal_perform_upgrade信号 - 发送
signal_post_upgrade信号
来源:mayan/apps/common/management/base.py:95-126
环境变量
核心配置
| 变量 | 用途 | 默认值 |
|---|---|---|
MAYAN_DATABASES | 数据库配置字典 | SQLite |
MAYAN_CELERY_BROKER_URL | 消息代理 URL | redis://localhost |
MAYAN_CELERY_RESULT_BACKEND | 任务结果后端 | redis://localhost |
MAYAN_LOCK_MANAGER_BACKEND | 分布式锁 | RedisLock |
MAYAN_MEDIA_ROOT | 文档存储路径 | /var/lib/mayan |
工作进程配置
每个工作进程类可以单独配置并发数和资源限制:
MAYAN_WORKER_A_CONCURRENCY=0 # 自动检测
MAYAN_WORKER_A_MAX_MEMORY_PER_CHILD=300000
MAYAN_WORKER_A_MAX_TASKS_PER_CHILD=100
来源:config.env:62-73、mayan/apps/platform/templates/platform/docker/entrypoint.tmpl:102-130
构建自动化
Makefile 目标
Makefile 提供了部署自动化功能:
Docker 操作:
docker-build:构建本地 Docker 镜像docker-compose-up:启动完整堆栈docker-staging-start:启动预发布环境
发布管理:
gitlab-release-all-major:触发主版本发布gitlab-release-docker-minor:仅 Docker 的次版本发布increase-version:递增版本号
开发:
staging-start:使用 PostgreSQL/Redis 进行本地开发manage-with-postgresql:针对 PostgreSQL 运行命令
来源:Makefile:15-477、docker/Makefile:15-193
版本管理
版本信息存储在多个文件中:
mayan/__init__.py:Python 包版本docker/rootfs/version:Docker 镜像版本- 构建号以十六进制计算:
0x{主版本}{次版本}{补丁版本}
来源:Makefile:179-185
生产部署注意事项
资源需求
最低配置:
- 2 个 CPU 核心
- 4GB 内存
- 10GB 应用存储空间
- 额外的文档存储空间
扩展配置:
- 按类别分离工作进程容器
- 在负载均衡器后部署多个前端实例
- 使用外部 PostgreSQL 和 Redis 实例
安全
数据库安全:
- 在
.env文件中更改默认密码 - 使用通过
contrib/scripts/password_randomizer.py生成的强密码 - 将数据库访问限制在应用网络内
SSL/TLS:
- 启用 Traefik 以自动获取 SSL 证书
- 配置
MAYAN_TRAEFIK_LETS_ENCRYPT_EMAIL - 设置
MAYAN_TRAEFIK_LETS_ENCRYPT_TLS_CHALLENGE=true
来源:docker/.env:22-52、contrib/scripts/password_randomizer.py:1-30