## Major Infrastructure Milestones Achieved ### ✅ Service Migrations Completed - Jellyfin: Successfully migrated to Docker Swarm with latest version - Vaultwarden: Running in Docker Swarm on OMV800 (eliminated duplicate) - Nextcloud: Operational with database optimization and cron setup - Paperless services: Both NGX and AI running successfully ### 🚨 Duplicate Service Analysis Complete - Identified MariaDB conflict (OMV800 Swarm vs lenovo410 standalone) - Identified Vaultwarden duplication (now resolved) - Documented PostgreSQL and Redis consolidation opportunities - Mapped monitoring stack optimization needs ### 🏗️ Infrastructure Status Documentation - Updated README with current cleanup phase status - Enhanced Service Analysis with duplicate service inventory - Updated Quick Start guide with immediate action items - Documented current container distribution across 6 nodes ### 📋 Action Plan Documentation - Phase 1: Immediate service conflict resolution (this week) - Phase 2: Service migration and load balancing (next 2 weeks) - Phase 3: Database consolidation and optimization (future) ### 🔧 Current Infrastructure Health - Docker Swarm: All 6 nodes operational and healthy - Caddy Reverse Proxy: Fully operational with SSL certificates - Storage: MergerFS healthy, local storage for databases - Monitoring: Prometheus + Grafana + Uptime Kuma operational ### 📊 Container Distribution Status - OMV800: 25+ containers (needs load balancing) - lenovo410: 9 containers (cleanup in progress) - fedora: 1 container (ready for additional services) - audrey: 4 containers (well-balanced, monitoring hub) - lenovo420: 7 containers (balanced, can assist) - surface: 9 containers (specialized, reverse proxy) ### 🎯 Next Steps 1. Remove lenovo410 MariaDB (eliminate port 3306 conflict) 2. Clean up lenovo410 Vaultwarden (256MB space savings) 3. Verify no service conflicts exist 4. Begin service migration from OMV800 to fedora/audrey Status: Infrastructure 99% complete, entering cleanup and optimization phase
133 lines
4.5 KiB
Bash
Executable File
133 lines
4.5 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# Nextcloud Database Migration Script
|
|
# Migrates SQLite database from MergerFS to local drive on OMV800
|
|
# Created: $(date)
|
|
|
|
set -e
|
|
|
|
echo "=== Nextcloud Database Migration Script ==="
|
|
echo "Migrating SQLite database from MergerFS to local drive on OMV800"
|
|
echo ""
|
|
|
|
# Configuration
|
|
NEXTCLOUD_DATA_DIR="/export/nextcloud/data"
|
|
LOCAL_DB_DIR="/srv/dev-disk-by-uuid-0f772f0b-917d-4337-a3c5-5cc5d3badac9/nextcloud-db"
|
|
SERVICE_NAME="nextcloud_nextcloud"
|
|
BACKUP_DIR="/export/nextcloud_backups"
|
|
|
|
echo "Available space on target drive:"
|
|
ssh root@omv800 "df -h /srv/dev-disk-by-uuid-0f772f0b-917d-4337-a3c5-5cc5d3badac9"
|
|
|
|
# Create local database directory
|
|
echo ""
|
|
echo "Step 1: Creating local database directory..."
|
|
ssh root@omv800 "mkdir -p $LOCAL_DB_DIR"
|
|
ssh root@omv800 "chown -R 33:33 $LOCAL_DB_DIR"
|
|
echo "✅ Local database directory created: $LOCAL_DB_DIR"
|
|
|
|
# Create backup
|
|
echo ""
|
|
echo "Step 2: Creating backup of current database..."
|
|
mkdir -p "$BACKUP_DIR"
|
|
BACKUP_FILE="$BACKUP_DIR/nextcloud_db_backup_$(date +%Y%m%d_%H%M%S).tar.gz"
|
|
ssh root@omv800 "cd $NEXTCLOUD_DATA_DIR && tar -czf $BACKUP_FILE ."
|
|
echo "✅ Database backup created: $BACKUP_FILE"
|
|
|
|
# Stop Nextcloud service
|
|
echo ""
|
|
echo "Step 3: Stopping Nextcloud service..."
|
|
ssh root@omv800 "docker service scale $SERVICE_NAME=0"
|
|
echo "Waiting for service to stop..."
|
|
sleep 30
|
|
|
|
# Copy database to local storage
|
|
echo ""
|
|
echo "Step 4: Copying database to local drive..."
|
|
ssh root@omv800 "cp -r $NEXTCLOUD_DATA_DIR/* $LOCAL_DB_DIR/"
|
|
ssh root@omv800 "chown -R 33:33 $LOCAL_DB_DIR"
|
|
echo "✅ Database copied to local drive"
|
|
|
|
# Update docker-compose configuration
|
|
echo ""
|
|
echo "Step 5: Updating docker-compose configuration..."
|
|
cd /home/jonathan/Coding/HomeAudit
|
|
|
|
# Create backup of current config
|
|
cp stacks/apps/nextcloud.yml stacks/apps/nextcloud.yml.db_migration_backup.$(date +%Y%m%d_%H%M%S)
|
|
|
|
# Update the volume mapping to use local database storage
|
|
# First, remove the old volume mapping
|
|
sed -i '/- \/export\/nextcloud:\/var\/www\/html$/!b;/n' stacks/apps/nextcloud.yml
|
|
|
|
# Add the new volume mappings
|
|
sed -i 's|- /export/nextcloud:/var/www/html|- /export/nextcloud:/var/www/html\n - /srv/dev-disk-by-uuid-0f772f0b-917d-4337-a3c5-5cc5d3badac9/nextcloud-db:/var/www/html/data|g' stacks/apps/nextcloud.yml
|
|
|
|
echo "✅ Docker-compose configuration updated"
|
|
|
|
# Deploy updated service
|
|
echo ""
|
|
echo "Step 6: Deploying updated service with local database..."
|
|
ssh root@omv800 "cd /home/jonathan/Coding/HomeAudit && docker stack deploy -c stacks/apps/nextcloud.yml nextcloud"
|
|
|
|
echo "Waiting for service to start..."
|
|
sleep 60
|
|
|
|
# Check service status
|
|
echo ""
|
|
echo "Step 7: Checking service status..."
|
|
if ssh root@omv800 "docker service ls | grep -q $SERVICE_NAME"; then
|
|
echo "✅ Service is running"
|
|
else
|
|
echo "❌ Service failed to start"
|
|
echo "Rolling back..."
|
|
ssh root@omv800 "docker service scale $SERVICE_NAME=0"
|
|
cp stacks/apps/nextcloud.yml.db_migration_backup.* stacks/apps/nextcloud.yml
|
|
ssh root@omv800 "cd /home/jonathan/Coding/HomeAudit && docker stack deploy -c stacks/apps/nextcloud.yml nextcloud"
|
|
exit 1
|
|
fi
|
|
|
|
# Wait for container to be ready
|
|
echo ""
|
|
echo "Step 8: Waiting for container to be ready..."
|
|
sleep 30
|
|
|
|
# Verify database connectivity
|
|
echo ""
|
|
echo "Step 9: Verifying database connectivity..."
|
|
CONTAINER_ID=$(ssh root@omv800 "docker ps -q -f name=nextcloud")
|
|
|
|
if [ -n "$CONTAINER_ID" ]; then
|
|
# Check if Nextcloud can access the database
|
|
ssh root@omv800 "docker exec -u 33 $CONTAINER_ID php /var/www/html/occ status"
|
|
|
|
# Test database operations
|
|
echo "Testing database operations..."
|
|
ssh root@omv800 "docker exec -u 33 $CONTAINER_ID php /var/www/html/occ app:list" | head -5
|
|
|
|
echo "✅ Database migration completed successfully"
|
|
else
|
|
echo "❌ Container not found"
|
|
exit 1
|
|
fi
|
|
|
|
echo ""
|
|
echo "=== MIGRATION SUMMARY ==="
|
|
echo "✅ Database backup created: $BACKUP_FILE"
|
|
echo "✅ Database migrated to local drive: $LOCAL_DB_DIR"
|
|
echo "✅ Docker-compose configuration updated"
|
|
echo "✅ Service running with local database"
|
|
echo ""
|
|
echo "Benefits of local drive database storage:"
|
|
echo "- No more MergerFS database locking issues"
|
|
echo "- Improved database performance"
|
|
echo "- Better reliability for concurrent operations"
|
|
echo "- Reduced risk of database corruption"
|
|
echo "- Database stored on dedicated local drive (sdc1)"
|
|
echo ""
|
|
echo "Storage location: /srv/dev-disk-by-uuid-0f772f0b-917d-4337-a3c5-5cc5d3badac9/nextcloud-db"
|
|
echo "Available space: 154G"
|
|
echo ""
|
|
echo "If you encounter issues, restore from backup:"
|
|
echo "tar -xzf $BACKUP_FILE -C $NEXTCLOUD_DATA_DIR/"
|