( echo "============================================================" echo "NEXTCLOUD DIAGNOSTIC" echo "Date: $(date)" echo "============================================================" echo run() { echo echo "============================================================" echo "COMMAND:" echo "$*" echo "============================================================" "$@" 2>&1 echo echo "EXIT CODE: $?" } echo "### 1. Docker containers" run docker ps --format 'table {{.Names}}\t{{.Status}}\t{{.Image}}' echo "### 2. Nextcloud status" run docker exec nextcloud php occ status echo "### 3. Effective Nextcloud configuration" echo 'COMMAND: docker exec nextcloud php -r ...' docker exec nextcloud php -r ' $CONFIG = []; include "/var/www/html/config/config.php"; if (file_exists("/var/www/html/config/zz-docker-env.config.php")) { include "/var/www/html/config/zz-docker-env.config.php"; } echo "dbtype: " . ($CONFIG["dbtype"] ?? "MISSING") . PHP_EOL; echo "dbhost: " . ($CONFIG["dbhost"] ?? "MISSING") . PHP_EOL; echo "dbname: " . ($CONFIG["dbname"] ?? "MISSING") . PHP_EOL; echo "dbuser: " . ($CONFIG["dbuser"] ?? "MISSING") . PHP_EOL; echo "dbpassword: " . (empty($CONFIG["dbpassword"] ?? "") ? "EMPTY" : "SET") . PHP_EOL; echo "instanceid: " . ($CONFIG["instanceid"] ?? "MISSING") . PHP_EOL; echo "version: " . ($CONFIG["version"] ?? "MISSING") . PHP_EOL; echo "datadirectory: " . ($CONFIG["datadirectory"] ?? "MISSING") . PHP_EOL; echo "overwrite.cli.url: " . ($CONFIG["overwrite.cli.url"] ?? "MISSING") . PHP_EOL; echo "overwriteprotocol: " . ($CONFIG["overwriteprotocol"] ?? "MISSING") . PHP_EOL; echo "redis.host: " . ($CONFIG["redis"]["host"] ?? "MISSING") . PHP_EOL; echo "redis.password: " . (empty($CONFIG["redis"]["password"] ?? "") ? "EMPTY" : "SET") . PHP_EOL; echo "trusted_domains:" . PHP_EOL; foreach (($CONFIG["trusted_domains"] ?? []) as $domain) { echo " - " . $domain . PHP_EOL; } echo "trusted_proxies:" . PHP_EOL; foreach (($CONFIG["trusted_proxies"] ?? []) as $proxy) { echo " - " . $proxy . PHP_EOL; } ' 2>&1 echo "EXIT CODE: $?" echo echo "### 4. Test MariaDB connection" echo 'COMMAND: docker exec nextcloud php -r ...' docker exec nextcloud php -r ' $CONFIG = []; include "/var/www/html/config/config.php"; if (file_exists("/var/www/html/config/zz-docker-env.config.php")) { include "/var/www/html/config/zz-docker-env.config.php"; } try { $dsn = "mysql:host=" . $CONFIG["dbhost"] . ";dbname=" . $CONFIG["dbname"]; $pdo = new PDO( $dsn, $CONFIG["dbuser"], $CONFIG["dbpassword"], [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION ] ); echo "PASS: MariaDB connection works" . PHP_EOL; } catch (Throwable $e) { echo "FAIL: MariaDB connection failed" . PHP_EOL; echo $e->getMessage() . PHP_EOL; } ' 2>&1 echo "EXIT CODE: $?" echo echo "### 5. Nextcloud config directory" run docker exec nextcloud ls -la /var/www/html/config echo "### 6. Nextcloud root directory" run docker exec nextcloud ls -la /var/www/html echo "### 7. Nextcloud data directory" run docker exec nextcloud sh -c 'ls -ld /var/www/html/data && ls -la /var/www/html/data | head -30' echo "### 8. Config.php syntax" run docker exec nextcloud php -l /var/www/html/config/config.php echo "### 9. zz-docker-env.config.php syntax" run docker exec nextcloud php -l /var/www/html/config/zz-docker-env.config.php echo "### 10. Docker environment" echo 'COMMAND: docker exec nextcloud env' docker exec nextcloud env 2>&1 | sed -E \ -e 's/(MYSQL_PASSWORD=).*/\1[REDACTED]/' \ -e 's/(MYSQL_ROOT_PASSWORD=).*/\1[REDACTED]/' \ -e 's/(REDIS_PASSWORD=).*/\1[REDACTED]/' \ -e 's/(NEXTCLOUD_ADMIN_PASSWORD=).*/\1[REDACTED]/' echo "EXIT CODE: ${PIPESTATUS[0]}" echo "### 11. Nextcloud container logs" run docker logs --tail 20 nextcloud echo "### 12. MariaDB container logs" run docker logs --tail 20 nextcloud-db echo "### 13. Nextcloud application log" echo 'COMMAND: docker exec nextcloud sh -c ...' docker exec nextcloud sh -c ' if [ -f /var/www/html/data/nextcloud.log ]; then tail -2 /var/www/html/data/nextcloud.log else echo "nextcloud.log not found" fi ' 2>&1 echo "EXIT CODE: $?" echo "### 14. Network" run docker inspect nextcloud --format '{{json .NetworkSettings.Networks}}' echo "### 15. Database network" run docker inspect nextcloud-db --format '{{json .NetworkSettings.Networks}}' echo "### 16. Docker Compose configuration" echo 'COMMAND: docker compose config' docker compose config 2>&1 | sed -E \ -e 's/(MYSQL_PASSWORD:).*/\1 [REDACTED]/' \ -e 's/(MYSQL_ROOT_PASSWORD:).*/\1 [REDACTED]/' \ -e 's/(REDIS_PASSWORD:).*/\1 [REDACTED]/' \ -e 's/(NEXTCLOUD_ADMIN_PASSWORD:).*/\1 [REDACTED]/' echo "### 17. Disk space" run df -h echo "### 18. Docker volumes/mounts" echo 'COMMAND: docker inspect nextcloud --format ...' docker inspect nextcloud \ --format '{{range .Mounts}}{{println .Source "->" .Destination}}{{end}}' \ 2>&1 echo echo "============================================================" echo "END OF DIAGNOSTIC" echo "============================================================" ) 2>&1 | tee nextcloud-diagnostic.txt echo echo "Diagnostic saved to:" echo " $(pwd)/nextcloud-diagnostic.txt"