← back to Wine Finder Next

scripts/setup-redis.sh

159 lines

#!/bin/bash

# Redis setup script for Wine Finder performance optimization

echo "Setting up Redis for Wine Finder..."

# Install Redis if not already installed
if ! command -v redis-server &> /dev/null; then
    echo "Installing Redis..."
    sudo apt-get update
    sudo apt-get install -y redis-server redis-tools
fi

# Configure Redis for optimal performance
echo "Configuring Redis..."
cat > /tmp/redis-wine-finder.conf << 'EOF'
# Redis configuration for Wine Finder

# Network
bind 127.0.0.1
port 6379
tcp-backlog 511
tcp-keepalive 300
timeout 0

# Memory management
maxmemory 256mb
maxmemory-policy allkeys-lru
maxmemory-samples 5

# Persistence
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename wine-finder.rdb
dir /var/lib/redis

# Logging
loglevel notice
logfile /var/log/redis/wine-finder.log

# Performance
databases 16
hz 10
lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
replica-lazy-flush no

# Slow log
slowlog-log-slower-than 10000
slowlog-max-len 128

# Event notification
notify-keyspace-events ""

# Advanced config
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-size -2
list-compress-depth 0
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit replica 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60

# Security
requirepass WineFinder2025SecurePass
EOF

# Backup existing config
if [ -f /etc/redis/redis.conf ]; then
    sudo cp /etc/redis/redis.conf /etc/redis/redis.conf.backup
fi

# Apply new configuration
sudo cp /tmp/redis-wine-finder.conf /etc/redis/redis-wine-finder.conf

# Create systemd service for Wine Finder Redis instance
cat > /tmp/redis-wine-finder.service << 'EOF'
[Unit]
Description=Redis In-Memory Data Store for Wine Finder
After=network.target

[Service]
Type=notify
ExecStart=/usr/bin/redis-server /etc/redis/redis-wine-finder.conf --supervised systemd
ExecStop=/usr/bin/redis-cli -p 6379 shutdown
Restart=always
RestartSec=3
User=redis
Group=redis

RuntimeDirectory=redis
RuntimeDirectoryMode=0755

NoNewPrivileges=yes
PrivateTmp=yes
ProtectSystem=strict
ReadWriteDirectories=-/var/lib/redis
ReadWriteDirectories=-/var/log/redis
ReadWriteDirectories=-/var/run/redis

[Install]
WantedBy=multi-user.target
EOF

# Install the service
sudo cp /tmp/redis-wine-finder.service /etc/systemd/system/redis-wine-finder.service
sudo systemctl daemon-reload
sudo systemctl enable redis-wine-finder
sudo systemctl start redis-wine-finder

# Wait for Redis to start
sleep 2

# Test Redis connection
redis-cli -a WineFinder2025SecurePass ping

if [ $? -eq 0 ]; then
    echo "✅ Redis setup completed successfully!"

    # Create initial cache warming script
    cat > /tmp/warm-cache.js << 'EOF'
const redis = require('redis');
const client = redis.createClient({
    password: 'WineFinder2025SecurePass'
});

async function warmCache() {
    await client.connect();

    // Set some initial cache values
    await client.set('cache:version', '1.0.0');
    await client.set('cache:initialized', new Date().toISOString());

    console.log('Cache warmed successfully');
    await client.quit();
}

warmCache().catch(console.error);
EOF

    echo "Redis is running on port 6379"
    echo "Password: WineFinder2025SecurePass"
    echo ""
    echo "To connect: redis-cli -a WineFinder2025SecurePass"
    echo "To monitor: redis-cli -a WineFinder2025SecurePass monitor"
    echo "To check stats: redis-cli -a WineFinder2025SecurePass info stats"
else
    echo "❌ Redis setup failed. Please check the logs."
    exit 1
fi