diff options
-rw-r--r-- | docker/auto-backup/Dockerfile | 12 | ||||
-rwxr-xr-x | docker/auto-backup/daemon.bash | 30 | ||||
-rwxr-xr-x | docker/auto-backup/install-coscli.bash | 17 | ||||
-rw-r--r-- | template/coscli-config.yaml.template | 9 | ||||
-rw-r--r-- | template/docker-compose.yaml.template | 4 | ||||
-rw-r--r-- | template/rclone.conf.template | 7 |
6 files changed, 54 insertions, 25 deletions
diff --git a/docker/auto-backup/Dockerfile b/docker/auto-backup/Dockerfile index a826f4a..7df267c 100644 --- a/docker/auto-backup/Dockerfile +++ b/docker/auto-backup/Dockerfile @@ -1,11 +1,15 @@ +FROM alpine:latest AS coscli-downloader +RUN apk add --no-cache bash curl jq +COPY install-coscli.bash /install-coscli.bash +RUN /install-coscli.bash + FROM alpine:latest -RUN apk add --no-cache coreutils bash tar xz rclone -ARG CRUPEST_AUTO_BACKUP_BUCKET_NAME +RUN apk add --no-cache coreutils bash tar xz yq ARG CRUPEST_AUTO_BACKUP_INIT_DELAY=0 ARG CRUPEST_AUTO_BACKUP_INTERVAL=1d ENV CRUPEST_AUTO_BACKUP_INIT_DELAY=${CRUPEST_AUTO_BACKUP_INIT_DELAY} ENV CRUPEST_AUTO_BACKUP_INTERVAL=${CRUPEST_AUTO_BACKUP_INTERVAL} -ENV CRUPEST_AUTO_BACKUP_BUCKET_NAME=${CRUPEST_AUTO_BACKUP_BUCKET_NAME} +COPY --from=coscli-downloader /coscli /coscli COPY daemon.bash /daemon.bash -VOLUME [ "/data", "/config/rclone/rclone.conf" ] +VOLUME [ "/data", "/root/.cos.yaml" ] ENTRYPOINT [ "/daemon.bash" ] diff --git a/docker/auto-backup/daemon.bash b/docker/auto-backup/daemon.bash index 33708ee..6a39fa5 100755 --- a/docker/auto-backup/daemon.bash +++ b/docker/auto-backup/daemon.bash @@ -8,18 +8,23 @@ if [[ $EUID -ne 0 ]]; then exit 1 fi -# Check if CRUPEST_AUTO_BACKUP_BUCKET_NAME is defined. -if [[ -z "$CRUPEST_AUTO_BACKUP_BUCKET_NAME" ]]; then - echo "CRUPEST_AUTO_BACKUP_BUCKET_NAME is not defined or empty" - exit 1 -fi - -rclone --version +/coscli --version # Check xz and tar xz --version tar --version +bucket_yaml=$(/coscli config show | yq ".buckets[] | select(.alias == \"crupest-backup\")") + +# check bucket_yaml is not empty +if [[ -z "$bucket_yaml" ]]; then + echo "Bucket crupest-backup not found. Please check your coscli config." 1>&2 + exit 1 +fi + +bucket_name=$(echo "$bucket_yaml" | yq ".name") +bucket_region=$(echo "$bucket_yaml" | yq ".region") + function backup { # Output "Begin backup..." in yellow and restore default echo -e "\e[0;103m\e[K\e[1mBegin backup..." "\e[0m" @@ -33,12 +38,15 @@ function backup { tar -cJf /tmp/data.tar.xz -C / data # Output /tmp/data.tar.xz size - du -h /tmp/data.tar.xz + du -h /tmp/data.tar.xz | cut -f1 | xargs echo "Size of data.tar.xz:" + + destination="cos://crupest-backup/$current_time.tar.xz" + echo "Use coscli to upload data to $destination ..." + echo "Bucket name: $bucket_name" + echo "Bucket region: $bucket_region" - destination="mycos:$CRUPEST_AUTO_BACKUP_BUCKET_NAME/$current_time.tar.xz" - echo "Use rclone to upload data to $destination ..." # upload to remote - rclone -vv copyto /tmp/data.tar.xz "$destination" + /coscli cp /tmp/data.tar.xz "$destination" echo "Remove tmp file..." # remove tmp diff --git a/docker/auto-backup/install-coscli.bash b/docker/auto-backup/install-coscli.bash new file mode 100755 index 0000000..d3a45b0 --- /dev/null +++ b/docker/auto-backup/install-coscli.bash @@ -0,0 +1,17 @@ +#!/usr/bin/env bash + +set -e + +# Check I'm root. +if [[ $EUID -ne 0 ]]; then + echo "This script must be run as root" 1>&2 + exit 1 +fi + +download_url=$(curl -s https://api.github.com/repos/tencentyun/coscli/releases/latest | jq -r ".assets[] | select(.name | test(\"coscli-linux\")) | .browser_download_url") + +curl -L -o /coscli "$download_url" + +chmod +x /coscli + +/coscli --version diff --git a/template/coscli-config.yaml.template b/template/coscli-config.yaml.template new file mode 100644 index 0000000..d0768a3 --- /dev/null +++ b/template/coscli-config.yaml.template @@ -0,0 +1,9 @@ +cos: + base: + secretid: ${CRUPEST_AUTO_BACKUP_COS_ACCESS_KEY_ID} + secretkey: ${CRUPEST_AUTO_BACKUP_COS_SECRET_ACCESS_KEY} + sessiontoken: "" + buckets: + - name: ${CRUPEST_AUTO_BACKUP_BUCKET_NAME} + alias: crupest-backup + region: ${CRUPEST_AUTO_BACKUP_COS_REGION} diff --git a/template/docker-compose.yaml.template b/template/docker-compose.yaml.template index fe87da6..af87acc 100644 --- a/template/docker-compose.yaml.template +++ b/template/docker-compose.yaml.template @@ -106,14 +106,12 @@ services: context: ./docker/auto-backup dockerfile: Dockerfile pull: true - args: - - CRUPEST_AUTO_BACKUP_BUCKET_NAME=${CRUPEST_AUTO_BACKUP_BUCKET_NAME} tags: - "crupest/auto-backup:latest" container_name: auto-backup volumes: - "./data:/data" - - "./rclone.conf:/root/.config/rclone/rclone.conf:ro" + - "./coscli-config.yaml:/root/.cos.yaml:ro" restart: on-failure:3 networks: - internal diff --git a/template/rclone.conf.template b/template/rclone.conf.template deleted file mode 100644 index 38ef2dd..0000000 --- a/template/rclone.conf.template +++ /dev/null @@ -1,7 +0,0 @@ -[mycos] -type = s3 -provider = TencentCOS -access_key_id = ${CRUPEST_AUTO_BACKUP_COS_ACCESS_KEY_ID} -secret_access_key = ${CRUPEST_AUTO_BACKUP_COS_SECRET_ACCESS_KEY} -endpoint = cos.${CRUPEST_AUTO_BACKUP_COS_REGION}.myqcloud.com -acl = default |