开发设置
开发环境搭建
相关源文件
本章引用的主要源码文件:
.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 的开发工作流、测试基础设施以及核心开发工具。
关于部署和生产配置,请参见安装与部署。关于构建与发布流程,请参见构建与部署管线。
开发环境架构
来源:Makefile:1-552, config.env:1-74, docker/Makefile:1-193
前提条件与操作系统设置
系统依赖
开发环境需要特定的操作系统包来支持文档处理、OCR 及其他核心功能。
使用提供的 Make 目标安装系统依赖:
make setup-dev-operating-system-packages
该命令会安装 Makefile:517 中定义的包:
exiftool- 元数据提取gcc- 编译工具gettext- 国际化支持gnupg1- GPG 支持graphviz- 图表生成libcairo2,libffi-dev,libjpeg-dev,libpng-dev- 图像处理库poppler-utils- PDF 处理python3-dev- Python 开发头文件sane-utils- 扫描仪支持tesseract-ocr-deu- 德语 OCR 语言包
来源:Makefile:515-517, mayan/apps/platform/templates/platform/docker/dockerfile.tmpl:28-61
Python 环境设置
创建 Python 虚拟环境并安装开发依赖:
make setup-dev-python-libraries
该命令会从多个需求文件中安装包,如 Makefile:521 所定义:
requirements.txt- 核心依赖requirements/development.txt- 开发工具requirements/testing-base.txt- 测试框架requirements/documentation.txt- 文档工具requirements/build.txt- 构建工具
来源:Makefile:519-521
本地开发环境设置
数据库配置
Mayan EDMS 支持多种数据库后端用于开发和测试。Makefile 提供了启动容器化数据库服务的命令。
PostgreSQL 开发数据库
启动用于开发的 PostgreSQL 容器:
make docker-postgresql-start
该命令会创建一个名为 mayan-test-postgresql 的容器,其凭据在 config.env:7-9 中定义:
- 数据库名称:
mayan - 用户名:
mayan - 密码:
mayanuserpass
使用 PostgreSQL 运行开发服务器:
make manage-with-postgresql runserver
来源:Makefile:437-439, Makefile:388-390, config.env:7-9
其他数据库后端
用于 MySQL 开发:
make docker-mysql-start
make manage-with-mysql runserver
用于 Oracle 开发:
make docker-oracle-start
make manage-with-oracle runserver
来源:Makefile:412-414, Makefile:426-430, Makefile:380-382, Makefile:384-386
开发服务器命令
Makefile 提供了多个运行开发服务器的命令:
| 命令 | 用途 | 设置模块 |
|---|---|---|
make runserver | 标准 Django 开发服务器 | mayan.settings.development |
make runserver-plus | Django 扩展开发服务器 | mayan.settings.development |
make shell-plus | 增强型 Django Shell | mayan.settings.development |
开发服务器默认运行在 Django 标准端口(8000),除非使用 ADDRPORT 变量指定。
来源:Makefile:392-399
预发布环境
如需模拟生产环境进行测试,可使用编排多个服务的预发布环境:
make staging-start # 启动 PostgreSQL + Redis 并初始化
make staging-frontend # 运行前端服务器
make staging-worker # 运行 Celery 工作进程(另开终端)
make staging-stop # 清理服务
预发布环境使用:
- PostgreSQL 容器作为数据库
- Redis 容器作为缓存和任务队列
- 设置模块:
mayan.settings.staging.docker
来源:Makefile:462-476
基于 Docker 的开发
开发服务架构
Docker Compose 配置支持 docker/.env:11 中定义的多个部署配置文件:
all_in_one- 包含所有服务的单个容器postgresql- 独立的 PostgreSQL 服务rabbitmq- RabbitMQ 消息代理redis- Redis 缓存和任务队列elasticsearch- 搜索后端
来源:docker/docker-compose.yml:1-290, docker/.env:1-83
Docker 开发命令
构建并运行开发栈:
# 构建 Docker 镜像
make docker-build
# 使用代理支持运行(用于内部开发)
make docker-build-with-proxy
# 启动开发容器
make docker-staging-start
# 清理开发容器
make docker-staging-cleanup
Docker 构建过程使用多阶段构建,定义在 mayan/apps/platform/templates/platform/docker/dockerfile.tmpl 的 Dockerfile 模板中。
来源:docker/Makefile:15-22, docker/Makefile:140-152
测试基础设施
测试执行框架
来源:Makefile:46-83, .gitlab-ci.yml:345-399
本地运行测试
测试框架支持多种执行模式和数据库后端:
基本测试命令
# 使用 SQLite 运行所有测试(默认)
make test-all
# 运行特定模块的测试
make test MODULE=mayan.apps.documents
# 运行带调试输出的测试
make test-debug MODULE=mayan.apps.documents
# 以调试模式运行所有测试
make test-all-debug
测试命令模板在 Makefile:16 中定义:
./manage.py test $(MODULE) --settings=$(SETTINGS) $(SKIPMIGRATIONS) $(DEBUG) $(ARGUMENTS)
特定数据库测试
针对 PostgreSQL 进行测试:
make docker-postgresql-start # 启动容器
make test-all-with-postgresql # 运行测试
make docker-postgresql-stop # 清理
针对 MySQL 进行测试:
make docker-mysql-start
make test-all-with-mysql
make docker-mysql-stop
来源:Makefile:70-83, Makefile:105-113
迁移测试
运行迁移测试以确保数据库模式变更正常工作:
# 测试所有迁移
make test-all-migrations
# 使用特定数据库测试迁移
make test-all-migrations-with-postgresql
迁移测试使用 --tag=migration_test 标志,并且不会跳过迁移(Makefile:65-68)。
来源:Makefile:65-68, Makefile:110-113
测试配置
测试设置在 mayan.settings.testing.* 下的模块中定义:
| 设置模块 | 用途 |
|---|---|
mayan.settings.testing.development | 本地开发测试 |
mayan.settings.testing.gitlab-ci | 持续集成/持续部署管线测试 |
默认测试设置模块由 Makefile:13 中的 SETTINGS 变量控制。
来源:Makefile:12-14, .gitlab-ci.yml:382-383
GitLab 持续集成/持续部署集成
持续集成管线架构
GitLab CI 配置展示了用于开发验证的完整测试和构建管线。
CI 配置是从 mayan/apps/platform/templates/platform/gitlab-ci.tmpl 的平台模板生成的,使用以下命令:
make gitlab-ci-update
来源:.gitlab-ci.yml:1-431, Makefile:115-117
本地持续集成测试
在本地执行 GitLab CI 任务以进行调试:
make gitlab-ci-run GITLAB_CI_JOB=job_postgres_test
该命令使用 Docker 模式下的 GitLab Runner 在本地复制 CI 环境。
来源:Makefile:119-125
配置管理
环境变量与设置
开发配置通过多层进行管理:
- config.env - 基础配置变量
- 环境特定设置模块 - Django 设置
- Makefile 变量 - 构建和测试配置
关键配置文件:
| 文件 | 用途 | 用法 |
|---|---|---|
config.env | 基础环境变量 | 被构建脚本引用 |
mayan/settings/literals.py | 来自 config.env 的 Python 常量 | 自动生成 |
docker/.env | Docker Compose 环境 | 容器配置 |
config.env 文件通过 contrib/scripts/copy_config_env.py 处理为 Python 字面量:
make copy-config-env # 生成 mayan/settings/literals.py
来源:config.env:1-74, mayan/settings/literals.py:1-63, contrib/scripts/copy_config_env.py:1-29
开发与生产设置对比
开发设置继承自基础设置,但会覆盖关键参数:
- 数据库:默认使用 SQLite,预发布环境使用 PostgreSQL
- 调试模式:开发环境启用
- 静态文件服务:Django 开发服务器
- Celery:开发环境同步执行
设置层级结构:
mayan.settings.base
├── mayan.settings.development
├── mayan.settings.staging.docker
└── mayan.settings.production
来源:Makefile:13, Makefile:465
开发工具与工作流
代码质量与文档
生成项目文档:
make docs-html # 构建 HTML 文档
make docs-serve # 实时文档服务器
make docs-spellcheck # 文档拼写检查
运行代码质量检查:
make safety-check # 安全漏洞扫描
make check-missing-migrations # 验证迁移
make check-missing-inits # 查找缺失的 __init__.py 文件
来源:Makefile:139-147, Makefile:480-511
翻译管理
Mayan EDMS 通过 Transifex 支持国际化。翻译管理的开发命令:
make translations-make # 提取可翻译字符串
make translations-compile # 编译翻译文件
make translations-transifex-push # 上传到 Transifex
make translations-transifex-pull # 下载翻译
位于 contrib/scripts/translations_helper.py 的翻译辅助脚本管理完整的翻译工作流。
来源:Makefile:150-175, contrib/scripts/translations_helper.py:1-321
包构建与测试
构建用于测试的 Python 包:
make python-wheel # 构建 wheel 包
make python-sdist # 构建源码分发包
make python-wheel-test-suit # 测试 wheel 包
这些命令会在 dist/ 目录中创建可分发包,并针对打包后的版本运行测试套件,以确保部署兼容性。
来源:Makefile:196-283