Skip to content

Instantly share code, notes, and snippets.

@tgran2028
Last active December 10, 2023 14:38
Show Gist options
  • Save tgran2028/095e2e833fed99ca25645da2a8182523 to your computer and use it in GitHub Desktop.
Save tgran2028/095e2e833fed99ca25645da2a8182523 to your computer and use it in GitHub Desktop.
Run redis-stack docker container
#!/usr/bin/bash
################### set env vars ###################
# changedir to script parent
cd "$(dirname "$0")" || exit
# container name
REDIS_STACK_CONTAINER_NAME="redis-stack"
# local dir for persistent data & config
REDIS_STACK_DIR="$HOME/.local/redis/redis-stack/"
# data dir
REDIS_STACK_DATA_DIR="$REDIS_STACK_DIR/data/"
# conf file
REDIS_STACK_CONF="$REDIS_STACK_DIR/etc/redis-stack.conf"
# db port
REDIS_STACK_PORT=5555
# redis insight port
REDIS_INSIGHT_PORT=9999
# docker network
REDIS_DOCKER_NETWORK="redis-net"
env_vars=(
["REDIS_STACK_CONTAINER_NAME"]="$REDIS_STACK_CONTAINER_NAME"
["REDIS_STACK_DIR"]="$REDIS_STACK_DIR"
["REDIS_STACK_DATA_DIR"]="$REDIS_STACK_DATA_DIR"
["REDIS_STACK_CONF"]="$REDIS_STACK_CONF"
["REDIS_STACK_PORT"]="$REDIS_STACK_PORT"
["REDIS_INSIGHT_PORT"]="$REDIS_INSIGHT_PORT"
["REDIS_DOCKER_NETWORK"]="$REDIS_DOCKER_NETWORK"
)
# create config.json
echo '{}' > config.json
for env_var in "${!env_vars[@]}"; do
if [[ -z "${!env_var}" ]]; then
echo "ERROR: $env_var is not set"
exit 1
fi
jq ". + {$env_var: \"${env_vars[$env_var]}\"}" config.json > tmp.json && mv tmp.json config.json
done
################### create local dirs ###################
# parent to data dir
mkdir -p "$(dirname "$REDIS_STACK_DATA_DIR")"
# parent to conf file
mkdir -p "$(dirname "$REDIS_STACK_CONF")"
################### build docker image ###################
# create redis-net network if not exists
docker network create redis-net 2> /dev/null || true
# check if container exists
if [[ "$(docker ps -aq -f name=$REDIS_STACK_CONTAINER_NAME)" ]]; then
# if container exists, prompt user for input
read -p "Container $REDIS_STACK_CONTAINER_NAME already exists. Do you want to delete it? [y/N] " -n 1 -r
echo # move to a new line
if [[ $REPLY =~ ^[Yy]$ ]]; then
# if user input is yes, delete container
docker stop $REDIS_STACK_CONTAINER_NAME > /dev/null 2>&1
docker container rm -f $REDIS_STACK_CONTAINER_NAME
else
# if user input is no, exit
exit 1
fi
fi
# build docker image
docker run \
-d \
--name redis-stack \
-v $REDIS_STACK_DATA_DIR:/data \
-v $REDIS_STACK_CONF:/redis-stack.conf \
-p 127.0.0.1:${REDIS_STACK_PORT}:6379 \
-p 127.0.0.1:${REDIS_INSIGHT_PORT}:8001 \
--privileged \
--restart always \
--network $REDIS_DOCKER_NETWORK \
-e AWS_ACCESS_KEY="$(aws configure get aws_access_key_id)" \
-e AWS_SECRET_KEY="$(aws configure get aws_secret_access_key)" \
-e DB_SYNC='true' \
redis/redis-stack:latest
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment