schon/evibes/settings/dbbackup.py
Egor fureunoir Gorbunov 877f71f614 Features: 1) Add support for multiple database backup types (SFTP, FTP) with dynamic configuration;
Fixes: 1) Correct formatting issue in `0036_vendor_b2b_auth_token_vendor_users` migration file;

Extra: 1) Update environment file generation scripts to accommodate new DBBACKUP_TYPE configuration; 2) Add import for `ImproperlyConfigured` in `dbbackup.py`.
2025-08-05 20:40:27 +03:00

40 lines
1.5 KiB
Python

from os import getenv
from django.core.exceptions import ImproperlyConfigured
DBBACKUP_CONNECTORS = {
"default": {
"SINGLE_TRANSACTION": False,
"IF_EXISTS": True,
"RESTORE_SUFFIX": "--set ON_ERROR_STOP=off",
}
}
if getenv("DBBACKUP_HOST") and getenv("DBBACKUP_USER") and getenv("DBBACKUP_PASS"):
dbbackup_server_type = getenv("DBBACKUP_TYPE", "sftp")
match dbbackup_server_type:
case "sftp":
DBBACKUP_STORAGE = "storages.backends.sftpstorage.SFTPStorage"
DBBACKUP_STORAGE_OPTIONS = {
"host": getenv("DBBACKUP_HOST"),
"root_path": "/db_backups/",
"params": {
"username": getenv("DBBACKUP_USER"),
"password": getenv("DBBACKUP_PASS"),
"allow_agent": False,
"look_for_keys": False,
},
"interactive": False,
"file_mode": 0o600,
"dir_mode": 0o700,
}
case "ftp":
DBBACKUP_STORAGE = "storages.backends.ftp.FTPStorage"
DBBACKUP_STORAGE_OPTIONS = {
"location": f"ftp://{getenv('DBBACKUP_USER')}:{getenv('DBBACKUP_PASS')}@{getenv('DBBACKUP_HOST')}:21",
}
case _:
raise ImproperlyConfigured(f"Invalid DBBACKUP_TYPE: {dbbackup_server_type}")
else:
DBBACKUP_STORAGE = "django.core.files.storage.FileSystemStorage"
DBBACKUP_STORAGE_OPTIONS = {"location": "/app/db_backups/"}