redis-to-valkey.sh 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. #!/bin/bash
  2. SCRIPT_DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
  3. source "${SCRIPT_DIR}/../mailcow.conf"
  4. VOLUME="${COMPOSE_PROJECT_NAME}_redis-vol-1"
  5. if ! docker volume inspect "$VOLUME" &>/dev/null; then
  6. echo "Error: Docker volume '$VOLUME' does not exist. Nothing to migrate."
  7. exit 1
  8. fi
  9. read -p "Do you want to proceed with the migration of your old redis data to valkey? (y/n) " CONFIRM
  10. if [[ ! "$CONFIRM" =~ ^([yY][eE][sS]|[yY])+$ ]]; then
  11. echo "Migration aborted."
  12. exit 0
  13. fi
  14. # Run the old Redis container
  15. docker run -d --name redis-old-mailcow \
  16. --restart always \
  17. --network ${COMPOSE_PROJECT_NAME}_mailcow-network \
  18. --hostname redis-old \
  19. --volume ${VOLUME}:/data/ \
  20. --volume ${SCRIPT_DIR}/../data/conf/valkey/valkey-conf.sh:/valkey-conf.sh:z \
  21. --entrypoint "/bin/sh" \
  22. -e VALKEYPASS="${VALKEYPASS}" \
  23. redis:7.4.2-alpine -c "/valkey-conf.sh && redis-server /valkey.conf"
  24. # Wait for old Redis to be ready
  25. echo "Waiting for redis-old-mailcow to be ready..."
  26. until docker exec redis-old-mailcow redis-cli -a "$VALKEYPASS" ping | grep -q "PONG"; do
  27. echo "Redis not ready yet..."
  28. sleep 2
  29. done
  30. echo "redis-old-mailcow is ready!"
  31. # Run the migrate container
  32. docker run --rm --name valkeymigrator-mailcow \
  33. --network ${COMPOSE_PROJECT_NAME}_mailcow-network \
  34. -e VALKEYPASS="${VALKEYPASS}" \
  35. mailcow/valkeymigrator:0.1
  36. echo "Migration completed!"
  37. docker stop redis-old-mailcow
  38. docker rm redis-old-mailcow
  39. read -p "Do you want to delete the old Redis volume? (y/n) " CONFIRM
  40. if [[ "$CONFIRM" =~ ^([yY][eE][sS]|[yY])+$ ]]; then
  41. docker volume rm "$VOLUME"
  42. echo "Docker volume '$VOLUME' has been deleted."
  43. fi