This commit is contained in:
ilkeral
2025-07-21 13:49:36 +03:00
commit 342f1314c7
57 changed files with 9297 additions and 0 deletions

67
ssh_manager/2backup.py Normal file
View File

@ -0,0 +1,67 @@
import os
import zipfile
from datetime import datetime
from config.settings import BASE_DIR
import boto3
import botocore
# Configuration for Vultr S3 storage
script_klasoru = BASE_DIR
haric_dosya_uzantilari = ['.zip']
excluded_folders = ['venv', 'yedek', '.idea']
hostname = "ams1.vultrobjects.com"
secret_key = "Ec1pq3OQAObFLOQrfAVqJKhDAk4BkT7OqgYszlef"
access_key = "KQAOMJ8CQ8HP4CY23YPK"
def zip_klasor(ziplenecek_klasor, hedef_zip_adi, haric_klasorler=[], haric_dosya_uzantilari=[]):
"""Zip the target folder excluding specified folders and file extensions."""
with zipfile.ZipFile(hedef_zip_adi, 'w', zipfile.ZIP_DEFLATED) as zipf:
for klasor_yolu, _, dosya_listesi in os.walk(ziplenecek_klasor):
if not any(k in klasor_yolu for k in haric_klasorler):
for dosya in dosya_listesi:
dosya_yolu = os.path.join(klasor_yolu, dosya)
if not any(dosya_yolu.endswith(ext) for ext in haric_dosya_uzantilari):
zipf.write(dosya_yolu, os.path.relpath(dosya_yolu, ziplenecek_klasor))
def job(folder_name):
"""Create a zip backup and upload it to Vultr S3."""
session = boto3.session.Session()
client = session.client('s3', region_name='ams1',
endpoint_url=f'https://{hostname}',
aws_access_key_id=access_key,
aws_secret_access_key=secret_key,
config=botocore.client.Config(signature_version='s3v4'))
output_zip = os.path.join(os.getcwd(), f"{folder_name}.zip")
zip_klasor(script_klasoru, output_zip, excluded_folders, haric_dosya_uzantilari)
try:
# Ensure the bucket exists
try:
client.head_bucket(Bucket=folder_name)
print(f"Bucket already exists: {folder_name}")
except botocore.exceptions.ClientError as e:
if e.response['Error']['Code'] == '404':
print(f"Bucket not found, creating: {folder_name}")
client.create_bucket(Bucket=folder_name)
# Upload the file to S3 using boto3 (avoids XAmzContentSHA256Mismatch)
try:
client.upload_file(
output_zip,
folder_name,
os.path.basename(output_zip),
ExtraArgs={
'ACL': 'public-read',
'ContentType': 'application/zip'
}
)
print(f"File successfully uploaded: {output_zip}")
except Exception as e:
print(f"Upload error: {e}")
finally:
# Clean up local zip file
if os.path.exists(output_zip):
os.remove(output_zip)
print(f"Local zip file deleted: {output_zip}")