diff --git a/backup/backup.sh b/backup/backup.sh new file mode 100644 index 0000000..aa2bc49 --- /dev/null +++ b/backup/backup.sh @@ -0,0 +1,30 @@ +#!/bin/sh +echo 'started the backup' +# Telegram API URL +TELEGRAM_API="https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendDocument" + +# Generate timestamp +TIMESTAMP=$(date +%Y%m%d_%H%M%S) +BACKUP_FILE="backup_${TIMESTAMP}.sql" +ZIP_FILE="backup_${TIMESTAMP}.zip" + +# Create backup +pg_dump -h $PG_HOST -p $PG_PORT -U $PG_USER -d $PG_DATABASE > /backups/$BACKUP_FILE + +# Check if backup succeeded +if [ $? -ne 0 ]; then + echo "Backup failed!" + exit 1 +fi + +# Zip the backup +zip -j /backups/$ZIP_FILE /backups/$BACKUP_FILE + +# Send to Telegram +curl -F chat_id=$TELEGRAM_CHAT_ID \ + -F document=@/backups/$ZIP_FILE \ + $TELEGRAM_API + +# Cleanup (keep last 3 backups) +ls -t /backups/*.zip | tail -n +4 | xargs rm -f +ls -t /backups/*.sql | tail -n +4 | xargs rm -f \ No newline at end of file diff --git a/backup/crontab b/backup/crontab new file mode 100644 index 0000000..5c39650 --- /dev/null +++ b/backup/crontab @@ -0,0 +1 @@ +* * * * * /app/backup.sh \ No newline at end of file diff --git a/backup/dockerfile b/backup/dockerfile new file mode 100644 index 0000000..701f401 --- /dev/null +++ b/backup/dockerfile @@ -0,0 +1,6 @@ +FROM alpine:3.19 +RUN apk add --no-cache postgresql-client curl zip tzdata +WORKDIR /app +COPY backup.sh . +RUN chmod +x backup.sh +CMD ["/app/backup.sh"] \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml index 6a21034..980df82 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -42,11 +42,27 @@ services: networks: - default - + db-backup: + build: + context: ./backup + depends_on: + - db + environment: + - PG_HOST=db + - PG_PORT=5432 + - PG_DATABASE=hshop + - PG_USER=byeto + - PG_PASSWORD=vuhbyq-cypMu0-sirbon + - TELEGRAM_BOT_TOKEN='7068288679:AAGecMnyt9A6R78OQu8nQeISMK1LepX718g' + - TELEGRAM_CHAT_ID=1198382521 + volumes: + - backups:/backups + networks: + - default volumes: postgres_data: media_data: - + backups: networks: default: \ No newline at end of file