diff --git a/cron/tasks/backup.js b/cron/tasks/backup.js index 64337a4..af38664 100644 --- a/cron/tasks/backup.js +++ b/cron/tasks/backup.js @@ -13,10 +13,10 @@ const bot = new TelegramBot(TOKEN, { polling: false }); // Настройки S3 / R2 const s3Client = new S3Client({ region: "auto", - endpoint: process.env.S3_ENDPOINT, // Напр: https://.r2.cloudflarestorage.com + endpoint: process.env.S3_ENDPOINT, credentials: { - accessKeyId: process.env.S3_ACCESS_KEY_ID, - secretAccessKey: process.env.S3_SECRET_ACCESS_KEY, + accessKeyId: process.env.S3_ACCESS_KEY_ID || "", + secretAccessKey: process.env.S3_SECRET_ACCESS_KEY || "" }, }); @@ -30,17 +30,18 @@ class Backup { const fileName = `backup_${new Date().toISOString().replace(/[:.]/g, "-")}.sqlite`; + const fileBuffer = fs.readFileSync(FILE); + // 1. Отправка в Telegram - await bot.sendDocument(CHAT_ID, fs.createReadStream(FILE), { + await bot.sendDocument(CHAT_ID, fileBuffer, { caption: `📦 Резервна копія бази даних`, }); console.log("✅ Telegram: успішно надіслано"); - // 2. Отправка в S3 (R2) - const fileBuffer = fs.readFileSync(FILE); + // 2. Отправка в S3 (R2) const uploadParams = { Bucket: process.env.S3_BUCKET_NAME, - Key: `sheep-service.com/database/${fileName}`, // Путь внутри бакета + Key: `sheep-service.com/database/${fileName}`, Body: fileBuffer, ContentType: "application/x-sqlite3", }; diff --git a/docker-compose.yml b/docker-compose.yml index 57e7d7c..9e874e1 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -96,6 +96,11 @@ services: - VAPID_PUBLIC_KEY=${VAPID_PUBLIC_KEY} - VAPID_PRIVATE_KEY=${VAPID_PRIVATE_KEY} - DOMAIN=${DOMAIN} + + - S3_ENDPOINT=${S3_ENDPOINT} + - S3_ACCESS_KEY_ID=${S3_ACCESS_KEY_ID} + - S3_SECRET_ACCESS_KEY=${S3_SECRET_ACCESS_KEY} + - S3_BUCKET_NAME=${S3_BUCKET_NAME} networks: - network