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
This commit is contained in:
parent
4aecf22879
commit
2a9039bd7a
@ -228,6 +228,17 @@ catch (Exception ex)
|
|||||||
|
|
||||||
// Configure the HTTP request pipeline.
|
// Configure the HTTP request pipeline.
|
||||||
|
|
||||||
|
// Configure forwarded headers for proxy scenarios (nginx, etc)
|
||||||
|
var forwardedHeadersOptions = new Microsoft.AspNetCore.HttpOverrides.ForwardedHeadersOptions
|
||||||
|
{
|
||||||
|
ForwardedHeaders = Microsoft.AspNetCore.HttpOverrides.ForwardedHeaders.XForwardedFor |
|
||||||
|
Microsoft.AspNetCore.HttpOverrides.ForwardedHeaders.XForwardedProto
|
||||||
|
};
|
||||||
|
// Clear the default known networks/proxies to allow any proxy
|
||||||
|
forwardedHeadersOptions.KnownNetworks.Clear();
|
||||||
|
forwardedHeadersOptions.KnownProxies.Clear();
|
||||||
|
app.UseForwardedHeaders(forwardedHeadersOptions);
|
||||||
|
|
||||||
// Add CORS early in the pipeline - before authentication
|
// Add CORS early in the pipeline - before authentication
|
||||||
if (app.Environment.IsDevelopment())
|
if (app.Environment.IsDevelopment())
|
||||||
{
|
{
|
||||||
|
|||||||
124
debug-500-error.sh
Normal file
124
debug-500-error.sh
Normal file
@ -0,0 +1,124 @@
|
|||||||
|
#!/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."
|
||||||
143
diagnose-unhealthy-container.sh
Normal file
143
diagnose-unhealthy-container.sh
Normal file
@ -0,0 +1,143 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Diagnose and Fix Unhealthy LittleShop Admin Container
|
||||||
|
echo "=========================================="
|
||||||
|
echo "LittleShop Admin Container Health Diagnosis"
|
||||||
|
echo "=========================================="
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# 1. Check container status and health
|
||||||
|
echo "1. Container Status:"
|
||||||
|
docker ps -a --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}" | grep -E "NAME|littleshop-admin"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# 2. Check health check details
|
||||||
|
echo "2. Health Check Configuration:"
|
||||||
|
docker inspect littleshop-admin --format='{{json .State.Health}}' | python3 -m json.tool 2>/dev/null || \
|
||||||
|
docker inspect littleshop-admin | grep -A 10 '"Health"'
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# 3. Check if the application is actually responding
|
||||||
|
echo "3. Testing Application Response:"
|
||||||
|
echo " - Testing internal port 8080..."
|
||||||
|
docker exec littleshop-admin curl -s -o /dev/null -w "HTTP Status: %{http_code}\n" http://localhost:8080/health 2>/dev/null || echo " Health endpoint not responding"
|
||||||
|
docker exec littleshop-admin curl -s -o /dev/null -w "HTTP Status: %{http_code}\n" http://localhost:8080/ 2>/dev/null || echo " Root endpoint not responding"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# 4. Check database file and permissions
|
||||||
|
echo "4. Database Status:"
|
||||||
|
echo " Host path: /opt/littleshop/data/"
|
||||||
|
ls -la /opt/littleshop/data/ 2>/dev/null || echo " Data directory not found"
|
||||||
|
echo ""
|
||||||
|
echo " Container path: /app/data/"
|
||||||
|
docker exec littleshop-admin ls -la /app/data/ 2>/dev/null || echo " Cannot access container data directory"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# 5. Check recent logs for startup issues
|
||||||
|
echo "5. Recent Application Logs:"
|
||||||
|
docker logs --tail 30 littleshop-admin 2>&1 | grep -E "Now listening on:|fail|ERROR|Exception|Unable|warn" || docker logs --tail 30 littleshop-admin
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# 6. Check environment variables
|
||||||
|
echo "6. Key Environment Variables:"
|
||||||
|
docker inspect littleshop-admin | grep -E "ASPNETCORE_ENVIRONMENT|ConnectionStrings__DefaultConnection" | head -5
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# 7. Network connectivity check
|
||||||
|
echo "7. Network Configuration:"
|
||||||
|
docker inspect littleshop-admin --format='{{range .NetworkSettings.Networks}}{{.NetworkID}} {{end}}' | while read net; do
|
||||||
|
echo " Connected to network: $(docker network ls | grep $net | awk '{print $2}')"
|
||||||
|
done
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# 8. Memory and resource usage
|
||||||
|
echo "8. Resource Usage:"
|
||||||
|
docker stats --no-stream littleshop-admin 2>/dev/null || echo " Could not get stats"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
echo "=========================================="
|
||||||
|
echo "ATTEMPTING FIXES"
|
||||||
|
echo "=========================================="
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Fix 1: Database permissions
|
||||||
|
echo "Fix 1: Setting correct database permissions..."
|
||||||
|
sudo chown -R 1654:1654 /opt/littleshop/data/ 2>/dev/null && echo " ✓ Permissions fixed" || echo " ✗ Could not fix permissions"
|
||||||
|
|
||||||
|
# Fix 2: Ensure database exists
|
||||||
|
echo "Fix 2: Checking database file..."
|
||||||
|
if [ -f "/opt/littleshop/data/littleshop-production.db" ]; then
|
||||||
|
echo " ✓ Database file exists"
|
||||||
|
SIZE=$(stat -c%s "/opt/littleshop/data/littleshop-production.db" 2>/dev/null)
|
||||||
|
echo " Database size: $SIZE bytes"
|
||||||
|
if [ "$SIZE" -eq 0 ]; then
|
||||||
|
echo " ⚠ WARNING: Database file is empty!"
|
||||||
|
echo " The container should recreate it on restart"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo " ✗ Database file missing - will be created on container restart"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Fix 3: Connect to correct network
|
||||||
|
echo "Fix 3: Ensuring network connectivity..."
|
||||||
|
docker network connect littleshop-network littleshop-admin 2>/dev/null && echo " ✓ Connected to littleshop-network" || echo " Already connected or network doesn't exist"
|
||||||
|
|
||||||
|
# Fix 4: Restart with proper environment
|
||||||
|
echo "Fix 4: Restarting container with full configuration..."
|
||||||
|
docker stop littleshop-admin
|
||||||
|
docker rm littleshop-admin
|
||||||
|
|
||||||
|
# Recreate with all necessary environment variables
|
||||||
|
docker run -d \
|
||||||
|
--name littleshop-admin \
|
||||||
|
--restart unless-stopped \
|
||||||
|
--network littleshop-network \
|
||||||
|
-p 5000:8080 \
|
||||||
|
-v /opt/littleshop/data:/app/data \
|
||||||
|
-v /opt/littleshop/logs:/app/logs \
|
||||||
|
-v /opt/littleshop/uploads:/app/wwwroot/uploads \
|
||||||
|
-e ASPNETCORE_ENVIRONMENT=Production \
|
||||||
|
-e ASPNETCORE_URLS="http://+:8080" \
|
||||||
|
-e ConnectionStrings__DefaultConnection="Data Source=/app/data/littleshop-production.db" \
|
||||||
|
-e SilverPay__BaseUrl="http://silverpay-api:8000" \
|
||||||
|
-e SilverPay__ApiKey="7703aa7a62fa4b40a87e9cfd867f5407147515c0986116ea54fc00c0a0bc30d8" \
|
||||||
|
-e SilverPay__WebhookSecret="Thefa1r1esd1d1twebhooks2024" \
|
||||||
|
-e SilverPay__DefaultWebhookUrl="https://admin.thebankofdebbie.giize.com/api/orders/payments/webhook" \
|
||||||
|
-e JWT_SECRET_KEY="ThisIsAVeryLongSecretKeyForJWTTokenGeneration123456789!" \
|
||||||
|
--health-cmd="curl -f http://localhost:8080/ || exit 1" \
|
||||||
|
--health-interval=30s \
|
||||||
|
--health-timeout=10s \
|
||||||
|
--health-retries=3 \
|
||||||
|
littleshop:latest
|
||||||
|
|
||||||
|
echo " Waiting for container to start..."
|
||||||
|
sleep 10
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "=========================================="
|
||||||
|
echo "POST-FIX STATUS"
|
||||||
|
echo "=========================================="
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Final status check
|
||||||
|
echo "Container Status:"
|
||||||
|
docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}" | grep -E "NAME|littleshop-admin"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
echo "Application Logs (after restart):"
|
||||||
|
docker logs --tail 20 littleshop-admin
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
echo "Testing Login Page:"
|
||||||
|
curl -s -o /dev/null -w "HTTP Status Code: %{http_code}\n" http://localhost:5000/Admin/Account/Login || echo "Not responding on port 5000"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
echo "=========================================="
|
||||||
|
echo "DIAGNOSIS COMPLETE"
|
||||||
|
echo ""
|
||||||
|
echo "If still showing unhealthy:"
|
||||||
|
echo "1. Check if port 5000 is already in use: netstat -tulpn | grep 5000"
|
||||||
|
echo "2. Check firewall: ufw status | grep 5000"
|
||||||
|
echo "3. Rebuild image from source: cd /opt/LittleShop && docker build -t littleshop:latest ."
|
||||||
|
echo "4. Check disk space: df -h /"
|
||||||
|
echo "=========================================="
|
||||||
95
fix-littleshop-500-error.sh
Normal file
95
fix-littleshop-500-error.sh
Normal file
@ -0,0 +1,95 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Fix LittleShop Admin HTTP 500 Error Script
|
||||||
|
# Run this on the Hostinger server to diagnose and fix the issue
|
||||||
|
|
||||||
|
echo "=========================================="
|
||||||
|
echo "LittleShop Admin HTTP 500 Error Fix Script"
|
||||||
|
echo "=========================================="
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# 1. Check container status
|
||||||
|
echo "1. Checking container status..."
|
||||||
|
docker ps -a | grep littleshop-admin
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# 2. Check container logs for errors
|
||||||
|
echo "2. Checking recent container logs..."
|
||||||
|
docker logs --tail 100 littleshop-admin 2>&1 | grep -E "ERROR|Exception|fail|500|Unable"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# 3. Check full recent logs
|
||||||
|
echo "3. Full recent logs (last 50 lines)..."
|
||||||
|
docker logs --tail 50 littleshop-admin
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# 4. Check database file permissions
|
||||||
|
echo "4. Checking database file permissions..."
|
||||||
|
ls -la /opt/littleshop/data/
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# 5. Check if database is accessible
|
||||||
|
echo "5. Testing database connectivity..."
|
||||||
|
docker exec littleshop-admin ls -la /app/data/ 2>/dev/null || echo "Could not access container filesystem"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# 6. Check environment variables
|
||||||
|
echo "6. Checking environment variables..."
|
||||||
|
docker inspect littleshop-admin | grep -A 20 '"Env"'
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# 7. Try to fix common issues
|
||||||
|
echo "7. Attempting common fixes..."
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Fix database permissions (UID 1654 as per baseline)
|
||||||
|
echo " - Fixing database permissions..."
|
||||||
|
sudo chown -R 1654:1654 /opt/littleshop/data/ 2>/dev/null && echo " ✓ Database permissions fixed" || echo " ✗ Could not fix permissions"
|
||||||
|
|
||||||
|
# Ensure database file exists
|
||||||
|
if [ ! -f "/opt/littleshop/data/littleshop-production.db" ]; then
|
||||||
|
echo " ✗ Database file missing! Creating new database..."
|
||||||
|
# The container will create it on restart
|
||||||
|
else
|
||||||
|
echo " ✓ Database file exists"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Check if container is running
|
||||||
|
if ! docker ps | grep -q littleshop-admin; then
|
||||||
|
echo " ✗ Container not running. Starting container..."
|
||||||
|
docker start littleshop-admin 2>/dev/null || docker restart littleshop-admin
|
||||||
|
sleep 5
|
||||||
|
echo " Checking status after restart..."
|
||||||
|
docker ps | grep littleshop-admin
|
||||||
|
else
|
||||||
|
echo " - Container is running. Restarting to apply fixes..."
|
||||||
|
docker restart littleshop-admin
|
||||||
|
sleep 5
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "8. Final status check..."
|
||||||
|
docker ps | grep littleshop-admin
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Check if the site is responding now
|
||||||
|
echo "9. Testing HTTP response..."
|
||||||
|
curl -I http://localhost:5000 2>/dev/null | head -n 1 || echo "Local port 5000 not responding"
|
||||||
|
curl -I http://localhost:8080 2>/dev/null | head -n 1 || echo "Local port 8080 not responding"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
echo "10. Checking latest logs after fixes..."
|
||||||
|
docker logs --tail 20 littleshop-admin
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
echo "=========================================="
|
||||||
|
echo "Diagnostic complete!"
|
||||||
|
echo ""
|
||||||
|
echo "Common issues and solutions:"
|
||||||
|
echo "1. Database permissions: Should be owned by UID 1654"
|
||||||
|
echo "2. Database file: Must exist at /opt/littleshop/data/littleshop-production.db"
|
||||||
|
echo "3. Environment vars: Check ASPNETCORE_ENVIRONMENT and ConnectionStrings"
|
||||||
|
echo "4. Container must be on 'littleshop-network' for service connectivity"
|
||||||
|
echo ""
|
||||||
|
echo "If still having issues, check the full logs above for specific error messages."
|
||||||
|
echo "=========================================="
|
||||||
77
fix-login-500.sh
Normal file
77
fix-login-500.sh
Normal file
@ -0,0 +1,77 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
echo "=========================================="
|
||||||
|
echo "Fix HTTP 500 on Login - Common Causes"
|
||||||
|
echo "=========================================="
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Most Common Cause #1: Database permissions
|
||||||
|
echo "1. Fixing Database Permissions (Most Common Issue):"
|
||||||
|
sudo chown -R 1654:1654 /opt/littleshop/data/
|
||||||
|
ls -la /opt/littleshop/data/
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Most Common Cause #2: Missing JWT Secret Key
|
||||||
|
echo "2. Setting Required Environment Variables:"
|
||||||
|
docker stop littleshop-admin
|
||||||
|
docker rm littleshop-admin
|
||||||
|
|
||||||
|
docker run -d \
|
||||||
|
--name littleshop-admin \
|
||||||
|
--restart unless-stopped \
|
||||||
|
--network littleshop-network \
|
||||||
|
-p 5000:8080 \
|
||||||
|
-v /opt/littleshop/data:/app/data \
|
||||||
|
-v /opt/littleshop/logs:/app/logs \
|
||||||
|
-v /opt/littleshop/uploads:/app/wwwroot/uploads \
|
||||||
|
-e ASPNETCORE_ENVIRONMENT=Production \
|
||||||
|
-e ASPNETCORE_URLS="http://+:8080" \
|
||||||
|
-e ASPNETCORE_DETAILEDERRORS=true \
|
||||||
|
-e ConnectionStrings__DefaultConnection="Data Source=/app/data/littleshop-production.db;Cache=Shared" \
|
||||||
|
-e JWT_SECRET_KEY="ThisIsAVeryLongSecretKeyForJWTTokenGeneration123456789!" \
|
||||||
|
-e SilverPay__BaseUrl="http://silverpay-api:8000" \
|
||||||
|
-e SilverPay__ApiKey="7703aa7a62fa4b40a87e9cfd867f5407147515c0986116ea54fc00c0a0bc30d8" \
|
||||||
|
-e SilverPay__WebhookSecret="Thefa1r1esd1d1twebhooks2024" \
|
||||||
|
littleshop:latest
|
||||||
|
|
||||||
|
echo "3. Waiting for container to initialize (20 seconds)..."
|
||||||
|
sleep 20
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "4. Checking initialization logs:"
|
||||||
|
docker logs --tail 30 littleshop-admin 2>&1 | grep -E "Now listening|Entity Framework|Application started|ERROR|Exception" || docker logs --tail 30 littleshop-admin
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
echo "5. Testing endpoints:"
|
||||||
|
echo -n " Health check: "
|
||||||
|
curl -s -o /dev/null -w "%{http_code}\n" http://localhost:5000/health
|
||||||
|
echo -n " Home page: "
|
||||||
|
curl -s -o /dev/null -w "%{http_code}\n" http://localhost:5000/
|
||||||
|
echo -n " Login page: "
|
||||||
|
curl -s -o /dev/null -w "%{http_code}\n" http://localhost:5000/Admin/Account/Login
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
echo "6. If still getting 500, checking for actual error:"
|
||||||
|
docker logs littleshop-admin 2>&1 | grep -A 5 "Exception:" | head -20
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
echo "7. Testing with curl to see error details:"
|
||||||
|
curl -s http://localhost:5000/Admin/Account/Login 2>/dev/null | grep -o "Exception.*" | head -5
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
echo "=========================================="
|
||||||
|
echo "If login still shows HTTP 500:"
|
||||||
|
echo ""
|
||||||
|
echo "Option A: Check detailed logs"
|
||||||
|
echo " docker logs littleshop-admin | grep Exception"
|
||||||
|
echo ""
|
||||||
|
echo "Option B: Recreate database (will lose data)"
|
||||||
|
echo " docker stop littleshop-admin"
|
||||||
|
echo " rm /opt/littleshop/data/littleshop-production.db*"
|
||||||
|
echo " docker start littleshop-admin"
|
||||||
|
echo ""
|
||||||
|
echo "Option C: Run in Development mode for detailed errors"
|
||||||
|
echo " docker stop littleshop-admin"
|
||||||
|
echo " docker rm littleshop-admin"
|
||||||
|
echo " # Then run with ASPNETCORE_ENVIRONMENT=Development"
|
||||||
|
echo "=========================================="
|
||||||
83
quick-fix-unhealthy.sh
Normal file
83
quick-fix-unhealthy.sh
Normal file
@ -0,0 +1,83 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
echo "Quick Fix for Unhealthy LittleShop Admin Container"
|
||||||
|
echo "=================================================="
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Step 1: Stop and remove the problematic container
|
||||||
|
echo "1. Stopping current container..."
|
||||||
|
docker stop littleshop-admin 2>/dev/null
|
||||||
|
docker rm littleshop-admin 2>/dev/null
|
||||||
|
|
||||||
|
# Step 2: Fix permissions BEFORE starting
|
||||||
|
echo "2. Fixing file permissions..."
|
||||||
|
sudo mkdir -p /opt/littleshop/{data,logs,uploads}
|
||||||
|
sudo chown -R 1654:1654 /opt/littleshop/data/
|
||||||
|
sudo chown -R 1654:1654 /opt/littleshop/logs/
|
||||||
|
sudo chown -R 1654:1654 /opt/littleshop/uploads/
|
||||||
|
|
||||||
|
# Step 3: Check if database file exists and has content
|
||||||
|
echo "3. Checking database..."
|
||||||
|
if [ -f "/opt/littleshop/data/littleshop-production.db" ]; then
|
||||||
|
SIZE=$(stat -c%s "/opt/littleshop/data/littleshop-production.db")
|
||||||
|
echo " Database exists: $SIZE bytes"
|
||||||
|
if [ "$SIZE" -eq 0 ]; then
|
||||||
|
echo " ⚠ Database is empty, removing so it can be recreated..."
|
||||||
|
rm /opt/littleshop/data/littleshop-production.db
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo " Database will be created on first run"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Step 4: Start container WITHOUT health check first to let it initialize
|
||||||
|
echo "4. Starting container (without health check for initialization)..."
|
||||||
|
docker run -d \
|
||||||
|
--name littleshop-admin \
|
||||||
|
--restart unless-stopped \
|
||||||
|
--network littleshop-network \
|
||||||
|
-p 5000:8080 \
|
||||||
|
-v /opt/littleshop/data:/app/data \
|
||||||
|
-v /opt/littleshop/logs:/app/logs \
|
||||||
|
-v /opt/littleshop/uploads:/app/wwwroot/uploads \
|
||||||
|
-e ASPNETCORE_ENVIRONMENT=Production \
|
||||||
|
-e ASPNETCORE_URLS="http://+:8080" \
|
||||||
|
-e ConnectionStrings__DefaultConnection="Data Source=/app/data/littleshop-production.db" \
|
||||||
|
-e SilverPay__BaseUrl="http://silverpay-api:8000" \
|
||||||
|
-e SilverPay__ApiKey="7703aa7a62fa4b40a87e9cfd867f5407147515c0986116ea54fc00c0a0bc30d8" \
|
||||||
|
-e SilverPay__WebhookSecret="Thefa1r1esd1d1twebhooks2024" \
|
||||||
|
-e JWT_SECRET_KEY="ThisIsAVeryLongSecretKeyForJWTTokenGeneration123456789!" \
|
||||||
|
littleshop:latest
|
||||||
|
|
||||||
|
echo "5. Waiting for initialization (15 seconds)..."
|
||||||
|
sleep 15
|
||||||
|
|
||||||
|
# Step 5: Check if it's running
|
||||||
|
echo "6. Checking status..."
|
||||||
|
docker ps | grep littleshop-admin
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Step 6: Test the endpoints
|
||||||
|
echo "7. Testing endpoints..."
|
||||||
|
echo " Health endpoint:"
|
||||||
|
curl -s http://localhost:5000/health | head -c 100 && echo "..."
|
||||||
|
echo ""
|
||||||
|
echo " Login page:"
|
||||||
|
curl -s -o /dev/null -w " HTTP Status: %{http_code}\n" http://localhost:5000/Admin/Account/Login
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Step 7: Show recent logs
|
||||||
|
echo "8. Recent logs:"
|
||||||
|
docker logs --tail 15 littleshop-admin 2>&1 | grep -v "Microsoft.EntityFrameworkCore"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
echo "=================================================="
|
||||||
|
echo "Status Check Complete!"
|
||||||
|
echo ""
|
||||||
|
echo "The container is now running WITHOUT health checks."
|
||||||
|
echo "If the login page works (HTTP 200 or 302), the issue was the health check timing."
|
||||||
|
echo ""
|
||||||
|
echo "To test login:"
|
||||||
|
echo " https://admin.thebankofdebbie.giize.com/Admin/Account/Login"
|
||||||
|
echo " Username: admin"
|
||||||
|
echo " Password: admin"
|
||||||
|
echo "=================================================="
|
||||||
Loading…
Reference in New Issue
Block a user