feat: support .env file and docker secret
This commit is contained in:
2 files changed
+89
-20
No files matched your search
@@ -0,0 +1,17 @@
|
|||||||
|
# 1. Please put the value in double quotes to avoid problems.
|
||||||
|
# 2. To use the file, you need to map the file to `/.env` in the container.
|
||||||
|
|
||||||
|
# RCLONE_REMOTE_NAME="BitwardenBackup"
|
||||||
|
# RCLONE_REMOTE_DIR="/BitwardenBackup/"
|
||||||
|
# CRON="5 * * * *"
|
||||||
|
# ZIP_ENABLE="TRUE"
|
||||||
|
# ZIP_PASSWORD="WHEREISMYPASSWORD?"
|
||||||
|
# ZIP_TYPE="zip"
|
||||||
|
# BACKUP_FILE_DATE_SUFFIX=""
|
||||||
|
# BACKUP_KEEP_DAYS="0"
|
||||||
|
# MAIL_SMTP_ENABLE="FALSE"
|
||||||
|
# MAIL_SMTP_VARIABLES=""
|
||||||
|
# MAIL_TO=""
|
||||||
|
# MAIL_WHEN_SUCCESS="TRUE"
|
||||||
|
# MAIL_WHEN_FAILURE="TRUE"
|
||||||
|
# TIMEZONE="UTC"
|
||||||
+72
-20
@@ -1,5 +1,6 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
|
ENV_FILE="/.env"
|
||||||
DATA_DIR="/bitwarden/data"
|
DATA_DIR="/bitwarden/data"
|
||||||
DATA_DB="${DATA_DIR}/db.sqlite3"
|
DATA_DB="${DATA_DIR}/db.sqlite3"
|
||||||
DATA_CONFIG="${DATA_DIR}/config.json"
|
DATA_CONFIG="${DATA_DIR}/config.json"
|
||||||
@@ -83,6 +84,55 @@ function send_mail_content() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
########################################
|
||||||
|
# Export variables from .env file.
|
||||||
|
# Arguments:
|
||||||
|
# None
|
||||||
|
# Outputs:
|
||||||
|
# variables with prefix 'DOTENV_'
|
||||||
|
# Reference:
|
||||||
|
# https://gist.github.com/judy2k/7656bfe3b322d669ef75364a46327836
|
||||||
|
########################################
|
||||||
|
function export_env_file() {
|
||||||
|
if [[ -f "${ENV_FILE}" ]]; then
|
||||||
|
color blue "find \"${ENV_FILE}\" file and export variables"
|
||||||
|
set -a
|
||||||
|
source <(cat "${ENV_FILE}" | sed -e '/^#/d;/^\s*$/d' -e 's/\(\w*\)[ \t]*=[ \t]*\(.*\)/DOTENV_\1=\2/')
|
||||||
|
set +a
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
########################################
|
||||||
|
# Get variables from
|
||||||
|
# environment variables,
|
||||||
|
# secret file in environment variables,
|
||||||
|
# secret file in .env file,
|
||||||
|
# environment variables in .env file.
|
||||||
|
# Arguments:
|
||||||
|
# variable name
|
||||||
|
# Outputs:
|
||||||
|
# variable value
|
||||||
|
########################################
|
||||||
|
function get_env() {
|
||||||
|
local VAR="$1"
|
||||||
|
local VAR_FILE="${VAR}_FILE"
|
||||||
|
local VAR_DOTENV="DOTENV_${VAR}"
|
||||||
|
local VAR_DOTENV_FILE="DOTENV_${VAR_FILE}"
|
||||||
|
local VALUE=""
|
||||||
|
|
||||||
|
if [[ "${!VAR:-}" ]]; then
|
||||||
|
VALUE="${!VAR}"
|
||||||
|
elif [[ "${!VAR_FILE:-}" ]]; then
|
||||||
|
VALUE="$(cat "${!VAR_FILE}")"
|
||||||
|
elif [[ "${!VAR_DOTENV_FILE:-}" ]]; then
|
||||||
|
VALUE="$(cat "${!VAR_DOTENV_FILE}")"
|
||||||
|
elif [[ "${!VAR_DOTENV:-}" ]]; then
|
||||||
|
VALUE="${!VAR_DOTENV}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
export "${VAR}=${VALUE}"
|
||||||
|
}
|
||||||
|
|
||||||
########################################
|
########################################
|
||||||
# Initialization environment variables.
|
# Initialization environment variables.
|
||||||
# Arguments:
|
# Arguments:
|
||||||
@@ -91,28 +141,26 @@ function send_mail_content() {
|
|||||||
# environment variables
|
# environment variables
|
||||||
########################################
|
########################################
|
||||||
function init_env() {
|
function init_env() {
|
||||||
|
# export
|
||||||
|
export_env_file
|
||||||
|
|
||||||
# CRON
|
# CRON
|
||||||
local CRON_DEFAULT="5 * * * *"
|
get_env CRON
|
||||||
if [[ -z "${CRON}" ]]; then
|
CRON="${CRON:-"5 * * * *"}"
|
||||||
CRON="${CRON_DEFAULT}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# RCLONE_REMOTE_NAME
|
# RCLONE_REMOTE_NAME
|
||||||
local RCLONE_REMOTE_NAME_DEFAULT="BitwardenBackup"
|
get_env RCLONE_REMOTE_NAME
|
||||||
if [[ -z "${RCLONE_REMOTE_NAME}" ]]; then
|
RCLONE_REMOTE_NAME="${RCLONE_REMOTE_NAME:-"BitwardenBackup"}"
|
||||||
RCLONE_REMOTE_NAME="${RCLONE_REMOTE_NAME_DEFAULT}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# RCLONE_REMOTE_DIR
|
# RCLONE_REMOTE_DIR
|
||||||
local RCLONE_REMOTE_DIR_DEFAULT="/BitwardenBackup/"
|
get_env RCLONE_REMOTE_DIR
|
||||||
if [[ -z "${RCLONE_REMOTE_DIR}" ]]; then
|
RCLONE_REMOTE_DIR="${RCLONE_REMOTE_DIR:-"/BitwardenBackup/"}"
|
||||||
RCLONE_REMOTE_DIR="${RCLONE_REMOTE_DIR_DEFAULT}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# RCLONE_REMOTE
|
# RCLONE_REMOTE
|
||||||
RCLONE_REMOTE="${RCLONE_REMOTE_NAME}:${RCLONE_REMOTE_DIR}"
|
RCLONE_REMOTE="${RCLONE_REMOTE_NAME}:${RCLONE_REMOTE_DIR}"
|
||||||
|
|
||||||
# ZIP_ENABLE
|
# ZIP_ENABLE
|
||||||
|
get_env ZIP_ENABLE
|
||||||
ZIP_ENABLE=$(echo "${ZIP_ENABLE}" | tr '[a-z]' '[A-Z]')
|
ZIP_ENABLE=$(echo "${ZIP_ENABLE}" | tr '[a-z]' '[A-Z]')
|
||||||
if [[ "${ZIP_ENABLE}" == "FALSE" ]]; then
|
if [[ "${ZIP_ENABLE}" == "FALSE" ]]; then
|
||||||
ZIP_ENABLE="FALSE"
|
ZIP_ENABLE="FALSE"
|
||||||
@@ -121,11 +169,11 @@ function init_env() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# ZIP_PASSWORD
|
# ZIP_PASSWORD
|
||||||
if [[ -z "${ZIP_PASSWORD}" ]]; then
|
get_env ZIP_PASSWORD
|
||||||
ZIP_PASSWORD="WHEREISMYPASSWORD?"
|
ZIP_PASSWORD="${ZIP_PASSWORD:-"WHEREISMYPASSWORD?"}"
|
||||||
fi
|
|
||||||
|
|
||||||
# ZIP_TYPE
|
# ZIP_TYPE
|
||||||
|
get_env ZIP_TYPE
|
||||||
ZIP_TYPE=$(echo "${ZIP_TYPE}" | tr '[A-Z]' '[a-z]')
|
ZIP_TYPE=$(echo "${ZIP_TYPE}" | tr '[A-Z]' '[a-z]')
|
||||||
if [[ "${ZIP_TYPE}" == "7z" ]]; then
|
if [[ "${ZIP_TYPE}" == "7z" ]]; then
|
||||||
ZIP_TYPE="7z"
|
ZIP_TYPE="7z"
|
||||||
@@ -134,24 +182,26 @@ function init_env() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# BACKUP_KEEP_DAYS
|
# BACKUP_KEEP_DAYS
|
||||||
local BACKUP_KEEP_DAYS_DEFAULT="0"
|
get_env BACKUP_KEEP_DAYS
|
||||||
if [[ -z "${BACKUP_KEEP_DAYS}" ]]; then
|
BACKUP_KEEP_DAYS="${BACKUP_KEEP_DAYS:-"0"}"
|
||||||
BACKUP_KEEP_DAYS="${BACKUP_KEEP_DAYS_DEFAULT}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# BACKUP_FILE_DATE_FORMAT
|
# BACKUP_FILE_DATE_FORMAT
|
||||||
|
get_env BACKUP_FILE_DATE_SUFFIX
|
||||||
BACKUP_FILE_DATE_FORMAT=$(echo "%Y%m%d${BACKUP_FILE_DATE_SUFFIX}" | sed 's/[^0-9a-zA-Z%_-]//g')
|
BACKUP_FILE_DATE_FORMAT=$(echo "%Y%m%d${BACKUP_FILE_DATE_SUFFIX}" | sed 's/[^0-9a-zA-Z%_-]//g')
|
||||||
|
|
||||||
# MAIL_SMTP_ENABLE
|
# MAIL_SMTP_ENABLE
|
||||||
# MAIL_TO
|
# MAIL_TO
|
||||||
|
get_env MAIL_SMTP_ENABLE
|
||||||
|
get_env MAIL_TO
|
||||||
MAIL_SMTP_ENABLE=$(echo "${MAIL_SMTP_ENABLE}" | tr '[a-z]' '[A-Z]')
|
MAIL_SMTP_ENABLE=$(echo "${MAIL_SMTP_ENABLE}" | tr '[a-z]' '[A-Z]')
|
||||||
if [[ "${MAIL_SMTP_ENABLE}" == "TRUE" && -n "${MAIL_TO}" ]]; then
|
if [[ "${MAIL_SMTP_ENABLE}" == "TRUE" && "${MAIL_TO}" ]]; then
|
||||||
MAIL_SMTP_ENABLE="TRUE"
|
MAIL_SMTP_ENABLE="TRUE"
|
||||||
else
|
else
|
||||||
MAIL_SMTP_ENABLE="FALSE"
|
MAIL_SMTP_ENABLE="FALSE"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# MAIL_WHEN_SUCCESS
|
# MAIL_WHEN_SUCCESS
|
||||||
|
get_env MAIL_WHEN_SUCCESS
|
||||||
MAIL_WHEN_SUCCESS=$(echo "${MAIL_WHEN_SUCCESS}" | tr '[a-z]' '[A-Z]')
|
MAIL_WHEN_SUCCESS=$(echo "${MAIL_WHEN_SUCCESS}" | tr '[a-z]' '[A-Z]')
|
||||||
if [[ "${MAIL_WHEN_SUCCESS}" == "FALSE" ]]; then
|
if [[ "${MAIL_WHEN_SUCCESS}" == "FALSE" ]]; then
|
||||||
MAIL_WHEN_SUCCESS="FALSE"
|
MAIL_WHEN_SUCCESS="FALSE"
|
||||||
@@ -160,6 +210,7 @@ function init_env() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# MAIL_WHEN_FAILURE
|
# MAIL_WHEN_FAILURE
|
||||||
|
get_env MAIL_WHEN_FAILURE
|
||||||
MAIL_WHEN_FAILURE=$(echo "${MAIL_WHEN_FAILURE}" | tr '[a-z]' '[A-Z]')
|
MAIL_WHEN_FAILURE=$(echo "${MAIL_WHEN_FAILURE}" | tr '[a-z]' '[A-Z]')
|
||||||
if [[ "${MAIL_WHEN_FAILURE}" == "FALSE" ]]; then
|
if [[ "${MAIL_WHEN_FAILURE}" == "FALSE" ]]; then
|
||||||
MAIL_WHEN_FAILURE="FALSE"
|
MAIL_WHEN_FAILURE="FALSE"
|
||||||
@@ -168,6 +219,7 @@ function init_env() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# TIMEZONE
|
# TIMEZONE
|
||||||
|
get_env TIMEZONE
|
||||||
local TIMEZONE_MATCHED_COUNT=$(ls "/usr/share/zoneinfo/${TIMEZONE}" 2> /dev/null | wc -l)
|
local TIMEZONE_MATCHED_COUNT=$(ls "/usr/share/zoneinfo/${TIMEZONE}" 2> /dev/null | wc -l)
|
||||||
if [[ "${TIMEZONE_MATCHED_COUNT}" -ne 1 ]]; then
|
if [[ "${TIMEZONE_MATCHED_COUNT}" -ne 1 ]]; then
|
||||||
TIMEZONE="UTC"
|
TIMEZONE="UTC"
|
||||||
|
|||||||
Reference in new issue
Block a user