feat: add features
This commit is contained in:
+12
@@ -0,0 +1,12 @@
|
|||||||
|
FROM rclone/rclone:1.52.0
|
||||||
|
|
||||||
|
LABEL "repository"="https://github.com/ttionya/BitwardenRS-Backup" \
|
||||||
|
"homepage"="https://github.com/ttionya/BitwardenRS-Backup" \
|
||||||
|
"maintainer"="ttionya <git@ttionya.com>"
|
||||||
|
|
||||||
|
COPY scripts/*.sh /app/
|
||||||
|
|
||||||
|
RUN chmod +x /app/*.sh \
|
||||||
|
&& apk add --no-cache sqlite zip
|
||||||
|
|
||||||
|
ENTRYPOINT ["/app/entrypoint.sh"]
|
||||||
@@ -0,0 +1,77 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
. /app/includes.sh
|
||||||
|
|
||||||
|
BACKUP_DIR="/bitwarden/backup/"
|
||||||
|
BACKUP_FILE="${BACKUP_DIR}/backup.$(date +%Y%m%d).sqlite3"
|
||||||
|
BACKUP_FILE_ZIP="${BACKUP_FILE}.zip"
|
||||||
|
|
||||||
|
function backup_clear_dir() {
|
||||||
|
rm -rf ${BACKUP_DIR}
|
||||||
|
}
|
||||||
|
|
||||||
|
function backup() {
|
||||||
|
color blue "backup bitwarden_rs sqlite database"
|
||||||
|
|
||||||
|
mkdir -p ${BACKUP_DIR}
|
||||||
|
|
||||||
|
sqlite3 /bitwarden/data/db.sqlite3 ".backup ${BACKUP_FILE}"
|
||||||
|
|
||||||
|
ls -lah ${BACKUP_DIR}
|
||||||
|
}
|
||||||
|
|
||||||
|
function backup_package() {
|
||||||
|
if [[ "${ZIP_ENABLE}" == "TRUE" ]]; then
|
||||||
|
color blue "package backup file"
|
||||||
|
UPLOAD_FILE="${BACKUP_FILE_ZIP}"
|
||||||
|
|
||||||
|
zip -jP ${ZIP_PASSWORD} ${BACKUP_FILE_ZIP} ${BACKUP_FILE}
|
||||||
|
|
||||||
|
ls -lah ${BACKUP_DIR}
|
||||||
|
else
|
||||||
|
color yellow "skip package backup file"
|
||||||
|
UPLOAD_FILE="${BACKUP_FILE}"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
function backup_upload() {
|
||||||
|
color blue "upload backup file to storage system"
|
||||||
|
|
||||||
|
rclone copy ${UPLOAD_FILE} ${RCLONE_REMOTE}
|
||||||
|
if [[ $? != 0 ]]; then
|
||||||
|
color red "upload failed"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
function backup_clear_history() {
|
||||||
|
if [[ "${BACKUP_KEEP_DAYS}" -gt 0 ]]; then
|
||||||
|
color blue "delete ${BACKUP_KEEP_DAYS} days ago backup files"
|
||||||
|
|
||||||
|
RCLONE_DELETE_LIST=$(rclone lsf ${RCLONE_REMOTE} | head -n -${BACKUP_KEEP_DAYS})
|
||||||
|
|
||||||
|
for RCLONE_DELETE_FILE in ${RCLONE_DELETE_LIST}
|
||||||
|
do
|
||||||
|
color yellow "deleting ${RCLONE_DELETE_FILE}"
|
||||||
|
|
||||||
|
rclone delete ${RCLONE_REMOTE}/${RCLONE_DELETE_FILE}
|
||||||
|
if [[ $? != 0 ]]; then
|
||||||
|
color red "delete ${RCLONE_DELETE_FILE} failed"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
color blue "running backup program..."
|
||||||
|
|
||||||
|
init_env
|
||||||
|
check_rclone_connection
|
||||||
|
|
||||||
|
backup_clear_dir
|
||||||
|
backup
|
||||||
|
backup_package
|
||||||
|
backup_upload
|
||||||
|
backup_clear_dir
|
||||||
|
backup_clear_history
|
||||||
|
|
||||||
|
color none ""
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
. /app/includes.sh
|
||||||
|
|
||||||
|
function configure_cron() {
|
||||||
|
echo "${CRON} sh /app/backup.sh > /dev/stdout" >> /etc/crontabs/root
|
||||||
|
}
|
||||||
|
|
||||||
|
init_env
|
||||||
|
check_rclone_connection
|
||||||
|
configure_cron
|
||||||
|
|
||||||
|
# foreground run crond
|
||||||
|
crond -l 2 -f
|
||||||
@@ -0,0 +1,91 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
#################### Function ####################
|
||||||
|
########################################
|
||||||
|
# Print colorful message.
|
||||||
|
# Arguments:
|
||||||
|
# color
|
||||||
|
# message
|
||||||
|
# Outputs:
|
||||||
|
# colorful message
|
||||||
|
########################################
|
||||||
|
function color() {
|
||||||
|
case $1 in
|
||||||
|
red) echo -e "\033[31m$2\033[0m" ;;
|
||||||
|
green) echo -e "\033[32m$2\033[0m" ;;
|
||||||
|
yellow) echo -e "\033[33m$2\033[0m" ;;
|
||||||
|
blue) echo -e "\033[34m$2\033[0m" ;;
|
||||||
|
none) echo $2 ;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
########################################
|
||||||
|
# Check storage system connection success.
|
||||||
|
# Arguments:
|
||||||
|
# None
|
||||||
|
########################################
|
||||||
|
function check_rclone_connection() {
|
||||||
|
rclone mkdir ${RCLONE_REMOTE}
|
||||||
|
if [[ $? != 0 ]]; then
|
||||||
|
color red "storage system connection failure"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
########################################
|
||||||
|
# Initialization environment variables.
|
||||||
|
# Arguments:
|
||||||
|
# None
|
||||||
|
# Outputs:
|
||||||
|
# environment variables
|
||||||
|
########################################
|
||||||
|
function init_env() {
|
||||||
|
# CRON
|
||||||
|
local CRON_DEFAULT="0 1 * * *"
|
||||||
|
if [[ -z "${CRON}" ]]; then
|
||||||
|
CRON="${CRON_DEFAULT}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# RCLONE_REMOTE_NAME
|
||||||
|
local RCLONE_REMOTE_NAME_DEFAULT="BitwardenBackup"
|
||||||
|
if [[ -z "${RCLONE_REMOTE_NAME}" ]]; then
|
||||||
|
RCLONE_REMOTE_NAME="${RCLONE_REMOTE_NAME_DEFAULT}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# RCLONE_REMOTE_DIR
|
||||||
|
local RCLONE_REMOTE_DIR_DEFAULT="/BitwardenBackup/"
|
||||||
|
if [[ -z "${RCLONE_REMOTE_DIR}" ]]; then
|
||||||
|
RCLONE_REMOTE_DIR="${RCLONE_REMOTE_DIR_DEFAULT}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# RCLONE_REMOTE
|
||||||
|
RCLONE_REMOTE="${RCLONE_REMOTE_NAME}:${RCLONE_REMOTE_DIR}"
|
||||||
|
|
||||||
|
# ZIP_ENABLE
|
||||||
|
if [[ $(echo "${ZIP_ENABLE}" | tr '[a-z]' '[A-Z]') == "FALSE" ]]; then
|
||||||
|
ZIP_ENABLE="FALSE"
|
||||||
|
else
|
||||||
|
ZIP_ENABLE="TRUE"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# ZIP_PASSWORD
|
||||||
|
if [[ -z "${ZIP_PASSWORD}" ]]; then
|
||||||
|
ZIP_PASSWORD="WHEREISMYPASSWORD?"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# BACKUP_KEEP_DAYS
|
||||||
|
local BACKUP_KEEP_DAYS_DEFAULT="0"
|
||||||
|
if [[ -z "${BACKUP_KEEP_DAYS}" ]]; then
|
||||||
|
BACKUP_KEEP_DAYS="${BACKUP_KEEP_DAYS_DEFAULT}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
color yellow "========================================"
|
||||||
|
color yellow "CRON: ${CRON}"
|
||||||
|
color yellow "RCLONE_REMOTE_NAME: ${RCLONE_REMOTE_NAME}"
|
||||||
|
color yellow "RCLONE_REMOTE_DIR: ${RCLONE_REMOTE_DIR}"
|
||||||
|
color yellow "RCLONE_REMOTE: ${RCLONE_REMOTE}"
|
||||||
|
color yellow "ZIP_ENABLE: ${ZIP_ENABLE}"
|
||||||
|
color yellow "ZIP_PASSWORD: ${#ZIP_PASSWORD} Chars"
|
||||||
|
color yellow "BACKUP_KEEP_DAYS: ${BACKUP_KEEP_DAYS}"
|
||||||
|
color yellow "========================================"
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user