OpenProject服务的备份与恢复
2026/6/11 4:29:58 网站建设 项目流程

1. 参考

  1. Backing up your OpenProject installation
  2. Restoring an OpenProject backup
  3. Linux安装OpenProject

2. 环境

  1. Docker compose部署的OpenProject服务
  2. 服务器192.168.7.28 作为主服务器,预装OpenProject服务,提供生产环境
  3. 服务器192.168.15.96 作为备份服务器,预装OpenProject服务,作为备份环境

3. 流程

  1. 服务器192.168.7.28 备份OpenProject服务的Postgresql数据库
  2. 服务器192.168.15.96使用rsync命令同步OpenProject服务的配置文件(docker-compose.yml)、存储文件(assets)、Postgresql数据库备份文件
  3. 服务器192.168.15.96恢复Postgresql数据库备份文件

4. 备份Postgresql数据库

dockerexecopenproject-db-1 pg_dump -U postgres -d openproject --insert>"/public/postgresql/pgsqlbackup/pgsql_openproject.sql"
  • openproject-db-1:posgresql的容器名称
  • -U postgres:连接数据库账号
  • -d openproject: 备份数据库名称
  • –insert 生成insert语句的备份文件
  • “/public/postgresql/pgsqlbackup/pgsql_openproject.sql” :备份文件存储路径

5. 恢复备份文件

5.1 服务器192.168.15.96同步备份文件

  • 同步主服务器192.168.7.28下OpenProject目录(排除postgresql数据库目录)
/bin/rsync -avz --exclude='/postgresql/'--delete-after root@192.168.7.28:873/public/application/openproject/ /public/application/openproject/
  • 同步主服务器192.168.7.28下OpenProject的数据库备份文件
/bin/rsync -avz --delete-after root@192.168.7.28:873/public/postgresql/pgsqlbackup/pgsql_openproject.sql /public/postgresql/pgsqlbackup/

5.2 服务器192.168.15.96恢复数据库备份

  • 定义环境变量
# 定义备份数据库名字DBNAME="openproject"# 定义postgresql容器名称CONTAINER_NAME="openproject-db-1"# 定义docker-compose.yml文件位置,停止openproject服务需要使用DOCKER_COMPOSE_YML="/public/application/openproject/docker-compose.yml"# 需要预先停止的docker compose 服务SERVICE_NAME="web worker"
  • 停止openproject项目的web worker,删除数据库
# 停止openproject项目的web worker,删除数据库docker compose -f${DOCKER_COMPOSE_YML}kill${SERVICE_NAME}\&&dockerexec${CONTAINER_NAME}psql -U postgres -c"DROP DATABASE IF EXISTS${DBNAME};"
  • 重建openproject数据库
# 重建openproject数据库dockerexec${CONTAINER_NAME}psql -U postgres -c"CREATE USER openproject;"dockerexec${CONTAINER_NAME}psql -U postgres -c"CREATE DATABASE openproject OWNER${DBNAME};"
  • 导入数据库备份,初始化数据库,重启web、work服务
# 导入数据库备份,初始化数据库,重启web、work服务dockerexec-i${CONTAINER_NAME}psql -U postgres -d${DBNAME}<"/public/postgresql/pgsqlbackup/pgsql_openproject.sql"\&&docker compose -f${DOCKER_COMPOSE_YML}start seeder\&&docker compose -f${DOCKER_COMPOSE_YML}start${SERVICE_NAME}

6. 检查服务状态

cd/public/application/openproject/\&&docker composeps
NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS openproject-autoheal-1 willfarrell/autoheal:1.2.0"/docker-entrypoint …"autoheal About an hour ago Up About an hour(healthy)openproject-cache-1 memcached"docker-entrypoint.s…"cache About an hour ago Up About an hour11211/tcp openproject-cron-1 openproject/openproject:16-slim"./docker/prod/entry…"cronAbout an hour ago Up About an hour8080/tcp openproject-db-1 postgres:17"docker-entrypoint.s…"db About an hour ago Up About an hour5432/tcp openproject-proxy-1 openproject/proxy"caddy run --config …"proxy About an hour ago Up About an hour443/tcp,2019/tcp,443/udp,0.0.0.0:8899->80/tcp,[::]:8899->80/tcp openproject-web-1 openproject/openproject:16-slim"./docker/prod/entry…"web About an hour ago Up About an hour(healthy)8080/tcp openproject-worker-1 openproject/openproject:16-slim"./docker/prod/entry…"worker About an hour ago Up About an hour8080/tcp

6. 补充说明

上述命令为简化示例,可以编写成Shell脚本定时执行,实现定时备份,自动恢复的功能

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询