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

相关推荐
吴声子夜歌2 分钟前
Nginx应用与运维——Nginx Web服务应用实战(HTTPS安全服务器的搭建)
运维·前端·nginx
wdfk_prog13 分钟前
Wi-Fi Direct 源码分析(09):从 P2P_CONNECT 到 GO Negotiation 完成
运维·服务器·ubuntu·golang·asp.net·p2p·wifi-direct
忆挽篱笙歌14 分钟前
linux开发工具
linux·运维·ubuntu
吴声子夜歌16 分钟前
Nginx应用与运维——Nginx Web服务应用实战(伪流媒体服务器的搭建)
运维·前端·nginx
Lsetea38 分钟前
OpenSSL verify报certificate signature failure:error 7与证书签名排查
运维·https·ssl证书·openssl·证书链
吴声子夜歌1 小时前
Nginx应用与运维——Nginx Web服务应用实战(HTTP增强协议服务器的搭建)
运维·前端·nginx
小白的码BUG之路1 小时前
Docker -- 构建ruoyi-auth镜像
运维·docker·容器
我叫洋洋3 小时前
涂鸦 T5+ hashcat 自动化破解 WPA2:从单缺 M2 到全自动值守的踩坑实录 破解wifi 密码
运维·单片机·自动化
꯭自꯭闭꯭10 小时前
达梦SQL优化相关
linux·运维·数据库·sql
ZhangJun9510 小时前
在 32GB 内存电脑上本地搭建 Qwen3.6-35B-A3B 大模型踩坑实录
运维·人工智能·阿里云·ai·软件构建