littleshop/debug-500-error.sh
SysAdmin 2a9039bd7a Fix HTTP 500 on login: Add ForwardedHeaders middleware for proxy support
- Added UseForwardedHeaders to properly handle X-Forwarded-For and X-Forwarded-Proto
- Fixes anti-forgery token validation when behind nginx proxy
- Resolves HTTP 500 errors on POST requests to login endpoint
2025-09-24 21:53:27 +01:00

124 lines
4.4 KiB
Bash

#!/bin/bash
echo "=========================================="
echo "HTTP 500 Error Deep Debugging"
echo "=========================================="
echo ""
# 1. Get the actual error from logs
echo "1. ACTUAL ERROR MESSAGE:"
echo "------------------------"
docker logs littleshop-admin --tail 200 2>&1 | grep -A 10 "Exception" | head -50
echo ""
# 2. Check if database file exists and is accessible
echo "2. DATABASE FILE CHECK:"
echo "------------------------"
echo "Host system check:"
ls -la /opt/littleshop/data/littleshop-production.db 2>/dev/null || echo "Database file not found on host"
echo ""
echo "From inside container:"
docker exec littleshop-admin ls -la /app/data/ 2>/dev/null || echo "Cannot access container filesystem"
echo ""
# 3. Test database directly
echo "3. DATABASE CONNECTION TEST:"
echo "------------------------"
docker exec littleshop-admin bash -c "cd /app && dotnet exec LittleShop.dll --test-db" 2>&1 | head -20 || echo "Could not test database"
echo ""
# 4. Check all environment variables
echo "4. ENVIRONMENT VARIABLES:"
echo "------------------------"
docker exec littleshop-admin printenv | grep -E "ASPNETCORE|ConnectionStrings|JWT|SilverPay" | sort
echo ""
# 5. Check if it's a specific login issue
echo "5. LOGIN SPECIFIC TEST:"
echo "------------------------"
echo "Testing other endpoints:"
echo -n " / endpoint: "
docker exec littleshop-admin curl -s -o /dev/null -w "%{http_code}" http://localhost:8080/ 2>/dev/null || echo "Failed"
echo -n " /health endpoint: "
docker exec littleshop-admin curl -s -o /dev/null -w "%{http_code}" http://localhost:8080/health 2>/dev/null || echo "Failed"
echo -n " /Admin endpoint: "
docker exec littleshop-admin curl -s -o /dev/null -w "%{http_code}" http://localhost:8080/Admin 2>/dev/null || echo "Failed"
echo -n " /Admin/Account/Login endpoint: "
docker exec littleshop-admin curl -s -o /dev/null -w "%{http_code}" http://localhost:8080/Admin/Account/Login 2>/dev/null || echo "Failed"
echo ""
# 6. Check for port conflicts
echo "6. PORT BINDING CHECK:"
echo "------------------------"
netstat -tulpn | grep -E "5000|8080" || echo "No port conflicts found"
echo ""
# 7. Disk space check
echo "7. DISK SPACE:"
echo "------------------------"
df -h /opt/littleshop/
echo ""
# 8. Try to get the actual error page
echo "8. ERROR PAGE CONTENT:"
echo "------------------------"
docker exec littleshop-admin curl -s http://localhost:8080/Admin/Account/Login 2>/dev/null | grep -A 5 -B 5 "Exception\|Error\|500" | head -20 || echo "Could not get error page"
echo ""
echo "=========================================="
echo "ATTEMPTING EMERGENCY FIX"
echo "=========================================="
echo ""
# Emergency Fix 1: Remove database and let it recreate
echo "Fix 1: Database Reset"
echo "----------------------"
read -p "Reset database? This will delete all data! (y/n) " -n 1 -r
echo
if [[ $REPLY =~ ^[Yy]$ ]]; then
docker stop littleshop-admin
sudo rm -f /opt/littleshop/data/littleshop-production.db
sudo rm -f /opt/littleshop/data/littleshop-production.db-shm
sudo rm -f /opt/littleshop/data/littleshop-production.db-wal
echo "Database files removed. Restarting container..."
docker start littleshop-admin
sleep 10
echo "Checking new logs..."
docker logs --tail 20 littleshop-admin
else
echo "Skipped database reset"
fi
echo ""
# Emergency Fix 2: Run in Development mode to see detailed errors
echo "Fix 2: Run with Detailed Errors"
echo "--------------------------------"
read -p "Run container in Development mode for detailed errors? (y/n) " -n 1 -r
echo
if [[ $REPLY =~ ^[Yy]$ ]]; then
docker stop littleshop-admin
docker rm littleshop-admin
docker run -d \
--name littleshop-admin \
--network littleshop-network \
-p 5000:8080 \
-v /opt/littleshop/data:/app/data \
-v /opt/littleshop/logs:/app/logs \
-e ASPNETCORE_ENVIRONMENT=Development \
-e ASPNETCORE_URLS="http://+:8080" \
-e ConnectionStrings__DefaultConnection="Data Source=/app/data/littleshop-production.db" \
littleshop:latest
sleep 10
echo "Getting detailed error output..."
docker exec littleshop-admin curl -s http://localhost:8080/Admin/Account/Login | head -100
else
echo "Skipped Development mode"
fi
echo ""
echo "=========================================="
echo "DIAGNOSIS COMPLETE"
echo "=========================================="
echo "Please share the error messages shown above."
echo "The actual Exception message will tell us exactly what's wrong."