Compare commits

...

2 commits

Author SHA1 Message Date
Dejan R. ba5b3e4dad added uninstall script 2025-12-01 07:54:01 +00:00
Dejan R. c3e26bd98c added fix for docker-compose.yml 2025-11-30 17:45:48 +00:00
2 changed files with 114 additions and 11 deletions

View file

@ -34,34 +34,53 @@ services:
# Traefik Reverse Proxy Labels # Traefik Reverse Proxy Labels
# ----------------------------- # -----------------------------
labels: labels:
# Enable Traefik # ──────────────────────────────
# Enable Traefik for this container
# ──────────────────────────────
- "traefik.enable=true" - "traefik.enable=true"
# HTTP → HTTPS redirect (recommended) # ──────────────────────────────
# HTTP → HTTPS redirect router
# ──────────────────────────────
- "traefik.http.routers.mealie-http.entrypoints=web" - "traefik.http.routers.mealie-http.entrypoints=web"
- "traefik.http.routers.mealie-http.rule=Host(`mealie.rozic-dev.com`)" - "traefik.http.routers.mealie-http.rule=Host(`mealie.rozic-dev.com`)"
- "traefik.http.routers.mealie-http.middlewares=redirect-to-https" - "traefik.http.routers.mealie-http.middlewares=mealie-redirect"
- "traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https"
- "traefik.http.middlewares.redirect-to-https.redirectscheme.permanent=true"
# HTTPS router # ──────────────────────────────
# HTTPS router (the real one)
# ──────────────────────────────
- "traefik.http.routers.mealie.entrypoints=websecure" - "traefik.http.routers.mealie.entrypoints=websecure"
- "traefik.http.routers.mealie.rule=Host(`mealie.rozic-dev.com`)" - "traefik.http.routers.mealie.rule=Host(`mealie.rozic-dev.com`)"
- "traefik.http.routers.mealie.tls.certresolver=letsencrypt"
- "traefik.http.routers.mealie.tls=true" - "traefik.http.routers.mealie.tls=true"
- "traefik.http.routers.mealie.tls.certresolver=letsencrypt" # ← change only if your resolver has a different name
- "traefik.http.routers.mealie.middlewares=mealie-chain"
# Service port # ──────────────────────────────
# Service (where Traefik forwards the traffic)
# ──────────────────────────────
- "traefik.http.services.mealie.loadbalancer.server.port=9000" - "traefik.http.services.mealie.loadbalancer.server.port=9000"
# Security headers middleware (improved) # ──────────────────────────────
- "traefik.http.middlewares.mealie-security.headers.customResponseHeaders.X-Robots-Tag=none" # Middleware: redirect HTTP → HTTPS
# ──────────────────────────────
- "traefik.http.middlewares.mealie-redirect.redirectscheme.scheme=https"
- "traefik.http.middlewares.mealie-redirect.redirectscheme.permanent=true"
# ──────────────────────────────
# Middleware: security headers
# ──────────────────────────────
- "traefik.http.middlewares.mealie-security.headers.stsSeconds=63072000" - "traefik.http.middlewares.mealie-security.headers.stsSeconds=63072000"
- "traefik.http.middlewares.mealie-security.headers.stsIncludeSubdomains=true" - "traefik.http.middlewares.mealie-security.headers.stsIncludeSubdomains=true"
- "traefik.http.middlewares.mealie-security.headers.stsPreload=true" - "traefik.http.middlewares.mealie-security.headers.stsPreload=true"
- "traefik.http.middlewares.mealie-security.headers.contentTypeNosniff=true" - "traefik.http.middlewares.mealie-security.headers.contentTypeNosniff=true"
- "traefik.http.middlewares.mealie-security.headers.browserXssFilter=true" - "traefik.http.middlewares.mealie-security.headers.browserXssFilter=true"
- "traefik.http.middlewares.mealie-security.headers.referrerPolicy=same-origin" - "traefik.http.middlewares.mealie-security.headers.referrerPolicy=same-origin"
- "traefik.http.routers.mealie.middlewares=mealie-security" - "traefik.http.middlewares.mealie-security.headers.customResponseHeaders.X-Robots-Tag=none"
# ──────────────────────────────
# Chain: redirect + security headers (applied only to HTTPS router)
# ──────────────────────────────
- "traefik.http.middlewares.mealie-chain.chain.middlewares=mealie-security"
deploy: deploy:
resources: resources:
limits: limits:
@ -74,6 +93,7 @@ services:
restart: always restart: always
networks: networks:
- internal - internal
- traefik
environment: environment:
POSTGRES_DB: mealie POSTGRES_DB: mealie
POSTGRES_USER: mealie POSTGRES_USER: mealie

83
uninstall.sh Executable file
View file

@ -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."