Автоматизація створення резервних копій баз даних PostgreSQL в Docker контейнерах до бакетів Cloudflare R2 або AWS S3

pic

Якщо у вас є PostgreSQL бази даних у Docker контейнерах або ви розгортаєте додаток Rails із підключенням до PostgreSQL, регулярне створення резервних копій є надзвичайно важливим. Хоча можна робити резервні копії вручну, автоматизація цього процесу дозволить створити ефективну систему, яка забезпечить безпечне зберігання даних без необхідності постійного нагляду.

Цей посібник допоможе вам автоматизувати створення резервних копій для баз даних PostgreSQL, що працюють у Docker контейнерах, та завантажувати їх у Cloudflare R2 або AWS S3. Ми будемо використовувати вже готовий скрипт із цього репозиторію GitHub, який спростить процес. Я поясню, як його налаштувати, що потрібно для правильного функціонування та як автоматизувати резервне копіювання.

Для початку, потрібно виконати кілька підготовчих кроків.

  • AWS CLI: Спершу треба встановити AWS CLI на вашу систему. Для цього просто виконайте кілька команд (для Ubuntu):
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"  
unzip awscliv2.zip  
sudo ./aws/install

Після встановлення AWS CLI налаштуйте його, використовуючи свої облікові дані Cloudflare R2:

aws configure --profile cloudflare # або використовуйте іншу назву профілю
~~`

Введіть ваш **Cloudflare R2 Access Key ID**, **Secret Access Key**, стандартний регіон (auto) та формат виведення (json).

- **Docker**: Переконайтеся, що ваші PostgreSQL контейнери працюють і доступні. У скрипті потрібно буде вказати правильні імена контейнерів бази даних (наприклад, `db_container_1`, `db_container_2`).

Тепер настав час завантажити скрипт для резервного копіювання з [GitHub репозиторію](https://github.com/erimicel/pg_backup). Цей скрипт автоматизує процес створення резервних копій для PostgreSQL, що працюють у Docker контейнерах, стискає їх і завантажує на Cloudflare R2 або AWS S3.

- **Завантажити скрипт**: `pg_backup.sh`

У скрипті ми вказуємо налаштування для кожної бази даних. Наприклад:

declare -A DB1=( ["container"]="dbcontainer1" ["user"]="dbuser1" ["db"]="dbname1" )
~~~

Якщо у вас є кілька баз даних, можна додати більше конфігурацій:

# declare -A DB2=( ["container"]="db_container_2" ["user"]="db_user_2" ["db"]="db_name_2" )  
DATABASES=(DB1) # Додайте інші бази даних за потреби

Тут DB1 — це конфігурація для першої бази даних. Якщо баз більше, можна оголосити додаткові масиви, наприклад DB2, DB3 і додати їх до масиву DATABASES для подальшої обробки.

Також потрібно налаштувати Cloudflare R2 бакет. У скрипті буде кілька полів, які необхідно заповнити, вказавши ваш бакет та ID облікового запису:

R2_BUCKET=""  
R2_ENDPOINT="https://.r2.cloudflarestorage.com"

Після того, як скрипт налаштовано, наступним кроком буде його переміщення на сервер з контейнерами баз даних. Потім потрібно зробити його виконуваним:

chmod +x pg_backup.sh

І нарешті, для запуску скрипта використовуйте команду:

bash ./pg_backup.sh

Скрипт автоматично зробить резервні копії всіх зазначених баз даних, стисне їх та завантажить на вказаний Cloudflare R2 або AWS S3 бакет.

Для налаштування CORS на Cloudflare R2 переконайтеся, що відповідні налаштування для бакету правильні, інакше скрипт може не завантажити резервні копії. Перевірте, чи дозволяють ваші налаштування необхідні HTTP запити.

Щоб резервні копії виконувались регулярно, використовуйте cron jobs. Це дозволить запускати скрипт за певними інтервалами без втручання.

  • Редагування Crontab:
    Для редагування crontab скористайтесь командою:
crontab -e
  • Додайте Cron Job:
    Щоб запускати резервне копіювання щогодини, додайте цей рядок:
0 * * * * /path/to/script/pg_backup.sh >> /var/log/pg_backup.log 2>&1

Цей cron job буде виконувати скрипт щогодини, а всі повідомлення будуть записуватись у файл /var/log/pg_backup.log.

Таким чином, налаштувавши ці кроки, ви зможете автоматично створювати резервні копії ваших баз даних PostgreSQL в Docker контейнерах і безпечно зберігати їх у Cloudflare R2 або AWS S3.

Перекладено з: Automating PostgreSQL Docker Container Backups to Cloudflare R2 or AWS S3 Buckets