feat: support postgresql database

This commit is contained in:
ttionya committed 2022-12-11 20:30:47 +08:00
1 parent c6075b5019
commit 3740262e8c
3 files changed
+71 -6

No files matched your search

+24 -5
View File
@@ -8,8 +8,10 @@ function clear_dir() {
function backup_init() { function backup_init() {
NOW="$(date +"${BACKUP_FILE_DATE_FORMAT}")" NOW="$(date +"${BACKUP_FILE_DATE_FORMAT}")"
# backup vaultwarden database file # backup vaultwarden database file (sqlite)
BACKUP_FILE_DB="${BACKUP_DIR}/db.${NOW}.sqlite3" BACKUP_FILE_DB_SQLITE="${BACKUP_DIR}/db.${NOW}.sqlite3"
# backup vaultwarden database file (postgresql)
BACKUP_FILE_DB_POSTGRESQL="${BACKUP_DIR}/db.${NOW}.dump"
# backup vaultwarden config file # backup vaultwarden config file
BACKUP_FILE_CONFIG="${BACKUP_DIR}/config.${NOW}.json" BACKUP_FILE_CONFIG="${BACKUP_DIR}/config.${NOW}.json"
# backup vaultwarden rsakey files # backup vaultwarden rsakey files
@@ -22,16 +24,29 @@ function backup_init() {
BACKUP_FILE_ZIP="${BACKUP_DIR}/backup.${NOW}.${ZIP_TYPE}" BACKUP_FILE_ZIP="${BACKUP_DIR}/backup.${NOW}.${ZIP_TYPE}"
} }
function backup_db() { function backup_db_sqlite() {
color blue "backup vaultwarden sqlite database" color blue "backup vaultwarden sqlite database"
if [[ -f "${DATA_DB}" ]]; then if [[ -f "${DATA_DB}" ]]; then
sqlite3 "${DATA_DB}" ".backup '${BACKUP_FILE_DB}'" sqlite3 "${DATA_DB}" ".backup '${BACKUP_FILE_DB_SQLITE}'"
else else
color yellow "not found vaultwarden sqlite database, skipping" color yellow "not found vaultwarden sqlite database, skipping"
fi fi
} }
function backup_db_postgresql() {
color blue "backup vaultwarden postgresql database"
pg_dump -Fc -h "${PG_HOST}" -p "${PG_PORT}" -d "${PG_DBNAME}" -U "${PG_USERNAME}" -f "${BACKUP_FILE_DB_POSTGRESQL}"
if [[ $? != 0 ]]; then
color red "backup vaultwarden postgresql database failed"
send_mail_content "FALSE" "Backup failed at $(date +"%Y-%m-%d %H:%M:%S %Z"). Reason: Backup postgresql database failed."
exit 1
fi
}
function backup_config() { function backup_config() {
color blue "backup vaultwarden config" color blue "backup vaultwarden config"
@@ -90,7 +105,11 @@ function backup_sends() {
function backup() { function backup() {
mkdir -p "${BACKUP_DIR}" mkdir -p "${BACKUP_DIR}"
backup_db case "${DB_TYPE}" in
SQLITE) backup_db_sqlite ;;
POSTGRESQL) backup_db_postgresql ;;
esac
backup_config backup_config
backup_rsakey backup_rsakey
backup_attachments backup_attachments
+8
View File
@@ -36,6 +36,13 @@ if [[ "$1" == "restore" ]]; then
exit 0 exit 0
fi fi
function configure_postgresql() {
if [[ "${DB_TYPE}" == "POSTGRESQL" ]]; then
echo "${PG_HOST}:${PG_PORT}:${PG_DBNAME}:${PG_USERNAME}:${PG_PASSWORD}" > ~/.pgpass
chmod 0600 ~/.pgpass
fi
}
function configure_timezone() { function configure_timezone() {
ln -sf "/usr/share/zoneinfo/${TIMEZONE}" "${LOCALTIME_FILE}" ln -sf "/usr/share/zoneinfo/${TIMEZONE}" "${LOCALTIME_FILE}"
} }
@@ -49,6 +56,7 @@ function configure_cron() {
init_env init_env
check_rclone_connection check_rclone_connection
configure_postgresql
configure_timezone configure_timezone
configure_cron configure_cron
+39 -1
View File
@@ -237,6 +237,7 @@ function init_env() {
export_env_file export_env_file
init_env_dir init_env_dir
init_env_db
init_env_mail init_env_mail
# CRON # CRON
@@ -305,11 +306,19 @@ function init_env() {
color yellow "========================================" color yellow "========================================"
color yellow "DATA_DIR: ${DATA_DIR}" color yellow "DATA_DIR: ${DATA_DIR}"
color yellow "DATA_DB: ${DATA_DB}"
color yellow "DATA_CONFIG: ${DATA_CONFIG}" color yellow "DATA_CONFIG: ${DATA_CONFIG}"
color yellow "DATA_RSAKEY: ${DATA_RSAKEY}" color yellow "DATA_RSAKEY: ${DATA_RSAKEY}"
color yellow "DATA_ATTACHMENTS: ${DATA_ATTACHMENTS}" color yellow "DATA_ATTACHMENTS: ${DATA_ATTACHMENTS}"
color yellow "DATA_SENDS: ${DATA_SENDS}" color yellow "DATA_SENDS: ${DATA_SENDS}"
color yellow "========================================"
color yellow "DB_TYPE: ${DB_TYPE}"
if [[ "${DB_TYPE}" == "POSTGRESQL" ]]; then
color yellow "DB_URL: ${PG_HOST}:${PG_PORT}:${PG_DBNAME}:${PG_USERNAME}:***(${#PG_PASSWORD} Chars)"
else
color yellow "DATA_DB: ${DATA_DB}"
fi
color yellow "========================================" color yellow "========================================"
color yellow "CRON: ${CRON}" color yellow "CRON: ${CRON}"
@@ -369,6 +378,35 @@ function init_env_dir() {
DATA_SENDS_BASENAME="$(basename "${DATA_SENDS}")" DATA_SENDS_BASENAME="$(basename "${DATA_SENDS}")"
} }
function init_env_db() {
# DB_TYPE
get_env DB_TYPE
if [[ "${DB_TYPE^^}" == "POSTGRESQL" ]]; then # postgresql
DB_TYPE="POSTGRESQL"
# PG_HOST
get_env PG_HOST
# PG_PORT
get_env PG_PORT
PG_PORT="${PG_PORT:-"5432"}"
# PG_DBNAME
get_env PG_DBNAME
PG_DBNAME="${PG_DBNAME:-"vaultwarden"}"
# PG_USERNAME
get_env PG_USERNAME
PG_USERNAME="${PG_USERNAME:-"vaultwarden"}"
# PG_PASSWORD
get_env PG_PASSWORD
else # sqlite
DB_TYPE="SQLITE"
fi
}
function init_env_mail() { function init_env_mail() {
# MAIL_SMTP_ENABLE # MAIL_SMTP_ENABLE
# MAIL_TO # MAIL_TO