# Performance Improvements Applied - November 12, 2025 ## Summary Applied Phase 0 performance optimizations to improve service speed by 30-50% with minimal risk. --- ## Changes Made ### 1. ✅ Firefly III - Added Redis Cache **File:** `firefly.yml` **Changes:** - Added `firefly-redis` service (Redis Alpine image) - Changed `CACHE_DRIVER=file` → `CACHE_DRIVER=redis` - Changed `SESSION_DRIVER=file` → `SESSION_DRIVER=redis` - Added Redis connection environment variables - Added database tuning: `--innodb-buffer-pool-size=512M --innodb-log-file-size=128M --max-connections=100` - Added `firefly_redis_data` volume **Expected Impact:** - 30-50% faster page loads - Reduced disk I/O - Better session handling - Improved database performance **How to Apply:** ```bash cd /home/icke/compose_files docker-compose -f firefly.yml up -d ``` --- ### 2. ✅ Zabbix - Database Performance Tuning **File:** `zabbix.yml` **Changes:** - Added command line tuning to `mysql-zabbix`: ```yaml command: --innodb-buffer-pool-size=2G --innodb-log-file-size=256M --max-connections=150 --innodb-flush-log-at-trx-commit=2 ``` **Expected Impact:** - 20-30% faster queries - Better handling of monitoring data - Reduced memory pressure (better allocation of 2.5GB RAM) - Improved write performance with flush optimization **How to Apply:** ```bash cd /home/icke/compose_files docker-compose -f zabbix.yml restart mysql-zabbix # Wait 30 seconds for database to stabilize docker-compose -f zabbix.yml restart zabbix-server ``` --- ### 3. ✅ Nextcloud - Added Tmpfs for Temporary Files **File:** `nextcloud.yml` **Changes:** - Added tmpfs mounts to `app` service: ```yaml tmpfs: - /tmp:size=1G - /var/tmp:size=512M ``` - Added descriptive container names: - `nextcloud-app` (previously auto-generated `compose_files_app_1`) - `nextcloud-db` (previously auto-generated `compose_files_db_1`) - `nextcloud-redis` (previously auto-generated `compose_files_redis_1`) **Expected Impact:** - Faster preview generation (thumbnails, document previews) - Reduced SSD wear (temp files in RAM) - Better performance for file operations - ~40% reduction in disk I/O for temp files **How to Apply:** ```bash cd /home/icke/compose_files docker-compose -f nextcloud.yml restart app ``` --- ## Deployment Steps ### Option 1: Apply All at Once (Recommended) ```bash cd /home/icke/compose_files # 1. Firefly (creates new Redis container) docker-compose -f firefly.yml up -d echo "Waiting for Firefly to start..." sleep 15 # 2. Zabbix (restarts database with tuning) docker-compose -f zabbix.yml restart mysql-zabbix echo "Waiting for database to stabilize..." sleep 30 docker-compose -f zabbix.yml restart zabbix-server # 3. Nextcloud (restart with tmpfs) docker-compose -f nextcloud.yml restart app echo "All performance improvements applied!" ``` ### Option 2: Apply One at a Time Do each service separately, test, then proceed to next. --- ## Verification ### Check Service Status ```bash # Check all services are running docker ps --filter "name=firefly" --filter "name=zabbix" --filter "name=nextcloud" # Check logs for errors docker-compose -f firefly.yml logs --tail=50 firefly docker-compose -f zabbix.yml logs --tail=50 mysql-zabbix docker-compose -f nextcloud.yml logs --tail=50 app ``` ### Test Firefly Redis Connection ```bash # Should see Redis connection in logs docker logs firefly_iii_core 2>&1 | grep -i redis # Check Redis is accessible docker exec firefly_iii_redis redis-cli ping # Should return: PONG ``` ### Test Zabbix Database ```bash # Check MySQL variables docker exec mysql-zabbix mysql -uroot -p'eccmts42*' -e "SHOW VARIABLES LIKE 'innodb_buffer_pool_size';" # Should show: 2147483648 (2GB) docker exec mysql-zabbix mysql -uroot -p'eccmts42*' -e "SHOW VARIABLES LIKE 'max_connections';" # Should show: 150 ``` ### Test Nextcloud Tmpfs ```bash # Check tmpfs is mounted docker exec nextcloud-app df -h | grep tmpfs # Should see /tmp and /var/tmp with 1G and 512M ``` ### Performance Testing **Before/After Comparison:** 1. **Firefly**: Time loading dashboard, transactions page 2. **Zabbix**: Check graph rendering speed, query execution time 3. **Nextcloud**: Upload file, generate preview, test document editing --- ## Rollback Instructions ### If Issues Occur **Firefly:** ```bash cd /home/icke/compose_files git checkout firefly.yml # If using git # Or manually change CACHE_DRIVER and SESSION_DRIVER back to 'file' # Remove redis service docker-compose -f firefly.yml up -d ``` **Zabbix:** ```bash # Edit zabbix.yml and remove the 'command:' line docker-compose -f zabbix.yml restart mysql-zabbix docker-compose -f zabbix.yml restart zabbix-server ``` **Nextcloud:** ```bash # Edit nextcloud.yml and remove 'tmpfs:' section docker-compose -f nextcloud.yml restart app ``` --- ## Monitoring **Key Metrics to Watch (first 24 hours):** 1. **Memory Usage** ```bash docker stats --no-stream | grep -E "firefly|zabbix|nextcloud" ``` 2. **Response Times** - Firefly dashboard load time - Zabbix web interface responsiveness - Nextcloud file preview generation 3. **Error Logs** ```bash docker-compose -f firefly.yml logs -f firefly | grep -i error docker-compose -f zabbix.yml logs -f mysql-zabbix | grep -i error docker-compose -f nextcloud.yml logs -f app | grep -i error ``` 4. **Redis Stats (Firefly)** ```bash docker exec firefly_iii_redis redis-cli info stats ``` --- ## Next Steps (From Roadmap) After verifying these changes work well: 1. **Add Redis to Gitea** (Phase 0 optional task) 2. **Fix Unifi duplicate mount** (Phase 0 optional task) 3. **Continue with Phase 1** security improvements 4. **Consider additional performance optimizations**: - Hardware transcoding for Jellyfin/Plex - Switch Zabbix to Alpine image (save 500MB RAM) - Add resource limits/reservations --- ## Performance Baseline **Current Stats (Before Changes):** - Nextcloud DB: 4GB RAM, already optimized ✅ - Zabbix MySQL: 2.5GB RAM, no tuning - Firefly: File-based cache, 17.9MB RAM (app only) **Expected Stats (After Changes):** - Nextcloud: Same + tmpfs benefits - Zabbix MySQL: 2G allocated, better query performance - Firefly: Redis caching, faster response times --- **Applied:** 2025-11-12 **Risk Level:** Very Low **Downtime:** < 2 minutes per service **Success Criteria:** All services healthy, no errors in logs, improved response times