#!/bin/bash # === Configuration === BUCKET_NAME="ibc-db-backup" ENDPOINT_URL="https://s3.eu-central-3.ionoscloud.com" LOCAL_DOWNLOAD_DIR="./" # Where to save the file DATABASE_NAME=database # === Check if a custom file is given as a command line argument === if [ $# -eq 1 ]; then CUSTOM_FILE="$1" echo "๐Ÿ” Using custom file: $CUSTOM_FILE" # Check if file exists locally if [ ! -f "$CUSTOM_FILE" ]; then # Check if the file exists on the remote if ! aws s3api head-object --bucket "$BUCKET_NAME" --key "$CUSTOM_FILE" --endpoint-url "$ENDPOINT_URL" > /dev/null 2>&1; then echo "โŒ Custom file does not exist in S3 bucket or locally." exit 1 else echo "๐Ÿ“ฅ Downloading $CUSTOM_FILE from S3" aws s3 cp "s3://$BUCKET_NAME/$CUSTOM_FILE" "$LOCAL_DOWNLOAD_DIR" \ --endpoint-url "$ENDPOINT_URL" fi fi LATEST_FILE="$CUSTOM_FILE" FILENAME=$(basename "$LATEST_FILE") if [[ "$FILENAME" == *.br ]]; then echo "๐Ÿ—œ๏ธ Detected compressed file: $FILENAME" # Remove the .br suffix for the SQL file SQL_FILE="${FILENAME%.br}" # Remove .br suffix brotli -d "$FILENAME" else SQL_FILE=$FILENAME fi else echo "๐Ÿ” No custom file provided, searching for latest .sql.br file in S3" # === Get latest file from IONOS S3 bucket === LATEST_FILE=$(aws s3api list-objects-v2 \ --bucket "$BUCKET_NAME" \ --prefix "data-dump" \ --endpoint-url "$ENDPOINT_URL" \ --query 'Contents | sort_by(@, &LastModified) | [-1].Key' \ --output text) # === Check if file was found === if [ "$LATEST_FILE" == "None" ] || [ -z "$LATEST_FILE" ]; then echo "โŒ No matching .sql.br file found." exit 1 fi echo "๐Ÿ” Latest file found: $LATEST_FILE" FILENAME=$(basename "$LATEST_FILE") SQL_FILE="${FILENAME%.br}" # Remove .br suffix echo "๐Ÿ“ฅ Downloading $LATEST_FILE" aws s3 cp "s3://$BUCKET_NAME/$LATEST_FILE" "$LOCAL_DOWNLOAD_DIR" \ --endpoint-url "$ENDPOINT_URL" brotli -d "$FILENAME" echo "๐Ÿ—œ๏ธ Decompressed to $SQL_FILE" fi # === Import into Postgres inside Docker === echo "๐Ÿ˜ Importing into PostgreSQL ($DATABASE_NAME:main)" docker exec -i "$DATABASE_NAME" env PGPASSWORD="hHMP8cd^N3SnzGRR" \ psql -v ON_ERROR_STOP=0 -U main -d main < "$SQL_FILE" echo "โœ… Import complete." # === Optional: Clean up # If custom file was provided, do not delete it if [ -z "$CUSTOM_FILE" ]; then echo "๐Ÿงน Cleaning up downloaded files..." rm "$FILENAME" "$SQL_FILE" fi