Skip to content

Instantly share code, notes, and snippets.

@GabbasovDinar
Created January 5, 2025 08:43
Show Gist options
  • Save GabbasovDinar/2401dff1455c23b3c16338301c4505a0 to your computer and use it in GitHub Desktop.
Save GabbasovDinar/2401dff1455c23b3c16338301c4505a0 to your computer and use it in GitHub Desktop.
Odoo Database Backup Shell Script
#!/bin/bash
set -e
# Load environment variables
if [ -f .env ]; then
export $(grep -v '^#' .env | xargs)
fi
# Parameters
DB_HOST=${DB_HOST:-"localhost"}
DB_PORT=${DB_PORT:-5432}
DB_USER=${DB_USER:-"odoo"}
DB_PASSWORD=${DB_PASSWORD:-"your_db_password"}
DB_NAME=${DB_NAME:-"odoo"}
BACKUP_DIR="./backups"
ODOO_CONTAINER_NAME=${ODOO_CONTAINER_NAME:-"odoo"} # Container name of Odoo
FILESTORE_PATH="/var/lib/odoo/filestore/$DB_NAME" # Path to filestore in container
# Ensure backup directory exists
mkdir -p "$BACKUP_DIR"
# Generate timestamped archive name
NOW=$(date '+%Y%m%d_%H%M%S')
BACKUP_ARCHIVE="${BACKUP_DIR}/${DB_NAME}_backup_${NOW}.tar.gz"
# Temporary directory for storing intermediate files
TMP_DIR=$(mktemp -d)
# Backup database
echo "Starting database backup..."
DB_DUMP_FILE="${TMP_DIR}/${DB_NAME}.dump"
PGPASSWORD="$DB_PASSWORD" pg_dump -h "$DB_HOST" -p "$DB_PORT" -U "$DB_USER" -Fc -f "$DB_DUMP_FILE" "$DB_NAME"
echo "Database dump created: $DB_DUMP_FILE"
# Backup filestore
if docker ps --format '{{.Names}}' | grep -q "^${ODOO_CONTAINER_NAME}$"; then
echo "Starting filestore backup from container: $ODOO_CONTAINER_NAME..."
FILESTORE_BACKUP_DIR="${TMP_DIR}/filestore"
mkdir -p "$FILESTORE_BACKUP_DIR"
docker exec "$ODOO_CONTAINER_NAME" tar -cf - "$FILESTORE_PATH" | tar -xf - -C "$FILESTORE_BACKUP_DIR"
echo "Filestore backup completed."
else
echo "Warning: Odoo container '$ODOO_CONTAINER_NAME' is not running. Skipping filestore backup."
fi
# Create a combined archive
echo "Creating combined backup archive: $BACKUP_ARCHIVE..."
tar -czf "$BACKUP_ARCHIVE" -C "$TMP_DIR" .
echo "Backup archive created: $BACKUP_ARCHIVE"
# Cleanup temporary files
rm -rf "$TMP_DIR"
echo "Temporary files cleaned up."
echo "Backup process completed successfully."
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment