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

相关推荐
可爱又迷人的反派角色“yang”8 小时前
k8s(二)
linux·运维·docker·云原生·容器·kubernetes·云计算
龙亘川8 小时前
智算运维技术全景解析:挑战、架构与落地实践(2025 最新报告解读)
运维·架构·智算
旧日之血_Hayter8 小时前
docker部署项目,/var/lib/docker/overlay2目录满了如何清理?
运维·docker·容器
超级大福宝8 小时前
在 Linux 发行版中安装 Times New Roman 字体
linux·运维·服务器
文言一心9 小时前
基于 Docker + Docker Compose 实现一键部署(单节点部署场景下轻量、易维护、可一键启停)
运维·docker·容器
守护砂之国泰裤辣9 小时前
Windows+docker下简单kafka测试联调
java·运维·spring boot·docker·容器
ZeroNews内网穿透9 小时前
本地部署 Payara Server 公网访问
运维·服务器·网络协议·安全
HIT_Weston9 小时前
90、【Ubuntu】【Hugo】搭建私人博客:侧边导航栏(四)
linux·运维·ubuntu
回忆是昨天里的海9 小时前
dockerfile-镜像分层机制
linux·运维·服务器
2501_941982059 小时前
基于自动化协议的企微外部群消息调度与状态回执实现逻辑
运维·自动化·企业微信