ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

OpenProject 备份完全指南:从 DEB/RPM 包安装到 Docker 部署的数据守护方案

OpenProject 备份完全指南:从 DEB/RPM 包安装到 Docker 部署的数据守护方案 OpenProject 备份完全指南从 DEB/RPM 包安装到 Docker 部署的数据守护方案【免费下载链接】openprojectOpenProject is the leading open source project management software for product, project and portfolio management. A powerful Jira alternative with agile planning, issue tracking, roadmaps, Gantt charts, time tracking, collaboration features, and more. Available on premises or in the cloud. ⭐ Star us on GitHub项目地址: https://gitcode.com/GitHub_Trending/op/openprojectOpenProject 作为开源项目管理软件其数据由 PostgreSQL 数据库、配置文件、上传附件attachments以及可选的 Git/SVN 代码仓库共同构成。本文基于 docs/installation-and-operations/operation/backing-up/README.md 官方运维文档系统讲解在不同部署形态下DEB/RPM 包安装、docker-compose、all-in-one 容器的完整备份策略、具体命令与底层实现原理并结合仓库源码lib/tasks/backup.rake揭示备份工具的真实调用链帮助运维人员建立一套可执行、可验证、可恢复的备份流程。为什么必须定期备份官方文档明确建议定期备份 OpenProject 安装尤其是在升级到新版本之前。升级过程涉及数据库迁移migration与前端资源重建任何一个环节异常都可能导致数据不可用一份及时、完整的备份是回滚与恢复的前提。从源码结构看OpenProject 的数据分布面较广备份不能只针对数据库而必须覆盖以下全部组成部分数据库中的数据所有工作包work packages、项目、成员、查询、配置等业务数据的最终载体配置文件安装相关的环境配置与定制参数上传文件附件通过attachments功能上传的文件实体代码仓库Subversion、Git若在 OpenProject 中启用了仓库集成功能。DEB/RPM 包安装的备份一条命令打包全部对于基于 DEB/RPM 的包安装方式官方在打包时内置了专门的备份工具可以对上述所有组成部分一次性生成快照。执行方式极其简单sudo openproject run backup该命令会在系统中生成如下目录并写入带时间戳的备份文件/var/db/openproject/backup执行后该目录的典型内容如下rootip-10-0-0-228:/home/admin# ls -al /var/db/openproject/backup/ total 1680 drwxr-xr-x 2 openproject openproject 4096 Nov 19 21:00 . drwxr-xr-x 6 openproject openproject 4096 Nov 19 21:00 .. -rw-r----- 1 openproject openproject 1361994 Nov 19 21:00 attachments-20191119210038.tar.gz -rw-r----- 1 openproject openproject 1060 Nov 19 21:00 conf-20191119210038.tar.gz -rw-r----- 1 openproject openproject 126 Nov 19 21:00 git-repositories-20191119210038.tar.gz -rw-r----- 1 openproject openproject 332170 Nov 19 21:00 postgresql-dump-20191119210038.pgdump -rw-r----- 1 openproject openproject 112 Nov 19 21:00 svn-repositories-20191119210038.tar.gz可以清晰看到一次备份即生成五类文件命名规则均为类型-时间戳时间戳格式形如20191119210038年-月-日-时-分-秒备份文件内容说明attachments-*.tar.gz上传附件解压后对应文件存储目录通常体量最大conf-*.tar.gz配置文件对应/etc/openproject含安装向导生成的配置git-repositories-*.tar.gzGit 仓库仅在启用 Git 仓库集成时才有实质内容svn-repositories-*.tar.gzSVN 仓库仅在启用 SVN 仓库集成时才有实质内容postgresql-dump-*.pgdump数据库逻辑备份PostgreSQL 自定义格式custom formatdump完成备份后官方建议立即将这些 dump 文件复制到安全位置例如 S3 bucket 或专门的备份服务器——本机磁盘上的备份无法抵御磁盘故障或误删除。从源码看backup任务的真实调用链仓库中的 lib/tasks/backup.rake 揭示了该备份工具的底层实现。包安装的openproject run backup在应用层面对应 Rake 任务backup:database:create其核心逻辑lib/tasks/backup.rake#L33-L49为desc Creates a database dump which can be used as a backup. task :create, [:path_to_backup] [:environment] do |_task, args| args.with_defaults(path_to_backup: default_db_filename) Pathname(args[:path_to_backup]).dirname.mkpath include OpenProject::PostgresEnvironment pg_dump_call %W[ pg_dump --clean --file#{args[:path_to_backup]} --formatcustom --no-owner ] Kernel.system(pg_env, *pg_dump_call) end几点值得注意的实现细节使用 PostgreSQL 官方pg_dump工具并以custom 格式--formatcustom输出即上文postgresql-dump-*.pgdump文件追加了--clean在恢复前清理目标对象与--no-owner不保留原 owner这保证了 dump 可以在不同用户名/主机的数据库上恢复通过OpenProject::PostgresEnvironment注入数据库连接环境变量连接信息来自安装的DATABASE_URL配置默认输出文件名为openproject-Rails.env-db-时间戳.backup时间戳格式如20141020T1653350200见 lib/tasks/backup.rake#L74-L81。同文件还提供了对应的恢复任务backup:database:restorelib/tasks/backup.rake#L51-L70使用pg_restore --clean --no-owner --single-transaction --dbname...完成还原其中--single-transaction保证了恢复过程的原子性。另外backup:allow_now任务lib/tasks/backup.rake#L88-L95允许管理员在创建新备份 token 后立即发起备份跳过默认的冷却等待期由配置backup_initial_waiting_period控制。Docker 部署形态的备份Docker 场景下需要区分两种部署方式备份策略截然不同。docker-compose备份数据卷如果使用 docker-compose 部署数据保存在 Docker 管理的卷volumes中。官方建议参考 Docker 官方文档中关于 volumes 备份的说明来备份数据。以本仓库根目录的 docker-compose.yml 为例其开发栈中定义了pgdataPostgreSQL 数据目录挂载于容器内/var/lib/postgresql/data与opdataOpenProject 附件目录挂载于/var/openproject/assets等命名卷生产 compose 部署的结构与之类似备份卷即备份全部持久化数据。all-in-one 容器直接备份绑定挂载目录all-in-one 容器模式下可以用-v选项将本地目录绑定挂载进容器随后直接备份宿主机上的这些目录即可。官方给出的典型启动命令sudo mkdir -p /var/lib/openproject/{pgdata,assets} docker run -d -p 8080:80 --name openproject -e SECRET_KEY_BASEyour-secret-key-base \ -v /var/lib/openproject/pgdata:/var/openproject/pgdata \ -v /var/lib/openproject/assets:/var/openproject/assets \ openproject/openproject:17此时只需备份宿主机上的/var/lib/openproject目录例如传输到 S3 或 FTP 服务器即可完整覆盖数据库数据与附件数据。SECRET_KEY_BASE用于会话与 token 的加密签名务必一并妥善保管否则备份恢复到新环境后将无法解析原有会话与令牌。数据库的逻辑导出pg_dump除卷级备份外官方还提供了数据库逻辑导出的标准做法便于做细粒度的定期备份。docker-compose 场景直接从数据库容器导出docker exec -it db_1 pg_dump -U postgres -d openproject -x -O openproject.sql该命令假设数据库容器名为db_1若不确定实际名称用docker ps | grep postgres查看。-x表示不导出权限access privileges-O表示不设置对象 owner得到的openproject.sql是纯 SQL 文本 dump便于迁移到不同环境。all-in-one 容器场景通过容器内的 postgres 用户执行docker exec -it $OP_CONTAINER_NAME su - postgres -c pg_dump -d openproject -x -O openproject.sql其中$OP_CONTAINER_NAME为 OpenProject 容器名可通过docker ps | grep openproject获取。将 dump 导入新容器与恢复流程衔接导出的 SQL dump 或.pgdump文件最终要能用于恢复。官方指引在备份文档的末尾将读者导向恢复restoring章节那里详细描述了docker-compose 恢复停止应用容器 → 删除并重建openproject数据库 → 用psql导入 SQL dump或用pg_restore导入.pgdump→ 恢复附件到 assets 卷 → 运行一次seeder完成迁移 → 重启应用all-in-one 容器恢复初始化pgdata→ 用 postgres 容器执行DROP/CREATE DATABASE并\i openproject.sql或pg_restore导入.pgdump→ 修正目录属主chown -R 102:102 /var/lib/openproject/pgdata、chown -R 1000:1000 /var/lib/openproject/assets→ 启动最终容器。建议在完成备份后立即在隔离环境演练一次恢复确保 dump 可读、可导入这比任何备份脚本都更能保障数据安全。备份策略建议总结结合官方文档与仓库源码一套稳健的 OpenProject 备份策略应包含升级前必备份执行sudo openproject run backup包安装或卷/数据库导出Docker确保可回滚定期调度将备份命令纳入 cron/systemd timer包安装场景可对openproject run backup做每日/每周调度异地保存将/var/db/openproject/backup包安装或/var/lib/openprojectall-in-one 容器的内容同步至 S3、FTP 或备份服务器防止单点故障保管敏感信息SECRET_KEY_BASE与DATABASE_URL中的数据库口令需与备份一并安全留存它们是恢复的前提验证可恢复性定期在测试环境执行恢复演练核对数据库、附件与配置文件的完整性。备份只是数据安全的一半另一半是经过验证的恢复能力。将本文的备份命令与恢复指南结合使用即可为 OpenProject 安装构建完整的容灾闭环。【免费下载链接】openprojectOpenProject is the leading open source project management software for product, project and portfolio management. A powerful Jira alternative with agile planning, issue tracking, roadmaps, Gantt charts, time tracking, collaboration features, and more. Available on premises or in the cloud. ⭐ Star us on GitHub项目地址: https://gitcode.com/GitHub_Trending/op/openproject创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表