1. 参考
- Backing up your OpenProject installation
- Restoring an OpenProject backup
- Linux安装OpenProject
2. 环境
- Docker compose部署的OpenProject服务
- 服务器192.168.7.28 作为主服务器,预装OpenProject服务,提供生产环境
- 服务器192.168.15.96 作为备份服务器,预装OpenProject服务,作为备份环境
3. 流程
- 服务器192.168.7.28 备份OpenProject服务的Postgresql数据库
- 服务器192.168.15.96使用rsync命令同步OpenProject服务的配置文件(docker-compose.yml)、存储文件(assets)、Postgresql数据库备份文件
- 服务器192.168.15.96恢复Postgresql数据库备份文件
4. 备份Postgresql数据库
dockerexecopenproject-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数据库目录)
/bin/rsync -avz --exclude='/postgresql/'--delete-after root@192.168.7.28:873/public/application/openproject/ /public/application/openproject/- 同步主服务器192.168.7.28下OpenProject的数据库备份文件
/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恢复数据库备份
- 定义环境变量
# 定义备份数据库名字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,删除数据库
# 停止openproject项目的web worker,删除数据库docker compose -f${DOCKER_COMPOSE_YML}kill${SERVICE_NAME}\&&dockerexec${CONTAINER_NAME}psql -U postgres -c"DROP DATABASE IF EXISTS${DBNAME};"- 重建openproject数据库
# 重建openproject数据库dockerexec${CONTAINER_NAME}psql -U postgres -c"CREATE USER openproject;"dockerexec${CONTAINER_NAME}psql -U postgres -c"CREATE DATABASE openproject OWNER${DBNAME};"- 导入数据库备份,初始化数据库,重启web、work服务
# 导入数据库备份,初始化数据库,重启web、work服务dockerexec-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. 检查服务状态
cd/public/application/openproject/\&&docker composepsNAME 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 hour11211/tcp openproject-cron-1 openproject/openproject:16-slim"./docker/prod/entry…"cronAbout an hour ago Up About an hour8080/tcp openproject-db-1 postgres:17"docker-entrypoint.s…"db About an hour ago Up About an hour5432/tcp openproject-proxy-1 openproject/proxy"caddy run --config …"proxy About an hour ago Up About an hour443/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 hour8080/tcp6. 补充说明
上述命令为简化示例,可以编写成Shell脚本定时执行,实现定时备份,自动恢复的功能