Initial redis skill implementation

This commit is contained in:
Azat
2026-02-02 23:44:22 +01:00
commit 007c151a1c
3 changed files with 259 additions and 0 deletions

76
scripts/autorun.sh Normal file
View File

@@ -0,0 +1,76 @@
#!/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"

64
scripts/run.sh Normal file
View File

@@ -0,0 +1,64 @@
#!/bin/bash
set -e
REDIS_PORT="${REDIS_PORT:-6379}"
REDIS_PASSWORD="${REDIS_PASSWORD:-}"
REDIS_MAXMEMORY="${REDIS_MAXMEMORY:-100mb}"
REDIS_MAXMEMORY_POLICY="${REDIS_MAXMEMORY_POLICY:-allkeys-lru}"
REDIS_DATA_DIR="${REDIS_DATA_DIR:-/data/redis}"
REDIS_APPENDONLY="${REDIS_APPENDONLY:-yes}"
REDIS_SAVE="${REDIS_SAVE:-900 1 300 10 60 10000}"
# Build REDIS_URL
if [ -n "$REDIS_PASSWORD" ]; then
export REDIS_URL="redis://:${REDIS_PASSWORD}@localhost:${REDIS_PORT}"
else
export REDIS_URL="redis://localhost:${REDIS_PORT}"
fi
echo "REDIS_URL=$REDIS_URL"
# Write to shared env file for other skills
mkdir -p /run/vibestack
echo "REDIS_URL=$REDIS_URL" > /run/vibestack/redis.env
# Build command arguments
args=()
args+=("--port" "$REDIS_PORT")
args+=("--dir" "$REDIS_DATA_DIR")
args+=("--maxmemory" "$REDIS_MAXMEMORY")
args+=("--maxmemory-policy" "$REDIS_MAXMEMORY_POLICY")
args+=("--appendonly" "$REDIS_APPENDONLY")
# Add authentication if set
if [ -n "$REDIS_PASSWORD" ]; then
args+=("--requirepass" "$REDIS_PASSWORD")
fi
# Configure RDB persistence
# REDIS_SAVE format: "seconds changes [seconds changes ...]"
if [ -n "$REDIS_SAVE" ]; then
# Parse save intervals (e.g., "900 1 300 10 60 10000")
read -ra save_args <<< "$REDIS_SAVE"
for ((i=0; i<${#save_args[@]}; i+=2)); do
if [ $((i+1)) -lt ${#save_args[@]} ]; then
args+=("--save" "${save_args[i]} ${save_args[i+1]}")
fi
done
fi
# Bind to all interfaces
args+=("--bind" "0.0.0.0")
# Enable protected mode only if no password
if [ -z "$REDIS_PASSWORD" ]; then
args+=("--protected-mode" "yes")
else
args+=("--protected-mode" "no")
fi
echo "Starting Redis on port $REDIS_PORT..."
echo "Max memory: $REDIS_MAXMEMORY"
echo "Eviction policy: $REDIS_MAXMEMORY_POLICY"
echo "Persistence: AOF=$REDIS_APPENDONLY"
exec redis-server "${args[@]}"