/ scripts / diagnose-nextcloud.sh
diagnose-nextcloud.sh
  1  #!/bin/bash
  2  set -e
  3  
  4  # Ensure we're in the correct directory
  5  cd ~/fieldwork/fold-stack
  6  
  7  # Header
  8  echo "===== Nextcloud Diagnostic Report ====="
  9  echo "Generated on: $(date)"
 10  echo "======================================"
 11  echo ""
 12  
 13  # Step 1: Check Container Status
 14  echo "1. Nextcloud Container Status"
 15  echo "-----------------------------"
 16  docker ps -a --filter "name=nextcloud_dev" --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"
 17  if [ "$(docker ps -q -f name=nextcloud_dev)" ]; then
 18      echo "Container is running."
 19  else
 20      echo "Container is NOT running!"
 21  fi
 22  echo ""
 23  
 24  # Step 2: Check Container Logs
 25  echo "2. Nextcloud Logs (last 50 lines)"
 26  echo "---------------------------------"
 27  docker logs nextcloud_dev --tail 50 2>&1 || echo "Failed to retrieve logs."
 28  echo ""
 29  
 30  # Step 3: Check Volume Permissions
 31  echo "3. Volume Permissions"
 32  echo "---------------------"
 33  echo "Checking ./volumes/nextcloud/html (should be owned by www-data, UID/GID 33:33):"
 34  ls -ld ./volumes/nextcloud/html
 35  ls -l ./volumes/nextcloud/html | head -n 5
 36  echo "Checking ./volumes/nextcloud/data (should be owned by www-data, UID/GID 33:33):"
 37  ls -ld ./volumes/nextcloud/data
 38  ls -l ./volumes/nextcloud/data | head -n 5
 39  echo ""
 40  
 41  # Step 4: Check Nextcloud Configuration
 42  echo "4. Nextcloud Configuration"
 43  echo "--------------------------"
 44  if [ -f ./volumes/nextcloud/html/config/config.php ]; then
 45      echo "config.php exists. Checking key settings..."
 46      echo "Trusted Domains:"
 47      grep -A 5 "'trusted_domains'" ./volumes/nextcloud/html/config/config.php || echo "Not found."
 48      echo "Overwrite Settings:"
 49      grep -E "'overwrite\..*'" ./volumes/nextcloud/html/config/config.php || echo "Not found."
 50  else
 51      echo "config.php not found! Nextcloud may not be installed."
 52  fi
 53  echo ""
 54  
 55  # Step 5: Check Nextcloud Status via OCC
 56  echo "5. Nextcloud OCC Status"
 57  echo "-----------------------"
 58  docker exec nextcloud_dev php occ status 2>&1 || echo "Failed to run occ status."
 59  echo ""
 60  
 61  # Step 6: Check Database Accessibility
 62  echo "6. Database Check"
 63  echo "-----------------"
 64  # Since we're using SQLite (based on the setup), check if the database file exists and is writable
 65  echo "Checking SQLite database file (/var/www/html/data/nextcloud.db):"
 66  docker exec nextcloud_dev ls -l /var/www/html/data/nextcloud.db 2>&1 || echo "Database file not found or inaccessible."
 67  echo ""
 68  
 69  # Step 7: Check Web Server (Apache) Status
 70  echo "7. Web Server (Apache) Status"
 71  echo "----------------------------"
 72  docker exec nextcloud_dev ps aux | grep apache2 || echo "No Apache processes found."
 73  echo ""
 74  
 75  # Step 8: Test Network Connectivity
 76  echo "8. Network Connectivity"
 77  echo "-----------------------"
 78  echo "Testing healthcheck endpoint (http://localhost/status.php):"
 79  docker exec nextcloud_dev curl -f http://localhost/status.php 2>&1 || echo "Failed to reach status.php."
 80  echo "Testing external access (http://localhost:8081):"
 81  curl -f http://localhost:8081/status.php 2>&1 || echo "Failed to reach Nextcloud directly on port 8081."
 82  echo "Testing proxy access (http://localhost/nextcloud/):"
 83  curl -f http://localhost/nextcloud/status.php 2>&1 || echo "Failed to reach Nextcloud via Nginx proxy."
 84  echo ""
 85  
 86  # Step 9: Check Nginx Proxy Configuration
 87  echo "9. Nginx Proxy Configuration"
 88  echo "----------------------------"
 89  echo "Checking Nginx container status:"
 90  docker ps -a --filter "name=nginx_dev" --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"
 91  echo "Checking Nginx logs for Nextcloud errors (last 20 lines):"
 92  docker logs nginx_dev --tail 20 2>&1 | grep -i nextcloud || echo "No Nextcloud-related errors found in Nginx logs."
 93  echo "Checking Nginx configuration for Nextcloud:"
 94  grep -A 20 "location /nextcloud/" nginx/dev/default.conf || echo "Nextcloud proxy configuration not found."
 95  echo ""
 96  
 97  # Step 10: Check Disk Space
 98  echo "10. Disk Space"
 99  echo "--------------"
100  df -h ./volumes/nextcloud
101  echo ""
102  
103  # Step 11: Check Memory Usage
104  echo "11. Memory Usage"
105  echo "----------------"
106  docker stats --no-stream --format "table {{.Name}}\t{{.MemUsage}}\t{{.MemPerc}}" | grep nextcloud_dev
107  echo ""
108  
109  # Step 12: Check for Maintenance Mode
110  echo "12. Maintenance Mode"
111  echo "--------------------"
112  docker exec nextcloud_dev php occ maintenance:mode 2>&1 || echo "Failed to check maintenance mode."
113  echo ""
114  
115  # Step 13: Check for Pending Updates or Repairs
116  echo "13. Pending Updates/Repairs"
117  echo "---------------------------"
118  docker exec nextcloud_dev php occ upgrade 2>&1 || echo "Failed to run occ upgrade."
119  docker exec nextcloud_dev php occ db:add-missing-indices 2>&1 || echo "Failed to run db:add-missing-indices."
120  docker exec nextcloud_dev php occ db:convert-filecache-bigint 2>&1 || echo "Failed to run db:convert-filecache-bigint."
121  echo ""
122  
123  echo "===== End of Nextcloud Diagnostic Report ====="