From 4971be37e51251acef2e1d894f1bc5fc1f770e1e Mon Sep 17 00:00:00 2001 From: Kenneth Bingham Date: Sun, 30 Jun 2024 15:55:58 -0400 Subject: [PATCH] add rclone binary; add example; bump restic version; use official python alpine image Signed-off-by: Kenneth Bingham --- docker-compose.yaml | 1 - extras/example-rclone-backend/backup.env | 70 ++++++++++++++++++++++ extras/example-rclone-backend/compose.yaml | 24 ++++++++ extras/example-rclone-backend/postgres.env | 3 + src/Dockerfile | 22 ++++--- src/setup.py | 2 +- 6 files changed, 113 insertions(+), 9 deletions(-) create mode 100644 extras/example-rclone-backend/backup.env create mode 100644 extras/example-rclone-backend/compose.yaml create mode 100644 extras/example-rclone-backend/postgres.env diff --git a/docker-compose.yaml b/docker-compose.yaml index 63bdf45..7451e49 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -1,4 +1,3 @@ -version: '3.7' services: backup: build: ./src diff --git a/extras/example-rclone-backend/backup.env b/extras/example-rclone-backend/backup.env new file mode 100644 index 0000000..656bd04 --- /dev/null +++ b/extras/example-rclone-backend/backup.env @@ -0,0 +1,70 @@ + +DOCKER_HOST=unix:///var/run/docker.sock +# DOCKER_TLS_VERIFY=1 +# DOCKER_CERT_PATH='' + +INCLUDE_PROJECT_NAME=false +EXCLUDE_BIND_MOUNTS=false + +# storj bucket must exist +RESTIC_REPOSITORY=rclone:uplink:mybucket +RESTIC_PASSWORD="password" + +# this env var creates on-the-fly a remote named "uplink" +RCLONE_CONFIG_UPLINK_TYPE=storj +# access grant must have permission to use bucket +RCLONE_CONFIG_UPLINK_ACCESS_GRANT= + +RESTIC_KEEP_DAILY=7 +RESTIC_KEEP_WEEKLY=4 +RESTIC_KEEP_MONTHLY=12 +RESTIC_KEEP_YEARLY=3 + +LOG_LEVEL=info +CRON_SCHEDULE="10 2 * * *" + +# EMAIL_HOST= +# EMAIL_PORT= +# EMAIL_HOST_USER= +# EMAIL_HOST_PASSWORD= +# EMAIL_SEND_TO= + +# DISCORD_WEBHOOK=u + +# Various env vars for restic : https://restic.readthedocs.io/en/stable/040_backup.html#environment-variables +# RESTIC_REPOSITORY Location of repository (replaces -r) +# RESTIC_PASSWORD_FILE Location of password file (replaces --password-file) +# RESTIC_PASSWORD The actual password for the repository +# +# AWS_ACCESS_KEY_ID Amazon S3 access key ID +# AWS_SECRET_ACCESS_KEY Amazon S3 secret access key +# +# ST_AUTH Auth URL for keystone v1 authentication +# ST_USER Username for keystone v1 authentication +# ST_KEY Password for keystone v1 authentication +# +# OS_AUTH_URL Auth URL for keystone authentication +# OS_REGION_NAME Region name for keystone authentication +# OS_USERNAME Username for keystone authentication +# OS_PASSWORD Password for keystone authentication +# OS_TENANT_ID Tenant ID for keystone v2 authentication +# OS_TENANT_NAME Tenant name for keystone v2 authentication +# +# OS_USER_DOMAIN_NAME User domain name for keystone authentication +# OS_PROJECT_NAME Project name for keystone authentication +# OS_PROJECT_DOMAIN_NAME PRoject domain name for keystone authentication +# +# OS_STORAGE_URL Storage URL for token authentication +# OS_AUTH_TOKEN Auth token for token authentication +# +# B2_ACCOUNT_ID Account ID or applicationKeyId for Backblaze B2 +# B2_ACCOUNT_KEY Account Key or applicationKey for Backblaze B2 +# +# AZURE_ACCOUNT_NAME Account name for Azure +# AZURE_ACCOUNT_KEY Account key for Azure +# +# GOOGLE_PROJECT_ID Project ID for Google Cloud Storage +# GOOGLE_APPLICATION_CREDENTIALS Application Credentials for Google Cloud Storage (e.g. $HOME/.config/gs-secret-restic-key.json) +# +# RCLONE_BWLIMIT rclone bandwidth limit +# RCLONE_VERBOSE=1 # 2 for -vv diff --git a/extras/example-rclone-backend/compose.yaml b/extras/example-rclone-backend/compose.yaml new file mode 100644 index 0000000..163f189 --- /dev/null +++ b/extras/example-rclone-backend/compose.yaml @@ -0,0 +1,24 @@ +services: + backup: + build: ../../src + env_file: + - backup.env + labels: + restic-compose-backup.volumes: false + volumes: + # Map in docker socket + - /var/run/docker.sock:/var/run/docker.sock + # Map restic cache + - restic_cache:/cache + postgres: + image: postgres:12 + env_file: + - postgres.env + labels: + restic-compose-backup.postgres: true + volumes: + - pgdata:/var/lib/postgresql/data + +volumes: + pgdata: + restic_cache: \ No newline at end of file diff --git a/extras/example-rclone-backend/postgres.env b/extras/example-rclone-backend/postgres.env new file mode 100644 index 0000000..5bcbbf4 --- /dev/null +++ b/extras/example-rclone-backend/postgres.env @@ -0,0 +1,3 @@ +POSTGRES_USER=pguser +POSTGRES_PASSWORD=pgpassword +POSTGRES_DB=test diff --git a/src/Dockerfile b/src/Dockerfile index aca243f..ca41987 100644 --- a/src/Dockerfile +++ b/src/Dockerfile @@ -1,14 +1,22 @@ -FROM restic/restic:0.9.6 +FROM rclone/rclone:1 AS rclone -RUN apk update && apk add python3 \ - dcron \ - mariadb-client \ - postgresql-client \ - mariadb-connector-c-dev +FROM restic/restic:0.16.4 AS restic + +FROM python:3.12-alpine + +COPY --from=rclone /usr/local/bin/rclone /usr/local/bin/rclone +COPY --from=restic /usr/bin/restic /usr/local/bin/restic + +RUN apk update \ + && apk add \ + dcron \ + mariadb-client \ + postgresql-client \ + mariadb-connector-c-dev ADD . /restic-compose-backup WORKDIR /restic-compose-backup -RUN pip3 install -U pip setuptools wheel && pip3 install -e . +RUN pip install -U pip setuptools wheel && pip install . ENV XDG_CACHE_HOME=/cache ENTRYPOINT [] diff --git a/src/setup.py b/src/setup.py index 13b7e54..7d583bb 100644 --- a/src/setup.py +++ b/src/setup.py @@ -11,7 +11,7 @@ setup( 'restic_compose_backup.*', ]), install_requires=[ - 'docker~=6.1.3', + 'docker~=7.1.0', ], entry_points={'console_scripts': [ 'restic-compose-backup = restic_compose_backup.cli:main',