Maintenance
Regular Maintenance Tasks
Daily Tasks
bash
#!/bin/bash
# Daily maintenance script
# Check service health
docker-compose ps
# Monitor disk usage
df -h /var/cache/tiles
df -h /var/lib/postgresql/data
# Check log files for errors
docker-compose logs --tail=100 tileserver | grep -i error
# Verify cache performance
redis-cli info stats | grep -E "(keyspace_hits|keyspace_misses)"
Weekly Tasks
bash
#!/bin/bash
# Weekly maintenance script
# Database maintenance
docker-compose exec postgres psql -U postgres -d tileserver -c "VACUUM ANALYZE;"
# Cache cleanup
docker-compose exec redis redis-cli FLUSHDB
# Log rotation
sudo logrotate -f /etc/logrotate.d/tileserver
# Update system packages
sudo apt update && sudo apt list --upgradable
Monthly Tasks
bash
#!/bin/bash
# Monthly maintenance script
# Database backup
docker-compose exec postgres pg_dump -U postgres tileserver > backup_$(date +%Y%m%d).sql
# Performance analysis
docker-compose exec postgres psql -U postgres -d tileserver -c "
SELECT schemaname, tablename,
pg_size_pretty(pg_total_relation_size(schemaname||'.'||tablename)) as size
FROM pg_tables
WHERE schemaname = 'public'
ORDER BY pg_total_relation_size(schemaname||'.'||tablename) DESC;"
# Security updates
sudo apt update && sudo apt upgrade -y
Backup and Recovery
Automated Backup Script
bash
#!/bin/bash
# backup_tileserver.sh
BACKUP_DIR="/backups/tileserver"
DATE=$(date +%Y%m%d_%H%M%S)
# Create backup directory
mkdir -p "$BACKUP_DIR"
# Database backup
docker-compose exec postgres pg_dump -U postgres tileserver | gzip > "$BACKUP_DIR/db_backup_$DATE.sql.gz"
# Configuration backup
tar -czf "$BACKUP_DIR/config_backup_$DATE.tar.gz" config/
# Cache backup (optional)
tar -czf "$BACKUP_DIR/cache_backup_$DATE.tar.gz" /var/cache/tiles/
# Clean old backups (keep last 7 days)
find "$BACKUP_DIR" -name "*.gz" -mtime +7 -delete
echo "Backup completed: $DATE"
Recovery Procedure
bash
#!/bin/bash
# Recovery procedure
# 1. Stop services
docker-compose down
# 2. Restore database
gunzip -c backup_file.sql.gz | docker-compose exec -T postgres psql -U postgres -d tileserver
# 3. Restore configuration
tar -xzf config_backup.tar.gz -C ./
# 4. Clear cache
rm -rf /var/cache/tiles/*
# 5. Restart services
docker-compose up -d
# 6. Verify recovery
curl -I http://localhost:8080/health
Performance Optimization
Database Optimization sql
-- Create indexes for better performance
CREATE INDEX CONCURRENTLY idx_tiles_zoom_x_y ON tiles (zoom, x, y);
CREATE INDEX CONCURRENTLY idx_tiles_updated_at ON tiles (updated_at);
-- Optimize PostgreSQL settings
ALTER SYSTEM SET shared_buffers = '256MB';
ALTER SYSTEM SET effective_cache_size = '1GB';
ALTER SYSTEM SET maintenance_work_mem = '64MB';
ALTER SYSTEM SET checkpoint_completion_target = 0.9;
ALTER SYSTEM SET wal_buffers = '16MB';
ALTER SYSTEM SET default_statistics_target = 100;
-- Reload configuration
SELECT pg_reload_conf();
Cache Optimization
bash
# Redis optimization
redis-cli CONFIG SET maxmemory 512mb
redis-cli CONFIG SET maxmemory-policy allkeys-lru
redis-cli CONFIG SET save "900 1 300 10 60 10000"
# File system cache optimization
echo 'vm.vfs_cache_pressure = 50' >> /etc/sysctl.conf
echo 'vm.dirty_ratio = 15' >> /etc/sysctl.conf
echo 'vm.dirty_background_ratio = 5' >> /etc/sysctl.conf
sysctl -p