aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcrupest <crupest@outlook.com>2022-11-23 19:22:37 +0800
committercrupest <crupest@outlook.com>2022-11-23 19:22:37 +0800
commitf083272356417be74a5864d5ef6cfb1878558826 (patch)
tree6a489c787c073e4b4bc2b722759c098899bfea15
parentfc2b0e84cc359e45c09e81135702babc2284dfb1 (diff)
downloadcrupest-f083272356417be74a5864d5ef6cfb1878558826.tar.gz
crupest-f083272356417be74a5864d5ef6cfb1878558826.tar.bz2
crupest-f083272356417be74a5864d5ef6cfb1878558826.zip
Replace rclone with coscli.
-rw-r--r--docker/auto-backup/Dockerfile12
-rwxr-xr-xdocker/auto-backup/daemon.bash30
-rwxr-xr-xdocker/auto-backup/install-coscli.bash17
-rw-r--r--template/coscli-config.yaml.template9
-rw-r--r--template/docker-compose.yaml.template4
-rw-r--r--template/rclone.conf.template7
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