33 lines
1.2 KiB
Python
33 lines
1.2 KiB
Python
from __future__ import annotations
|
|
import argparse, shutil, subprocess, tarfile, time
|
|
from pathlib import Path
|
|
import sys
|
|
ROOT=Path(__file__).resolve().parents[1]
|
|
sys.path.insert(0,str(ROOT))
|
|
from sourcehub.config import Settings
|
|
|
|
parser=argparse.ArgumentParser()
|
|
parser.add_argument("--out",default="backups")
|
|
args=parser.parse_args()
|
|
settings=Settings.from_env()
|
|
out=Path(args.out);out.mkdir(parents=True,exist_ok=True)
|
|
stamp=time.strftime("%Y%m%d-%H%M%S")
|
|
|
|
if settings.database_kind=="sqlite":
|
|
db=Path(settings.database_url.replace("sqlite:///","",1))
|
|
shutil.copy2(db,out/f"sourcehub-{stamp}.db")
|
|
elif settings.database_kind=="postgresql":
|
|
target=out/f"sourcehub-{stamp}.dump"
|
|
subprocess.run(["pg_dump","--format=custom","--file",str(target),settings.database_url],check=True)
|
|
else:
|
|
raise SystemExit("지원하지 않는 DB backend")
|
|
|
|
if settings.storage_backend=="local":
|
|
tar_path=out/f"sourcehub-storage-{stamp}.tar.gz"
|
|
with tarfile.open(tar_path,"w:gz") as tar:
|
|
tar.add(settings.local_storage_dir,arcname="storage")
|
|
print(tar_path)
|
|
else:
|
|
print("MinIO object backup은 bucket versioning/replication 또는 mc mirror 정책으로 운영하세요.")
|
|
print("backup complete",stamp)
|