#!/bin/bash set -e REDIS_DATA_DIR="${REDIS_DATA_DIR:-/data/redis}" SKILLS_DIR="${SKILLS_DIR:-/skills}" # Idempotent Redis installation install_redis() { if command -v redis-server &>/dev/null; then echo "Redis already installed: $(redis-server --version)" return 0 fi echo "Installing Redis..." # Install dependencies apt-get update apt-get install -y curl gpg lsb-release # Add Redis repository curl -fsSL https://packages.redis.io/gpg | gpg --dearmor -o /usr/share/keyrings/redis-archive-keyring.gpg echo "deb [signed-by=/usr/share/keyrings/redis-archive-keyring.gpg] https://packages.redis.io/deb $(lsb_release -cs) main" > /etc/apt/sources.list.d/redis.list # Install Redis apt-get update apt-get install -y redis echo "Redis installed: $(redis-server --version)" } # Setup directories setup_dirs() { mkdir -p "$REDIS_DATA_DIR" chown -R redis:redis "$REDIS_DATA_DIR" 2>/dev/null || true chmod 755 "$REDIS_DATA_DIR" echo "Redis data directory: $REDIS_DATA_DIR" } # Configure Caddy if present configure_caddy() { local caddy_dir="$SKILLS_DIR/caddy" local redis_domain="${REDIS_DOMAIN:-}" local redis_port="${REDIS_PORT:-6379}" if [ ! -d "$caddy_dir" ]; then echo "Caddy not found - Redis will run standalone" return 0 fi if [ -z "$redis_domain" ]; then echo "REDIS_DOMAIN not set - skipping Caddy config" return 0 fi echo "Caddy detected - configuring reverse proxy..." local snippets_dir="$caddy_dir/snippets.d" mkdir -p "$snippets_dir" cat > "$snippets_dir/redis.caddy" << EOF # Auto-generated by redis skill # Note: Redis protocol is not HTTP - this is for Redis Insight or similar tools # $redis_domain { # reverse_proxy localhost:$redis_port # } EOF echo "Caddy snippet created (manual config needed for Redis)" } install_redis setup_dirs configure_caddy echo "Redis setup complete"