Code Monkey home page Code Monkey logo

pgbackuper's Introduction

Pgbackuper - инструмент для автоматизированного снятия pg_dump по расписанию

Предполагается использования внутри контейнера docker. По заданному расписанию инструмент снимает pg_dump с базы данных (одной или нескольких), сохраняет файл pg_dump в /var/pgpackup, при указании настроек подключения к WebDAV отправляет дополнительно файлы на сервер. При необходимости очистка старых файлов регулируется политикой удержания (по умолчанию: старые файлы не удаляются, при выставлении переменной RETENTION: будет сохранено установленное число последних файлов для каждой базы данных).

Переменные окружения:

Основные

  • LOG_LEVEL (int) = 20 (10 - DEBUG, 20 - INFO, 30 - WARN, 40 - ERROR, 50 - CRITICAL)

  • INTERVAL_CRON (str cron) = "45 23 * * *"

  • PGDATABASE (str) имя базы данных (можно указать несколько, через запятую)

  • PGHOST (str) сервер Postgres, без указания номера порта (может быть IP-адрес или DNS-имя)

  • PGPORT (int) = 5432 порт Postgres

  • PGUSER (str) имя пользователя, с которым будет выполняться подключение к Postgres

  • PGPASSWORD (str) пароль, с которым будет выполняться подключение к Postgres

  • PGPASSFILE (str) = ~/.pgpass более безопасный способ передачи пароля, файл в формате сервер:порт:база_данных:имя_пользователя:пароль, вместо первых параметров может содержать *, права должны быть u=rw (0600), подробнее: postgresql.org/docs/current/libpq-pgpass.html

  • PGFORMAT = plain формат файла pg_dump (может быть: plain, custom, tar), подробнее: postgresql.org/docs/current/app-pgdump.html

Дополнительные

  • RETENTION (int) = 0 политика удержания: сколько последних файлов pg_dump требуется хранить, 0 - отключает удаление, значение больше нуля включает удаление старых файлов pg_dump, сохраняется кол-во файлов, соответствующих значению переменной

  • WEBDAV_URL (str) URL (полностью) WebDAV сервера, на который следует загружать файлы pg_dump, например https://webdav.yandex.ru или https://nextcloud.example.com

  • WEBDAV_USER (str) имя пользователя WebDAV

  • WEBDAV_PATH (str) путь к папке на сервере WebDAV (для Nextcloud: /remote.php/dav/files/WEBDAV_USER/имя_папки, где WEBDAV_USER и имя_папки заменить на значения)

  • WEBDAV_PASSWORD | WEBDAV_PASSWORD_FILE (str) пароль WebDAV, можно задать ввиде пути к файлу, содержащему пароль

  • TZ (str) = UTC имя Timezone, например Europe/Moscow (повлияет на указание времени создания в именах файлов pg_dump)

Примеры

Быстрый старт

services:
  pgbackup:
    image: skl256/pgbackuper:latest
    environment:
      INTERVAL_CRON: "45 23 * * *" # daily, at 23:45
      PGDATABASE: "postgres"
      PGHOST: "192.168.1.103"
      PGUSER: "postgres"
      PGPASSWORD: "postgres"

Расширенный (с использованием WebDAV, docker secrets in swarm mode)

services:
  pgbackup:
    image: skl256/pgbackuper:latest
    environment:
      INTERVAL_CRON: "45 23 * * *" # daily, at 23:45
      PGDATABASE: "postgres, nextcloud" # pg_dump databases "postgres", "nextcloud"
      PGHOST: "192.168.1.103"
      PGUSER: "postgres"
      PGPASSFILE: "/var/run/secrets/pgpassfile"
      RETENTION: 3
      WEBDAV_URL: "https://webdav.example.com"
      WEBDAV_USER: "skl256"
      WEBDAV_PATH: ""
      WEBDAV_PASSWORD_FILE: "/var/run/secrets/webdav_password" # mode must be 0600, in compose use volume mount instead secret for this file
    volumes:
      - pg_dumps:/var/pgbackup
    secrets:
      - source: pgpassfile
        target: pgpassfile
        uid: "0"
        gid: "0"
        mode: 0600
      - webdav_password
secrets:
  pgpassfile:
    external: true # works only in docker swarm, not in compose
  webdav_password:
    file: webdav_password.txt
volumes:
  pg_dumps:

(в данном примере созданы секреты docker и файл с паролем от WebDAV: echo '*:*:*:*:postgres' | docker secret create pgpassfile -; echo 'example_password' > webdav_password.txt)

pgbackuper's People

Contributors

skl256 avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.