OpenProject服务的备份与恢复

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数据库

bash 复制代码
docker exec openproject-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数据库目录)
bash 复制代码
/bin/rsync -avz --exclude='/postgresql/' --delete-after root@192.168.7.28:873/public/application/openproject/ /public/application/openproject/
  • 同步主服务器192.168.7.28下OpenProject的数据库备份文件
bash 复制代码
/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恢复数据库备份

  • 定义环境变量
bash 复制代码
# 定义备份数据库名字
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,删除数据库
bash 复制代码
# 停止openproject项目的web worker,删除数据库
 docker compose -f ${DOCKER_COMPOSE_YML} kill ${SERVICE_NAME} \
 && docker exec ${CONTAINER_NAME} psql -U postgres -c "DROP DATABASE IF EXISTS ${DBNAME};"
  • 重建openproject数据库
bash 复制代码
# 重建openproject数据库
docker exec ${CONTAINER_NAME} psql -U postgres -c "CREATE USER openproject;" 
docker exec ${CONTAINER_NAME} psql -U postgres -c "CREATE DATABASE openproject OWNER ${DBNAME};" 
  • 导入数据库备份,初始化数据库,重启web、work服务
bash 复制代码
# 导入数据库备份,初始化数据库,重启web、work服务
docker exec -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. 检查服务状态

bash 复制代码
cd /public/application/openproject/ \
&& docker compose ps
bash 复制代码
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 hour             11211/tcp
openproject-cron-1       openproject/openproject:16-slim   "./docker/prod/entry..."   cron       About an hour ago   Up About an hour             8080/tcp
openproject-db-1         postgres:17                       "docker-entrypoint.s..."   db         About an hour ago   Up About an hour             5432/tcp
openproject-proxy-1      openproject/proxy                 "caddy run --config ..."   proxy      About an hour ago   Up About an hour             443/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 hour             8080/tcp

6. 补充说明

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

相关推荐
分布式存储与RustFS7 小时前
群晖 NAS 被 C3RB3R 锁了:本地备份一起被加密,RustFS 对象锁为什么删不掉
运维·云原生·开源·对象存储·分布式存储·s3·性能基准
真好啊又活了一天7 小时前
服务器和虚机配置IPV6
运维·服务器·github
zixu_star7 小时前
定时任务是什么?从日常自动化到 AI 应用,软件如何自动执行任务?
运维·人工智能·自动化
AR-26710-8 小时前
Linux Day33——定时任务+lvm
linux·运维
润滑卫士8 小时前
液压系统工作粘度窗口等级选型:泵允许粘度范围与油温-粘度匹配计算
运维
每月一号准时摆烂11 小时前
服务器运维笔记(一)——使用shell编写实时查看BMC功率的脚本
运维·服务器·笔记
时间售卖铺12 小时前
Chrony与SSH实战:精准时间同步与安全远程登录
运维·安全·云原生·ssh
微订校园外卖系统12 小时前
校园代取快递系统选型:现成系统与定制开发的技术核对项
大数据·运维·人工智能·外卖系统·本地生活·微订
QXWZ_IA12 小时前
管道GIS测绘如何实现自动化成图:三种成图方式怎么选
运维·人工智能·安全·自动化
一条破秋裤12 小时前
【1112】Linux中断【整理】
linux·运维·服务器