import subprocess import requests import datetime import os import shutil now = datetime.datetime.now() PASSWORD = "l4c1j4yd33Du5lo" DATETIME = now.strftime("%Y%m%d%H%M%S") os.chdir("/share/docker_data/__backups/") print("Backup gitlab") cmnd = 'docker exec -t gitlab gitlab-backup create SKIP=artifacts,repositories,registry,uploads,builds,pages,lfs,packages,terraform_state' status, output = subprocess.getstatusoutput(cmnd) allfiles = os.listdir("/share/docker_data/gitlab/data/backups/") for f in allfiles: shutil.move(f"/share/docker_data/gitlab/data/backups/{f}", "/share/docker_data/__backups/") print("Backup nextcloud") cmnd = 'docker exec --user www-data nextcloud-app-1 php occ maintenance:mode --on' status, output = subprocess.getstatusoutput(cmnd) cmnd = f"docker exec nextcloud-db-1 sh -c 'exec mysqldump --single-transaction -h localhost -u nextcloud -p{PASSWORD} nextcloud' > /share/docker_data/__backups/nextcloudDB_{DATETIME}.sql" status, output = subprocess.getstatusoutput(cmnd) cmnd = "docker exec --user www-data nextcloud-app-1 php occ maintenance:mode --off" status, output = subprocess.getstatusoutput(cmnd) cmnd = f"zip -P {PASSWORD} nextcloudDB_{DATETIME}.sql.zip nextcloudDB_{DATETIME}.sql" status, output = subprocess.getstatusoutput(cmnd) os.remove(f"nextcloudDB_{DATETIME}.sql") print("Backup Bookstack") cmnd = f"docker exec bookstack-db-1 sh -c 'exec mysqldump --single-transaction -h localhost -u bookstack -p{PASSWORD} bookstackapp' > /share/docker_data/__backups/bookstack_{DATETIME}.sql" status, output = subprocess.getstatusoutput(cmnd) cmnd = f"zip -P {PASSWORD} bookstack_{DATETIME}.sql.zip bookstack_{DATETIME}.sql" status, output = subprocess.getstatusoutput(cmnd) os.remove(f"bookstack_{DATETIME}.sql") print("Backup Kestra") cmnd = f"docker exec kestra-postgres-1 sh -c 'pg_dump -h localhost -p 5432 -U kestra -d kestra' > /share/docker_data/__backups/kestra_{DATETIME}.sql" status, output = subprocess.getstatusoutput(cmnd) cmnd = f"zip -P {PASSWORD} kestra_{DATETIME}.sql.zip kestra_{DATETIME}.sql" status, output = subprocess.getstatusoutput(cmnd) os.remove(f"kestra_{DATETIME}.sql") print("Backup Authentik") cmnd = f"docker exec authentik-postgresql-1 sh -c 'pg_dump -h localhost -p 5432 -U authentik -d authentik' > /share/docker_data/__backups/authentik_{DATETIME}.sql" status, output = subprocess.getstatusoutput(cmnd) cmnd = f"zip -P {PASSWORD} authentik_{DATETIME}.sql.zip authentik_{DATETIME}.sql" status, output = subprocess.getstatusoutput(cmnd) os.remove(f"authentik_{DATETIME}.sql") print("Backup portainer") headers = { 'Content-Type': 'application/json; charset=utf-8', 'x-api-key':'ptr_gfwpbP4AUDhZ4uoPmSfNUGqZq+gescoele8reP/l/GU=', } json_data = { 'password': PASSWORD, } response = requests.post('https://portainer.sectorq.eu/api/backup', headers=headers, json=json_data, verify=True) # Note: json_data will not be serialized by requests # exactly as it was in the original request. #data = '{ "password": "" }' #response = requests.post('https://portainer.sectorq.eu/api/backup', headers=headers, data=data, verify=False) with open(f'/share/docker_data/__backups/portainer_snapshot_{DATETIME}.tar.gz', 'wb') as f: f.write(response.content) os.chdir("/share/docker_data/__backups/") print("Remove Old Files") cmnd = f" find ./ -maxdepth 1 -type f -mtime +15 -exec rm -f {{}} \\;" status, output = subprocess.getstatusoutput(cmnd)