From 41c4dd7ba6c148533dc10c1c10c1239c774b8d10 Mon Sep 17 00:00:00 2001 From: Jonas Kaninda Date: Sun, 21 Jan 2024 15:32:59 +0100 Subject: [PATCH] refactor: refactoring of code, update docs --- .github/workflows/build.yml | 2 +- README.md | 57 ++++++++++++++--------- docker/Dockerfile | 2 +- examples/docker-compose.s3.yaml | 2 +- examples/docker-compose.scheduled.s3.yaml | 2 +- pkg/restore.go | 2 +- pkg/s3fs.go | 7 ++- 7 files changed, 46 insertions(+), 28 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 76d61ac..314567e 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -35,5 +35,5 @@ jobs: file: "./docker/Dockerfile" platforms: linux/amd64,linux/arm64 tags: | - "${{env.BUILDKIT_IMAGE}}:v0.4" + "${{env.BUILDKIT_IMAGE}}:v0.5" "${{env.BUILDKIT_IMAGE}}:latest" diff --git a/README.md b/README.md index 12e0609..6c8515d 100644 --- a/README.md +++ b/README.md @@ -30,23 +30,39 @@ PostgreSQL Backup and Restoration tool. Backup database to AWS S3 storage or any ### Usage -| Options | Shorts | Usage | -|---------------|--------|------------------------------------| -| pg-bkup | bkup | CLI utility | -| backup | | Backup database operation | -| restore | | Restore database operation | -| history | | Show the history of backup | -| --storage | -s | Set storage. local or s3 (default: local) | -| --file | -f | Set file name for restoration | -| --path | | Set s3 path without file name. eg: /custom_path | -| --dbname | -d | Set database name | -| --port | -p | Set database port (default: 5432) | -| --mode | -m | Set execution mode. default or scheduled (default: default) | -| --disable-compression | | Disable database backup compression | -| --period | | Set crontab period for scheduled mode only. (default: "0 1 * * *") | -| --timeout | -t | Set timeout (default: 60s) | -| --help | -h | Print this help message and exit | -| --version | -V | Print version information and exit | +| Options | Shorts | Usage | +|-----------------------|----------|--------------------------------------------------------------------| +| pg-bkup | bkup | CLI utility | +| backup | | Backup database operation | +| restore | | Restore database operation | +| history | | Show the history of backup | +| --storage | -s | Set storage. local or s3 (default: local) | +| --file | -f | Set file name for restoration | +| --path | | Set s3 path without file name. eg: /custom_path | +| --dbname | -d | Set database name | +| --port | -p | Set database port (default: 5432) | +| --mode | -m | Set execution mode. default or scheduled (default: default) | +| --disable-compression | | Disable database backup compression | +| --period | | Set crontab period for scheduled mode only. (default: "0 1 * * *") | +| --timeout | -t | Set timeout (default: 60s) | +| --help | -h | Print this help message and exit | +| --version | -V | Print version information and exit | + + +## Environment variables + +| Name | Requirement | Description | +|-------------|--------------------------------------------------|----------------------| +| DB_PORT | Optional, default 5432 | Database port number | +| DB_HOST | Required | Database host | +| DB_NAME | Optional if it was provided from the -d flag | Database name | +| DB_USERNAME | Required | Database user name | +| DB_PASSWORD | Required | Database password | +| ACCESS_KEY | Optional, required for S3 storage | AWS S3 Access Key | +| SECRET_KEY | Optional, required for S3 storage | AWS S3 Secret Key | +| BUCKET_NAME | Optional, required for S3 storage | AWS S3 Bucket Name | +| S3_ENDPOINT | Optional, required for S3 storage | AWS S3 Endpoint | +| FILE_NAME | Optional if it was provided from the --file flag | File to restore | ## Note: @@ -174,7 +190,6 @@ pg-bkup backup --storage s3 --dbname mydatabase pg-bkup: image: jkaninda/pg-bkup container_name: pg-bkup - tty: true privileged: true devices: - "/dev/fuse" @@ -189,7 +204,7 @@ pg-bkup backup --storage s3 --dbname mydatabase - DB_PASSWORD=password - ACCESS_KEY=${ACCESS_KEY} - SECRET_KEY=${SECRET_KEY} - - BUCKETNAME=${BUCKETNAME} + - BUCKET_NAME=${BUCKET_NAME} - S3_ENDPOINT=${S3_ENDPOINT} ``` @@ -272,7 +287,7 @@ services: - DB_PASSWORD=${DB_PASSWORD} - ACCESS_KEY=${ACCESS_KEY} - SECRET_KEY=${SECRET_KEY} - - BUCKETNAME=${BUCKETNAME} + - BUCKET_NAME=${BUCKET_NAME} - S3_ENDPOINT=${S3_ENDPOINT} ``` @@ -318,7 +333,7 @@ spec: value: "" - name: SECRET_KEY value: "" - - name: BUCKETNAME + - name: BUCKET_NAME value: "" - name: S3_ENDPOINT value: "https://s3.us-west-2.amazonaws.com" diff --git a/docker/Dockerfile b/docker/Dockerfile index 82123b6..c4deada 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -21,7 +21,7 @@ ENV ACCESS_KEY="" ENV SECRET_KEY="" ENV S3_ENDPOINT=https://s3.amazonaws.com ARG DEBIAN_FRONTEND=noninteractive -ENV VERSION="v0.4" +ENV VERSION="v0.5" LABEL authors="Jonas Kaninda" RUN apt-get update -qq diff --git a/examples/docker-compose.s3.yaml b/examples/docker-compose.s3.yaml index 4064100..4fc2566 100644 --- a/examples/docker-compose.s3.yaml +++ b/examples/docker-compose.s3.yaml @@ -17,5 +17,5 @@ services: - DB_PASSWORD=${DB_PASSWORD} - ACCESS_KEY=${ACCESS_KEY} - SECRET_KEY=${SECRET_KEY} - - BUCKETNAME=${BUCKETNAME} + - BUCKET_NAME=${BUCKET_NAME} - S3_ENDPOINT=https://s3.us-west-2.amazonaws.com \ No newline at end of file diff --git a/examples/docker-compose.scheduled.s3.yaml b/examples/docker-compose.scheduled.s3.yaml index da6a1cc..1389018 100644 --- a/examples/docker-compose.scheduled.s3.yaml +++ b/examples/docker-compose.scheduled.s3.yaml @@ -17,5 +17,5 @@ services: - DB_PASSWORD=${DB_PASSWORD} - ACCESS_KEY=${ACCESS_KEY} - SECRET_KEY=${SECRET_KEY} - - BUCKETNAME=${BUCKETNAME} + - BUCKET_NAME=${BUCKET_NAME} - S3_ENDPOINT=https://s3.us-west-2.amazonaws.com \ No newline at end of file diff --git a/pkg/restore.go b/pkg/restore.go index 81d1ad1..05541f2 100644 --- a/pkg/restore.go +++ b/pkg/restore.go @@ -41,7 +41,7 @@ func RestoreDatabase(file string) { dbPort = os.Getenv("DB_PORT") storagePath = os.Getenv("STORAGE_PATH") if file == "" { - utils.Fatal("Error required --file") + utils.Fatal("Error, file required") } if os.Getenv("DB_HOST") == "" || os.Getenv("DB_NAME") == "" || os.Getenv("DB_USERNAME") == "" || os.Getenv("DB_PASSWORD") == "" || file == "" { diff --git a/pkg/s3fs.go b/pkg/s3fs.go index 1ae8030..57863cc 100644 --- a/pkg/s3fs.go +++ b/pkg/s3fs.go @@ -26,11 +26,14 @@ func S3Mount() { func MountS3Storage(s3Path string) { accessKey = os.Getenv("ACCESS_KEY") secretKey = os.Getenv("SECRET_KEY") - bucketName = os.Getenv("BUCKETNAME") + bucketName = os.Getenv("BUCKET_NAME") + if bucketName == "" { + bucketName = os.Getenv("BUCKETNAME") + } s3Endpoint = os.Getenv("S3_ENDPOINT") if accessKey == "" || secretKey == "" || bucketName == "" { - utils.Fatal("Please make sure all environment variables are set") + utils.Fatal("Please make sure all environment variables are set for S3") } else { storagePath := fmt.Sprintf("%s%s", s3MountPath, s3Path) err := os.Setenv("STORAGE_PATH", storagePath)