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

相关推荐
△曉風殘月〆3 小时前
如何在Linux中安装Qt开发环境
linux·运维·qt
雨的旋律20995 小时前
ubuntu2604
linux·运维·服务器
Eloudy5 小时前
ubuntu 22.04安装 cuda 12.8.2
linux·运维·ubuntu
三言老师5 小时前
mkdir创建多级目录,目录创建基础实操
linux·运维·服务器
独孤--蝴蝶6 小时前
Docker容器进阶(一)
运维·docker·容器
he39123776 小时前
ogg命令
运维·网络
其实防守也摸鱼6 小时前
Kimi K3深度测评:长文本之外的真实力
运维·开发语言·网络·人工智能·python·学习·安全
imc.116 小时前
linux EXT文件系统
linux·运维·服务器
乱世刀疤8 小时前
Claude Code提高工作效率案例:自动化分析工作流程时效性,缩短工单流转时长
运维·自动化
AOwhisky9 小时前
云原生 DevOps 工具链从入门到实战(第二期)——Jenkins安装与基础配置——CICD核心引擎
linux·运维·ci/cd·云原生·jenkins·devops