#!/bin/bash # shellcheck source=/dev/null . /app/includes.sh function clear_dir() { rm -rf "${BACKUP_DIR}" } function backup_init() { NOW="$(date +"${BACKUP_FILE_DATE_FORMAT}")" # backup vaultwarden database file (postgresql) BACKUP_FILE_DB_POSTGRESQL="${BACKUP_DIR}/db.${NOW}.dump" # backup vaultwarden config file BACKUP_FILE_CONFIG="${BACKUP_DIR}/config.${NOW}.json" # backup vaultwarden rsakey files BACKUP_FILE_RSAKEY="${BACKUP_DIR}/rsakey.${NOW}.tar" # backup vaultwarden attachments directory BACKUP_FILE_ATTACHMENTS="${BACKUP_DIR}/attachments.${NOW}.tar" # backup vaultwarden sends directory BACKUP_FILE_SENDS="${BACKUP_DIR}/sends.${NOW}.tar" # backup zip file BACKUP_FILE_ZIP="${BACKUP_DIR}/../backup.${NOW}.7z" } function backup_db_postgresql() { echo "backup vaultwarden postgresql database" if ! pg_dump -Fc -h "${POSTGRES_HOST}" -p "${POSTGRES_PORT}" -d "${POSTGRES_DB}" -U "${POSTGRES_USER}" -f "${BACKUP_FILE_DB_POSTGRESQL}" ; then echo "backup vaultwarden postgresql database failed" exit 1 fi } function backup_config() { echo "backup vaultwarden config" if [[ -f "${DATA_CONFIG}" ]]; then cp -f "${DATA_CONFIG}" "${BACKUP_FILE_CONFIG}" else echo "vaultwarden config not found, skipping" fi } function backup_rsakey() { echo "backup vaultwarden rsakey" local FIND_RSAKEY FIND_RSAKEY=$(find "${DATA_RSAKEY_DIRNAME}" -name "${DATA_RSAKEY_BASENAME}*" -exec basename {} +) local FIND_RSAKEY_COUNT FIND_RSAKEY_COUNT=$(echo "${FIND_RSAKEY}" | wc -l) if [[ "${FIND_RSAKEY_COUNT}" -gt 0 ]]; then echo "${FIND_RSAKEY}" | tar -c -C "${DATA_RSAKEY_DIRNAME}" -f "${BACKUP_FILE_RSAKEY}" -T - echo "display rsakey tar file list" tar -tf "${BACKUP_FILE_RSAKEY}" else echo "vaultwarden rsakey not found, skipping" fi } function backup_attachments() { echo "backup vaultwarden attachments" if [[ -d "${DATA_ATTACHMENTS}" ]]; then tar -c -C "${DATA_ATTACHMENTS_DIRNAME}" -f "${BACKUP_FILE_ATTACHMENTS}" "${DATA_ATTACHMENTS_BASENAME}" echo "display attachments tar file list" tar -tf "${BACKUP_FILE_ATTACHMENTS}" else echo "vaultwarden attachments directory not found, skipping" fi } function backup_sends() { echo "backup vaultwarden sends" if [[ -d "${DATA_SENDS}" ]]; then tar -c -C "${DATA_SENDS_DIRNAME}" -f "${BACKUP_FILE_SENDS}" "${DATA_SENDS_BASENAME}" echo "display sends tar file list" tar -tf "${BACKUP_FILE_SENDS}" else echo "vaultwarden sends directory not found, skipping" fi } function backup() { mkdir -p "${BACKUP_DIR}" backup_db_postgresql backup_config backup_rsakey backup_attachments backup_sends ls -lah "${BACKUP_DIR}" } function backup_package() { echo "package backup file" 7z a -t7z -m0=lzma2 -mx=9 -mfb=64 -md=32m -ms=on -mhe=on "${BACKUP_FILE_ZIP}" "${BACKUP_DIR}"/* ls -lah "${BACKUP_DIR}" echo "display backup ${ZIP_TYPE} file list" 7z l "${BACKUP_FILE_ZIP}" chown 1000:100 "${BACKUP_FILE_ZIP}" } function clear_history() { if [[ "${BACKUP_KEEP_DAYS}" -gt 0 ]]; then echo find "${BACKUP_DIR}" -mtime +"${BACKUP_KEEP_DAYS}" -exec rm -rf {} \; fi } echo "running the backup program at $(date +"%Y-%m-%d %H:%M:%S %Z")" init_env clear_dir backup_init backup backup_package clear_dir clear_history