diff --git a/uninstall.sh b/uninstall.sh new file mode 100755 index 0000000..c2735e8 --- /dev/null +++ b/uninstall.sh @@ -0,0 +1,83 @@ +#!/bin/bash +# ---------------------------------------------------- +# Docker Compose Uninstall/Cleanup Script for Mealie +# ---------------------------------------------------- +# This script will stop and remove the Mealie services +# defined in the current directory's docker-compose.yml. +# It provides an option to permanently remove all associated data (volumes). + +# Function to display messages +log() { + echo "=> $1" +} + +# --- Step 1: Confirmation --- +log "WARNING: This script will stop and remove all running Docker containers and networks defined in the current docker-compose.yml file." +log " This typically includes 'mealie' and 'mealie-postgres'." +echo "" +read -r -p "Are you sure you want to proceed? (y/N): " response +case "$response" in + [yY][eE][sS]|[yY]) + ;; + *) + log "Operation cancelled by user." + exit 0 + ;; +esac + +# --- Step 2: Stop and Remove Containers/Networks --- +log "Stopping and removing containers and associated default networks..." +# `docker compose down` stops the containers and removes the network. +docker compose down + +if [ $? -ne 0 ]; then + log "ERROR: 'docker compose down' failed. Check your Docker daemon status." + exit 1 +fi +log "Containers and network successfully removed." + +# --- Step 3: Remove Volumes (Data) --- +echo "" +log "DATA REMOVAL STEP:" +log "If you wish to remove ALL persistent data (e.g., PostgreSQL data, Mealie uploads/settings)," +log "run the 'docker compose down' command again with the --volumes flag." +log "!!! WARNING: THIS IS PERMANENT DATA LOSS !!!" +echo "" +read -r -p "Do you want to PERMANENTLY remove all associated volumes/data (y/N)? " remove_volumes_response +case "$remove_volumes_response" in + [yY][eE][sS]|[yY]) + log "Removing volumes now..." + # The -v or --volumes flag removes named volumes declared in the 'volumes' section of the Compose file. + # This step is performed after the initial `down` to ensure the volumes aren't in use. + docker compose down --volumes + if [ $? -eq 0 ]; then + log "Volumes successfully removed. All Mealie data is gone." + else + log "ERROR: Volume removal failed." + fi + ;; + *) + log "Volumes retained. You can restart the application later with existing data." + ;; +esac + +# --- Step 4: Final Cleanup (Optional Images) --- +echo "" +log "OPTIONAL: Remove the downloaded Mealie and PostgreSQL images." +read -r -p "Do you want to remove the downloaded Docker images (y/N)? " remove_images_response +case "$remove_images_response" in + [yY][eE][sS]|[yY]) + log "Removing images..." + # Attempts to remove the images by their generated names, suppressing errors if they don't exist + docker rmi mealie_mealie mealie_postgres 2>/dev/null + log "Mealie and PostgreSQL images attempted for removal." + ;; + *) + log "Images retained." + ;; +esac + +rm -rf ./mealie-data/ +rm -rf ./mealie-pgdata/ + +log "UNINSTALL SCRIPT COMPLETE." \ No newline at end of file