← 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