mirror of
https://github.com/mailcow/mailcow-dockerized.git
synced 2026-09-23 03:07:19 +00:00
migrate from redis to valkey
This commit is contained in:
@@ -213,9 +213,9 @@ if ! ssh -o StrictHostKeyChecking=no \
|
||||
>&2 echo -e "\e[31m[ERR]\e[0m - Could not create networks, volumes and containers on remote"
|
||||
fi
|
||||
|
||||
# Trigger a Redis save for a consistent Redis copy
|
||||
# Trigger a Valkey save for a consistent Valkey copy
|
||||
echo -ne "\033[1mRunning redis-cli save... \033[0m"
|
||||
docker exec $(docker ps -qf name=redis-mailcow) redis-cli -a ${REDISPASS} --no-auth-warning save
|
||||
docker exec $(docker ps -qf name=valkey-mailcow) redis-cli -a ${VALKEYPASS} --no-auth-warning save
|
||||
|
||||
# Syncing volumes related to compose project
|
||||
# Same here: make sure destination exists
|
||||
|
||||
@@ -11,8 +11,8 @@ if [[ ! ${1} =~ (backup|restore) ]]; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ ${1} == "backup" && ! ${2} =~ (crypt|vmail|redis|rspamd|postfix|mysql|all|--delete-days) ]]; then
|
||||
echo "Second parameter needs to be 'vmail', 'crypt', 'redis', 'rspamd', 'postfix', 'mysql', 'all' or '--delete-days'"
|
||||
if [[ ${1} == "backup" && ! ${2} =~ (crypt|vmail|valkey|rspamd|postfix|mysql|all|--delete-days) ]]; then
|
||||
echo "Second parameter needs to be 'vmail', 'crypt', 'valkey', 'rspamd', 'postfix', 'mysql', 'all' or '--delete-days'"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
@@ -118,12 +118,12 @@ function backup() {
|
||||
-v $(docker volume ls -qf name=^${CMPS_PRJ}_crypt-vol-1$):/crypt:ro,z \
|
||||
${DEBIAN_DOCKER_IMAGE} /bin/tar --warning='no-file-ignored' --use-compress-program="pigz --rsyncable -p ${THREADS}" -Pcvpf /backup/backup_crypt.tar.gz /crypt
|
||||
;;&
|
||||
redis|all)
|
||||
docker exec $(docker ps -qf name=redis-mailcow) redis-cli -a ${REDISPASS} --no-auth-warning save
|
||||
valkey|all)
|
||||
docker exec $(docker ps -qf name=valkey-mailcow) redis-cli -a ${VALKEYPASS} --no-auth-warning save
|
||||
docker run --name mailcow-backup --rm \
|
||||
-v ${BACKUP_LOCATION}/mailcow-${DATE}:/backup:z \
|
||||
-v $(docker volume ls -qf name=^${CMPS_PRJ}_redis-vol-1$):/redis:ro,z \
|
||||
${DEBIAN_DOCKER_IMAGE} /bin/tar --warning='no-file-ignored' --use-compress-program="pigz --rsyncable -p ${THREADS}" -Pcvpf /backup/backup_redis.tar.gz /redis
|
||||
-v $(docker volume ls -qf name=^${CMPS_PRJ}_valkey-vol-1$):/valkey:ro,z \
|
||||
${DEBIAN_DOCKER_IMAGE} /bin/tar --warning='no-file-ignored' --use-compress-program="pigz --rsyncable -p ${THREADS}" -Pcvpf /backup/backup_valkey.tar.gz /valkey
|
||||
;;&
|
||||
rspamd|all)
|
||||
docker run --name mailcow-backup --rm \
|
||||
@@ -216,13 +216,13 @@ function restore() {
|
||||
echo "OK, skipped."
|
||||
fi
|
||||
;;
|
||||
redis)
|
||||
docker stop $(docker ps -qf name=redis-mailcow)
|
||||
valkey)
|
||||
docker stop $(docker ps -qf name=valkey-mailcow)
|
||||
docker run -i --name mailcow-backup --rm \
|
||||
-v ${RESTORE_LOCATION}:/backup:z \
|
||||
-v $(docker volume ls -qf name=^${CMPS_PRJ}_redis-vol-1$):/redis:z \
|
||||
${DEBIAN_DOCKER_IMAGE} /bin/tar --use-compress-program="pigz -d -p ${THREADS}" -Pxvf /backup/backup_redis.tar.gz
|
||||
docker start $(docker ps -aqf name=redis-mailcow)
|
||||
-v $(docker volume ls -qf name=^${CMPS_PRJ}_valkey-vol-1$):/valkey:z \
|
||||
${DEBIAN_DOCKER_IMAGE} /bin/tar --use-compress-program="pigz -d -p ${THREADS}" -Pxvf /backup/backup_valkey.tar.gz
|
||||
docker start $(docker ps -aqf name=valkey-mailcow)
|
||||
;;
|
||||
crypt)
|
||||
docker stop $(docker ps -qf name=dovecot-mailcow)
|
||||
@@ -357,7 +357,7 @@ elif [[ ${1} == "restore" ]]; then
|
||||
echo
|
||||
declare -A FILE_SELECTION
|
||||
RESTORE_POINT="${FOLDER_SELECTION[${input_sel}]}"
|
||||
if [[ -z $(find "${FOLDER_SELECTION[${input_sel}]}" -maxdepth 1 \( -type d -o -type f \) -regex ".*\(redis\|rspamd\|mariadb\|mysql\|crypt\|vmail\|postfix\).*") ]]; then
|
||||
if [[ -z $(find "${FOLDER_SELECTION[${input_sel}]}" -maxdepth 1 \( -type d -o -type f \) -regex ".*\(valkey\|rspamd\|mariadb\|mysql\|crypt\|vmail\|postfix\).*") ]]; then
|
||||
echo "No datasets found"
|
||||
exit 1
|
||||
fi
|
||||
@@ -374,9 +374,9 @@ elif [[ ${1} == "restore" ]]; then
|
||||
echo "[ ${i} ] - Crypt data"
|
||||
FILE_SELECTION[${i}]="crypt"
|
||||
((i++))
|
||||
elif [[ ${file} =~ redis ]]; then
|
||||
echo "[ ${i} ] - Redis DB"
|
||||
FILE_SELECTION[${i}]="redis"
|
||||
elif [[ ${file} =~ valkey ]]; then
|
||||
echo "[ ${i} ] - Valkey DB"
|
||||
FILE_SELECTION[${i}]="valkey"
|
||||
((i++))
|
||||
elif [[ ${file} =~ rspamd ]]; then
|
||||
if [[ $(find "${FOLDER_SELECTION[${input_sel}]}" \( -name '*x86*' -o -name '*aarch*' \) -exec basename {} \; | sed 's/^\.//' | sed 's/^\.//') == "" ]]; then
|
||||
|
||||
@@ -4,26 +4,26 @@ read -r -p "Are you sure you want to reset learned hashes from Rspamd (fuzzy, ba
|
||||
response=${response,,} # tolower
|
||||
if [[ "$response" =~ ^(yes|y)$ ]]; then
|
||||
echo "Working, please wait..."
|
||||
REDIS_ID=$(docker ps -qf name=redis-mailcow)
|
||||
VALKEY_ID=$(docker ps -qf name=valkey-mailcow)
|
||||
RSPAMD_ID=$(docker ps -qf name=rspamd-mailcow)
|
||||
|
||||
if [ -z ${REDIS_ID} ] || [ -z ${RSPAMD_ID} ]; then
|
||||
echo "Cannot determine Redis or Rspamd container ID"
|
||||
if [ -z ${VALKEY_ID} ] || [ -z ${RSPAMD_ID} ]; then
|
||||
echo "Cannot determine Valkey or Rspamd container ID"
|
||||
exit 1
|
||||
else
|
||||
echo "Stopping Rspamd container"
|
||||
docker stop ${RSPAMD_ID}
|
||||
echo "LUA will return nil when it succeeds or print a warning/error when it fails."
|
||||
echo "Deleting all RS* keys - if any"
|
||||
docker exec -it ${REDIS_ID} redis-cli -a ${REDISPASS} --no-auth-warning EVAL "for _,k in ipairs(redis.call('keys', ARGV[1])) do redis.call('del', k) end" 0 'RS*'
|
||||
docker exec -it ${VALKEY_ID} redis-cli -a ${VALKEYPASS} --no-auth-warning EVAL "for _,k in ipairs(redis.call('keys', ARGV[1])) do redis.call('del', k) end" 0 'RS*'
|
||||
echo "Deleting all BAYES* keys - if any"
|
||||
docker exec -it ${REDIS_ID} redis-cli -a ${REDISPASS} --no-auth-warning EVAL "for _,k in ipairs(redis.call('keys', ARGV[1])) do redis.call('del', k) end" 0 'BAYES*'
|
||||
docker exec -it ${VALKEY_ID} redis-cli -a ${VALKEYPASS} --no-auth-warning EVAL "for _,k in ipairs(redis.call('keys', ARGV[1])) do redis.call('del', k) end" 0 'BAYES*'
|
||||
echo "Deleting all learned* keys - if any"
|
||||
docker exec -it ${REDIS_ID} redis-cli -a ${REDISPASS} --no-auth-warning EVAL "for _,k in ipairs(redis.call('keys', ARGV[1])) do redis.call('del', k) end" 0 'learned*'
|
||||
docker exec -it ${VALKEY_ID} redis-cli -a ${VALKEYPASS} --no-auth-warning EVAL "for _,k in ipairs(redis.call('keys', ARGV[1])) do redis.call('del', k) end" 0 'learned*'
|
||||
echo "Deleting all fuzzy* keys - if any"
|
||||
docker exec -it ${REDIS_ID} redis-cli -a ${REDISPASS} --no-auth-warning EVAL "for _,k in ipairs(redis.call('keys', ARGV[1])) do redis.call('del', k) end" 0 'fuzzy*'
|
||||
docker exec -it ${VALKEY_ID} redis-cli -a ${VALKEYPASS} --no-auth-warning EVAL "for _,k in ipairs(redis.call('keys', ARGV[1])) do redis.call('del', k) end" 0 'fuzzy*'
|
||||
echo "Deleting all tRFANN* keys - if any"
|
||||
docker exec -it ${REDIS_ID} redis-cli -a ${REDISPASS} --no-auth-warning EVAL "for _,k in ipairs(redis.call('keys', ARGV[1])) do redis.call('del', k) end" 0 'tRFANN*'
|
||||
docker exec -it ${VALKEY_ID} redis-cli -a ${VALKEYPASS} --no-auth-warning EVAL "for _,k in ipairs(redis.call('keys', ARGV[1])) do redis.call('del', k) end" 0 'tRFANN*'
|
||||
echo "Starting Rspamd container"
|
||||
docker start ${RSPAMD_ID}
|
||||
fi
|
||||
|
||||
Reference in New Issue
Block a user