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脚本定时执行,实现定时备份,自动恢复的功能

相关推荐
Jinkxs2 分钟前
LoadBalancer- 简单限流策略:Nginx 基于连接 / 请求的限流实现
java·运维·nginx
流浪00110 分钟前
告别静态打印:Linux C 实现实时刷新进度条
linux·运维·c语言
qq_1969761712 分钟前
硬核教程:用Gemini境像站构建端到端自动化办公工作流,告别重复操作(国内免费镜像实测)
运维·自动化
小此方13 分钟前
Re:Linux系统篇(二十)进程篇·五:深入理解 Linux 进程优先级:从底层逻辑到实战修改
linux·运维·服务器
流浪00117 分钟前
Linux篇(八) Make 与 Makefile 超详细入门教程|从零基础到手写自动化编译
linux·运维·自动化
j_xxx404_22 分钟前
Linux线程:从内存分页机制(Page Table/TLB/Page Fault)彻底读懂 Linux 线程本质
linux·运维·服务器·开发语言·c++·人工智能·ai
青梅橘子皮29 分钟前
Linux---冯诺伊曼体系结构,操作系统概况
java·linux·运维
I_am_Damon32 分钟前
安全警告:该网站的安全证书存在问题
运维·服务器·安全
鹏大师运维32 分钟前
不用装远程桌面!统信UOS通过SSH直接调用麒麟图形界面程序
linux·运维·网络·ssh·麒麟·x11·统信v25
helx8244 分钟前
Gemini镜像站驱动的运维事件自动复盘:从日志聚类到根因定位的全链路自动化
运维·自动化·聚类