mirror of
https://gitlab.sectorq.eu/jaydee/omv_backup.git
synced 2025-07-01 23:58:33 +02:00
initial
This commit is contained in:
190
omv_backup.py
190
omv_backup.py
@ -166,101 +166,107 @@ print(f"Port {port} on {BACKUP_HOST} is open.")
|
||||
print("Starting")
|
||||
|
||||
if _RESTORE:
|
||||
topic = "sectorq/omv/restore/{}".format(_APP)
|
||||
client.connect(broker,1883,60)
|
||||
msg = {"status":"inactive","bak_name":_APP,"start_time":"inactive","end_time":"inactive","progress":0}
|
||||
|
||||
client.publish(topic, json.dumps(msg))
|
||||
client.disconnect()
|
||||
now = datetime.datetime.now()
|
||||
BACKUP_HOST = "root@omv.home.lan"
|
||||
BACKUP_DEVICE = "/srv/dev-disk-by-uuid-2f843500-95b6-43b0-bea1-9b67032989b8"
|
||||
BACKUP_DIR = f"/backup/{host}"
|
||||
NEW_BACKUP_DIR = f"/backup/m-server/docker_data/latest/{_APP}"
|
||||
DATETIME = now.strftime("%Y-%m-%d_%H-%M-%S")
|
||||
SOURCE_DIR = f"/share/docker_data/"
|
||||
if _FIRST:
|
||||
BACKUP_PATH="{}/initial".format(BACKUP_DIR)
|
||||
if _APP == "all":
|
||||
_APP = ["nginx","ha","gitlab","mailu"]
|
||||
else:
|
||||
BACKUP_PATH="{}/{}".format(BACKUP_DIR, DATETIME)
|
||||
LATEST_LINK="{}/latest".format(BACKUP_DIR)
|
||||
FULL_BACKUP_LATEST = f"{NEW_BACKUP_DIR}/latest"
|
||||
LATEST_LINK = f"/{host}/{_APP}/latest"
|
||||
|
||||
|
||||
msg = {"status":"started","bak_name":_APP,"start_time":DATETIME,"end_time":"in progress", "progress":0}
|
||||
client.connect(broker,1883,60)
|
||||
client.publish(topic, json.dumps(msg))
|
||||
client.disconnect()
|
||||
|
||||
print("Create backup dir")
|
||||
print(cmnd)
|
||||
|
||||
|
||||
#cmnd = "rsync -av --delete {}/ --link-dest {} --exclude=\".cache\" {}".format(SOURCE_DIR, LATEST_LINK, BACKUP_PATH)
|
||||
cmnd = f"rsync -avz --delete rsync://{BACKUP_HOST}{NEW_BACKUP_DIR} {SOURCE_DIR}"
|
||||
|
||||
|
||||
|
||||
|
||||
ans = "y"
|
||||
print(cmnd)
|
||||
print("Sync files")
|
||||
if _TEST:
|
||||
ans = input("continue?") or "n"
|
||||
if ans == "y" and _EXECUTE:
|
||||
status, output = subprocess.getstatusoutput(cmnd)
|
||||
_APP = _APP.split(",")
|
||||
|
||||
if _APP == "nginx":
|
||||
print("Stopping docker")
|
||||
cmnd = "docker stop nginx-app-1"
|
||||
status, output = subprocess.getstatusoutput(cmnd)
|
||||
domains = ["sectorq.eu","gitlab.sectorq.eu","ha.sectorq.eu","mail.sectorq.eu","pw.sectorq.eu","semaphore.sectorq.eu","kestra.sectorq.eu","auth.sectorq.eu"]
|
||||
for d in domains:
|
||||
cmnd = f'sqlite3 /share/docker_data/nginx/data/database.sqlite "UPDATE proxy_host SET forward_host = \'{IP}\' WHERE domain_names = \'[\\"{d}\\"]\'"'
|
||||
print(cmnd)
|
||||
status, output = subprocess.getstatusoutput(cmnd)
|
||||
cmnd = 'egrep -l "# kestra.sectorq.eu|# auth.sectorq.eu|# ha.sectorq.eu|# pw.sectorq.eu|# semaphore.sectorq.eu|# sectorq.eu|# gitlab.sectorq.eu|# ha.sectorq.eu" /share/docker_data/nginx/data/nginx/proxy_host/*'
|
||||
status, output = subprocess.getstatusoutput(cmnd)
|
||||
print(output.splitlines())
|
||||
for file in output.splitlines():
|
||||
print(file)
|
||||
f = open(file)
|
||||
contents = f.read()
|
||||
f.close()
|
||||
regex = re.compile(r'\n\s+set \$server\s+\"\w+.\w+.\w+.\w+\";')
|
||||
contents = re.sub(regex, f'\n set $server \"{IP}\";', contents)
|
||||
#print(contents)
|
||||
print(regex)
|
||||
f = open(file, "w")
|
||||
contents = f.write(contents)
|
||||
f.close()
|
||||
status, output = subprocess.getstatusoutput(cmnd)
|
||||
print("Starting docker")
|
||||
cmnd = "docker start nginx-app-1"
|
||||
status, output = subprocess.getstatusoutput(cmnd)
|
||||
now = datetime.datetime.now()
|
||||
ENDTIME = now.strftime("%Y-%m-%d_%H:%M:%S")
|
||||
msg = {"status":"finished","bak_name":_APP,"start_time":DATETIME,"end_time":ENDTIME,"progress":0}
|
||||
client.connect(broker,1883,10)
|
||||
client.publish(topic, json.dumps(msg))
|
||||
client.disconnect()
|
||||
for app in _APP:
|
||||
topic = "sectorq/omv/restore/{}".format(app)
|
||||
client.connect(broker,1883,60)
|
||||
msg = {"status":"inactive","bak_name":app,"start_time":"inactive","end_time":"inactive","progress":0}
|
||||
|
||||
print("Getting size of FS")
|
||||
#cmnd = "du -h --max-depth=0 {}".format(BACKUP_FS)
|
||||
cmnd = "ssh root@omv.home.lan 'df -h /srv/dev-disk-by-uuid-2f843500-95b6-43b0-bea1-9b67032989b8|awk '\\''{ print $3 }'\\''|tail -1'"
|
||||
print(cmnd)
|
||||
status, output = subprocess.getstatusoutput(cmnd)
|
||||
used_space = (output.split())[0]
|
||||
now = datetime.datetime.now()
|
||||
ENDJOB = now.strftime("%Y-%m-%d_%H:%M:%S")
|
||||
print("Size : {}".format(used_space))
|
||||
print("Sending finished status")
|
||||
msg = {"mode":_MODE,"status":"finished","bak_name":"complete","start_time":STARTTIME,"end_time":ENDJOB,"progress":0,"used_space":used_space}
|
||||
print(msg)
|
||||
client.connect(broker,1883,10)
|
||||
client.publish(topic_sum, json.dumps(msg))
|
||||
client.disconnect()
|
||||
client.publish(topic, json.dumps(msg))
|
||||
client.disconnect()
|
||||
now = datetime.datetime.now()
|
||||
BACKUP_HOST = "root@omv.home.lan"
|
||||
BACKUP_DEVICE = "/srv/dev-disk-by-uuid-2f843500-95b6-43b0-bea1-9b67032989b8"
|
||||
BACKUP_DIR = f"/backup/{host}"
|
||||
NEW_BACKUP_DIR = f"/backup/m-server/docker_data/latest/{app}"
|
||||
DATETIME = now.strftime("%Y-%m-%d_%H-%M-%S")
|
||||
SOURCE_DIR = f"/share/docker_data/"
|
||||
if _FIRST:
|
||||
BACKUP_PATH="{}/initial".format(BACKUP_DIR)
|
||||
else:
|
||||
BACKUP_PATH="{}/{}".format(BACKUP_DIR, DATETIME)
|
||||
LATEST_LINK="{}/latest".format(BACKUP_DIR)
|
||||
FULL_BACKUP_LATEST = f"{NEW_BACKUP_DIR}/latest"
|
||||
LATEST_LINK = f"/{host}/{app}/latest"
|
||||
|
||||
|
||||
msg = {"status":"started","bak_name":app,"start_time":DATETIME,"end_time":"in progress", "progress":0}
|
||||
client.connect(broker,1883,60)
|
||||
client.publish(topic, json.dumps(msg))
|
||||
client.disconnect()
|
||||
|
||||
print("Create backup dir")
|
||||
print(cmnd)
|
||||
|
||||
|
||||
#cmnd = "rsync -av --delete {}/ --link-dest {} --exclude=\".cache\" {}".format(SOURCE_DIR, LATEST_LINK, BACKUP_PATH)
|
||||
cmnd = f"rsync -avz --delete rsync://{BACKUP_HOST}{NEW_BACKUP_DIR} {SOURCE_DIR}"
|
||||
|
||||
|
||||
|
||||
|
||||
ans = "y"
|
||||
print(cmnd)
|
||||
print("Sync files")
|
||||
if _TEST:
|
||||
ans = input("continue?") or "n"
|
||||
if ans == "y" and _EXECUTE:
|
||||
status, output = subprocess.getstatusoutput(cmnd)
|
||||
|
||||
if _APP == "nginx":
|
||||
print("Stopping docker")
|
||||
cmnd = "docker stop nginx-app-1"
|
||||
status, output = subprocess.getstatusoutput(cmnd)
|
||||
domains = ["sectorq.eu","gitlab.sectorq.eu","ha.sectorq.eu","mail.sectorq.eu","pw.sectorq.eu","semaphore.sectorq.eu","kestra.sectorq.eu","auth.sectorq.eu"]
|
||||
for d in domains:
|
||||
cmnd = f'sqlite3 /share/docker_data/nginx/data/database.sqlite "UPDATE proxy_host SET forward_host = \'{IP}\' WHERE domain_names = \'[\\"{d}\\"]\'"'
|
||||
print(cmnd)
|
||||
status, output = subprocess.getstatusoutput(cmnd)
|
||||
cmnd = 'egrep -l "# kestra.sectorq.eu|# auth.sectorq.eu|# ha.sectorq.eu|# pw.sectorq.eu|# semaphore.sectorq.eu|# sectorq.eu|# gitlab.sectorq.eu|# ha.sectorq.eu" /share/docker_data/nginx/data/nginx/proxy_host/*'
|
||||
status, output = subprocess.getstatusoutput(cmnd)
|
||||
print(output.splitlines())
|
||||
for file in output.splitlines():
|
||||
print(file)
|
||||
f = open(file)
|
||||
contents = f.read()
|
||||
f.close()
|
||||
regex = re.compile(r'\n\s+set \$server\s+\"\w+.\w+.\w+.\w+\";')
|
||||
contents = re.sub(regex, f'\n set $server \"{IP}\";', contents)
|
||||
#print(contents)
|
||||
print(regex)
|
||||
f = open(file, "w")
|
||||
contents = f.write(contents)
|
||||
f.close()
|
||||
status, output = subprocess.getstatusoutput(cmnd)
|
||||
print("Starting docker")
|
||||
cmnd = "docker start nginx-app-1"
|
||||
status, output = subprocess.getstatusoutput(cmnd)
|
||||
now = datetime.datetime.now()
|
||||
ENDTIME = now.strftime("%Y-%m-%d_%H:%M:%S")
|
||||
msg = {"status":"finished","bak_name":app,"start_time":DATETIME,"end_time":ENDTIME,"progress":0}
|
||||
client.connect(broker,1883,10)
|
||||
client.publish(topic, json.dumps(msg))
|
||||
client.disconnect()
|
||||
|
||||
print("Getting size of FS")
|
||||
#cmnd = "du -h --max-depth=0 {}".format(BACKUP_FS)
|
||||
cmnd = "ssh root@omv.home.lan 'df -h /srv/dev-disk-by-uuid-2f843500-95b6-43b0-bea1-9b67032989b8|awk '\\''{ print $3 }'\\''|tail -1'"
|
||||
print(cmnd)
|
||||
status, output = subprocess.getstatusoutput(cmnd)
|
||||
used_space = (output.split())[0]
|
||||
now = datetime.datetime.now()
|
||||
ENDJOB = now.strftime("%Y-%m-%d_%H:%M:%S")
|
||||
print("Size : {}".format(used_space))
|
||||
print("Sending finished status")
|
||||
msg = {"mode":_MODE,"status":"finished","bak_name":"complete","start_time":STARTTIME,"end_time":ENDJOB,"progress":0,"used_space":used_space}
|
||||
print(msg)
|
||||
client.connect(broker,1883,10)
|
||||
client.publish(topic_sum, json.dumps(msg))
|
||||
client.disconnect()
|
||||
|
||||
if _MODE == "auto":
|
||||
cmnd = "ssh root@omv.home.lan 'systemctl suspend &'"
|
||||
|
Reference in New Issue
Block a user