Files
Server-scripts/docker_compose/mediahost/nextcloud/diagnostic.sh
T
2026-10-01 14:07:55 +00:00

173 lines
5.2 KiB
Bash

(
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"