用PG Back Web轻松进行PostgreSQL备份

杨浦老苏 2024-10-26 16:03:02 阅读 69

在这里插入图片描述

什么是 PG Back Web ?

<code>PG Back Web 🐘 使用用户友好的 Web 界面轻松进行 PostgreSQL 备份!🌐💾。PG Back Web 不仅仅是另一个备份工具。借助 PG Back Web,用户可以通过受 PGP 加密保护的直观 Web 界面轻松安排和创建备份。功能包括计划备份、状态监控、从 Web 即时下载、S3 存储、加密和暗模式。根据该项目的 repo,一键恢复和 API 等功能即将推出。

软件特征

📦直观的网络界面:轻松管理您的备份,无需数据库专业知识。📅计划备份:设置后即可忘记。PG Back Web 会处理其余的事情。📈备份监控:通过执行日志可视化备份状态。📤即时下载:在需要时,直接从 Web 界面访问您的备份。🖥多版本支持:兼容 PostgreSQL 13141516。📁 S3 存储:根据需要添加任意数量的 S3 存储桶,以获得更大的灵活性。🔒安全第一PGP 加密保护您的敏感信息。🛡️开源信任MIT 许可下的开源代码,由强大的 pg_dump 工具支持。🌚暗黑模式:因为我们都喜欢暗黑模式。🎯为每个人设计:从个人开发者到团队。⏱️节省时间:自动备份,不再需要手动任务。

安装

在群晖上以 Docker 方式安装。

在注册表中搜索 <code>pgbackweb ,选择第一个 eduardolat/pgbackweb,版本选择 latest

最近不知道是调整了算法还是什么原因,总之搜出来都是乱七八糟的

本文写作时, <code>latest 版本对应为 0.1.2

docker cli 安装

如果你熟悉命令行,可能用 <code>docker cli 更快捷

步骤1

启动一个 PostgreSQL 容器,这个容器是给 PG Back Web 使用的,用于记录用户信息、数据库连接信息、存储信息、备份计划等

# 新建文件夹 pgbackweb 和 子目录

mkdir -p /volume1/docker/pgbackweb/{ data,minio}

# 进入 pgbackweb 目录

cd /volume1/docker/pgbackweb

# 运行容器 PostgreSQL

docker run -d \

--restart unless-stopped \

--name pbw-postgres \

-p 5433:5432 \

-v $(pwd)/data:/var/lib/postgresql/data \

-e POSTGRES_DB=pgbackweb \

-e POSTGRES_USER=postgres \

-e POSTGRES_PASSWORD=password \

postgres:15

环境变量:

POSTGRES_DB:数据库库名;POSTGRES_USER:数据库用户;POSTGRES_PASSWORD:数据库用户对应的密码;

步骤2

启动一个 MinIO 容器,并创建一个存储桶,用于存储数据库的备份

文章传送门:拥有自己的MinIO对象存储服务器

# 运行容器 MinIO

docker run -d \

--restart unless-stopped \

--name pbw-minio \

--entrypoint sh \

-p 9900:9000 \

-p 9901:9090 \

-v $(pwd)/minio:/data \

-e MINIO_ROOT_USER=root \

-e MINIO_ROOT_PASSWORD=password \

minio/minio \

-c 'minio server /data --console-address ":9090"'

下面👇的命令将在 pbw-minio 容器内部执行 mc 命令,其中:

/usr/bin/mc alias set myminio http://localhost:9000 root password 用于设置 MinIO 的别名和凭据。/usr/bin/mc mb myminio/db-backup 用于创建名为 db-backup 的存储桶。

# 创建名为 db-backup 的存储桶

docker exec -it pbw-minio sh -c "/usr/bin/mc alias set myminio http://localhost:9000 root password && /usr/bin/mc mb myminio/db-backup"

步骤3

启动 <code>pgbackweb 容器

# 运行容器

docker run -d \

--restart unless-stopped \

--name pbw-pgbackweb \

-p 8085:8085 \

-e PBW_ENCRYPTION_KEY=my_secret_key \

-e PBW_POSTGRES_CONN_STRING="postgresql://postgres:password@192.168.0.197:5433/pgbackweb?sslmode=disable" \code>

eduardolat/pgbackweb:latest

环境变量:

PBW_ENCRYPTION_KEY:您的加密密钥。生成一个强密钥并将其存储在安全的地方,因为 PG Back Web 会使用它来加密敏感数据,例如:数据库凭证、秘钥等。PBW_POSTGRES_CONN_STRING:将存储 PG Back Web 数据的 PostgreSQL 数据库的连接字符串。

docker-compose 安装

采用 docker-compose 安装,将下面的内容保存为 docker-compose.yml 文件

version: '3'

services:

pgbackweb:

image: eduardolat/pgbackweb:latest

container_name: pbw-pgbackweb

ports:

- "8085:8085" # Access the web interface at http://localhost:8085

environment:

PBW_ENCRYPTION_KEY: "my_secret_key"

PBW_POSTGRES_CONN_STRING: "postgresql://postgres:password@postgres:5432/pgbackweb?sslmode=disable"

depends_on:

postgres:

condition: service_healthy

postgres:

image: postgres:15

container_name: pbw-postgres

# ports:

# - "5433:5432"

environment:

POSTGRES_DB: pgbackweb

POSTGRES_USER: postgres

POSTGRES_PASSWORD: password

volumes:

- ./data:/var/lib/postgresql/data

healthcheck:

test: ["CMD-SHELL", "pg_isready -U postgres"]

interval: 5s

timeout: 5s

retries: 5

minio:

image: minio/minio

container_name: pbw-minio

ports:

- "9900:9000"

- "9901:9090"

environment:

MINIO_ROOT_USER: "root"

MINIO_ROOT_PASSWORD: "password"

volumes:

- ./minio:/data

command: minio server /data --console-address ":9090"

然后执行下面的命令

# 新建文件夹 pgbackweb 和 子目录

mkdir -p /volume1/docker/pgbackweb/{ data,minio}

# 进入 pgbackweb 目录

cd /volume1/docker/pgbackweb

# 将 docker-compose.yml 放入当前目录

# 一键启动

docker-compose up -d

# 创建名为 db-backup 的存储桶

docker exec -it pbw-minio sh -c "/usr/bin/mc alias set myminio http://localhost:9000 root password && /usr/bin/mc mb myminio/db-backup"

如果你细心的话,会发现 <code>PBW_POSTGRES_CONN_STRING 的值在 docker clidocker-compose 安装时,存在差异,这是

docker cli 采用了独立安装的容器,各容器并不在一个网络中,所以 PostgreSQL 的地址用了主机 IP + 本机端口的方式

docker-compose 各容器默认在同一个 pgbackweb_default 网络中,所以可以用 service name + 容器端口的方式

运行

在浏览器中输入 http://群晖IP:8085 ,第一次会看到注册界面

创建成功后,还需要登录

主界面

创建一个数据库

以 <code>Comentario 的数据库为例

Name:根据需要填写,主要用于区分不同的数据库;Version:是指要连接的数据库的版本,Comentario 用的是 postgres:16-alpine;Connection string:根据 Comentario 的设置,连接字符串是 postgresql://postgres:postgres@192.168.0.197:5434/comentario

设置完成后点 <code>Test connection 进行测试,如果看到连接成功,就可以点 Save 保存了

接下来需要设置 <code>Destinations

Name:易于识别就行;Bucket name:要写入我们前面创建的存储桶的名字;EndpointMinio 的服务器地址;Region:因为不能为空,可以填 us-east-1Access key:如果没有单独创建的话,就用 MINIO_ROOT_USER 的值也行;Secret key:如果没有单独创建的话,就用 MINIO_ROOT_PASSWORD 的值也行;

如果测试没问题,点 <code>Save 保存

接下来就可以备份了

<code>Name:易于识别即可;Database:从下拉框中选取;Destination:从下拉框中选取;Cron expression:示例的 cron 表达式意味着任务将在每天的 23:00(即晚上 11 点)执行;Time zone:下拉找到 Asia/ShanghaiDestination directory:期望保存的路径;Retention days:备份的天数,如果设置为 0,将无限期保留它们;Activate backup:是否激活备份;Options:一些可选项,不知道怎么设,保持默认就行;

点 <code>Save 保存之后

点闪电图标,直接备份

查看执行的状态

参考文档

eduardolat/pgbackweb: 🐘 Effortless PostgreSQL backups with a user-friendly web interface! 🌐💾

地址:https://github.com/eduardolat/pgbackweb



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。