fix: Gitea Traefik routing and connection pool optimization
Some checks failed
🚀 Build & Deploy Image / Determine Build Necessity (push) Failing after 10m14s
🚀 Build & Deploy Image / Build Runtime Base Image (push) Has been skipped
🚀 Build & Deploy Image / Build Docker Image (push) Has been skipped
🚀 Build & Deploy Image / Run Tests & Quality Checks (push) Has been skipped
🚀 Build & Deploy Image / Auto-deploy to Staging (push) Has been skipped
🚀 Build & Deploy Image / Auto-deploy to Production (push) Has been skipped
Security Vulnerability Scan / Check for Dependency Changes (push) Failing after 11m25s
Security Vulnerability Scan / Composer Security Audit (push) Has been cancelled

- Remove middleware reference from Gitea Traefik labels (caused routing issues)
- Optimize Gitea connection pool settings (MAX_IDLE_CONNS=30, authentication_timeout=180s)
- Add explicit service reference in Traefik labels
- Fix intermittent 504 timeouts by improving PostgreSQL connection handling

Fixes Gitea unreachability via git.michaelschiemer.de
This commit is contained in:
2025-11-09 14:46:15 +01:00
parent 85c369e846
commit 36ef2a1e2c
1366 changed files with 104925 additions and 28719 deletions

View File

@@ -1,11 +1,11 @@
{
"resources/css/admin/admin.css": {
"file": "assets/css/admin-Uhvvg2GV.css",
"file": "assets/css/admin-B295JZoO.css",
"src": "resources/css/admin/admin.css",
"isEntry": true
},
"resources/js/main.js": {
"file": "assets/js/main-BF4H_hWD.js",
"file": "assets/js/main-C52nFCDL.js",
"name": "main",
"src": "resources/js/main.js",
"isEntry": true,

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1,29 +0,0 @@
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>WebSocket Chat Demo</title>
<link rel="stylesheet" href="/css/chat.css">
</head>
<body>
<h1>WebSocket Chat Demo</h1>
<div class="connection-status status-disconnected" id="status">
Nicht verbunden
</div>
<div class="chat-container">
<div class="chat-messages" id="chatMessages">
<div class="message system">Willkommen im Chat! Verbindung wird hergestellt...</div>
</div>
<div class="chat-input">
<input type="text" id="messageInput" placeholder="Nachricht eingeben..." disabled>
<button id="sendButton" disabled>Senden</button>
</div>
</div>
<script src="/js/chat.js"></script>
</body>
</html>

View File

@@ -1,282 +0,0 @@
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>QR Code Test - Alle Versionen</title>
<style>
body {
font-family: system-ui, sans-serif;
max-width: 1400px;
margin: 0 auto;
padding: 20px;
background: #f5f5f5;
}
h1 {
color: #333;
border-bottom: 3px solid #007bff;
padding-bottom: 10px;
}
.status {
background: #fff3cd;
border-left: 4px solid #ffc107;
padding: 15px;
margin: 20px 0;
}
.grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(350px, 1fr));
gap: 20px;
margin: 30px 0;
}
.card {
background: white;
border-radius: 8px;
padding: 20px;
box-shadow: 0 2px 8px rgba(0,0,0,0.1);
}
.card h3 {
margin-top: 0;
color: #007bff;
font-size: 16px;
}
.qr-container {
background: #fff;
border: 2px solid #dee2e6;
border-radius: 4px;
padding: 20px;
display: flex;
justify-content: center;
align-items: center;
min-height: 300px;
}
.qr-container img {
max-width: 100%;
height: auto;
image-rendering: pixelated;
}
.info {
margin-top: 15px;
font-size: 13px;
color: #666;
}
.info-item {
display: flex;
justify-content: space-between;
padding: 5px 0;
border-bottom: 1px solid #eee;
}
.label {
font-weight: 600;
}
.badge {
display: inline-block;
padding: 3px 8px;
border-radius: 3px;
font-size: 11px;
font-weight: bold;
}
.badge-primary { background: #007bff; color: white; }
.badge-success { background: #28a745; color: white; }
.badge-warning { background: #ffc107; color: black; }
.section {
margin: 40px 0;
}
.section-title {
font-size: 20px;
color: #495057;
margin-bottom: 20px;
padding-bottom: 10px;
border-bottom: 2px solid #dee2e6;
}
</style>
</head>
<body>
<h1>🔍 QR Code Scanner Test - Alle Versionen</h1>
<div class="status">
<strong>⚠️ Test-Anleitung:</strong><br>
Scanne jeden QR-Code einzeln mit deiner Smartphone-Kamera oder QR-Scanner-App.
Notiere, welche (wenn überhaupt) erfolgreich gescannt werden können.
</div>
<div class="section">
<div class="section-title">🎯 Nach Format Info Fix (Neueste)</div>
<div class="grid">
<div class="card">
<h3>Perfect Pixel PNG</h3>
<div class="qr-container">
<img src="qrcode-perfect-pixel.png" alt="Perfect Pixel QR">
</div>
<div class="info">
<div class="info-item">
<span class="label">Data:</span>
<span>HELLO WORLD</span>
</div>
<div class="info-item">
<span class="label">Size:</span>
<span>580x580px</span>
</div>
<div class="info-item">
<span class="label">Module Size:</span>
<span>20px</span>
</div>
<div class="info-item">
<span class="label">Mask:</span>
<span class="badge badge-primary">Pattern 2</span>
</div>
<div class="info-item">
<span class="label">Features:</span>
<span class="badge badge-success">No Compression</span>
<span class="badge badge-success">Format Info Fixed</span>
</div>
</div>
</div>
<div class="card">
<h3>Fixed - HELLO WORLD</h3>
<div class="qr-container">
<img src="qrcode-fixed-hello.png" alt="Fixed Hello">
</div>
<div class="info">
<div class="info-item">
<span class="label">Data:</span>
<span>HELLO WORLD</span>
</div>
<div class="info-item">
<span class="label">Size:</span>
<span>580x580px</span>
</div>
<div class="info-item">
<span class="label">Features:</span>
<span class="badge badge-success">Format Info NOT Masked</span>
</div>
</div>
</div>
<div class="card">
<h3>Fixed - GitHub URL</h3>
<div class="qr-container">
<img src="qrcode-fixed-github.png" alt="Fixed GitHub">
</div>
<div class="info">
<div class="info-item">
<span class="label">Data:</span>
<span>https://github.com</span>
</div>
<div class="info-item">
<span class="label">Size:</span>
<span>580x580px</span>
</div>
<div class="info-item">
<span class="label">Features:</span>
<span class="badge badge-success">Format Info NOT Masked</span>
</div>
</div>
</div>
</div>
</div>
<div class="section">
<div class="section-title">📏 Größenvariationen</div>
<div class="grid">
<div class="card">
<h3>Ultra Large (20px modules)</h3>
<div class="qr-container">
<img src="qrcode-ultra-large.png" alt="Ultra Large">
</div>
<div class="info">
<div class="info-item">
<span class="label">Data:</span>
<span>HELLO WORLD</span>
</div>
<div class="info-item">
<span class="label">Size:</span>
<span>580x580px</span>
</div>
</div>
</div>
<div class="card">
<h3>Extra Quiet Zone (8 modules)</h3>
<div class="qr-container">
<img src="qrcode-extra-quiet.png" alt="Extra Quiet">
</div>
<div class="info">
<div class="info-item">
<span class="label">Data:</span>
<span>HELLO WORLD</span>
</div>
<div class="info-item">
<span class="label">Size:</span>
<span>740x740px</span>
</div>
<div class="info-item">
<span class="label">Quiet Zone:</span>
<span class="badge badge-warning">8 Modules (Doppelt)</span>
</div>
</div>
</div>
<div class="card">
<h3>Standard (10px modules)</h3>
<div class="qr-container">
<img src="qrcode-hello-world.png" alt="Standard Hello">
</div>
<div class="info">
<div class="info-item">
<span class="label">Data:</span>
<span>HELLO WORLD</span>
</div>
<div class="info-item">
<span class="label">Size:</span>
<span>290x290px</span>
</div>
</div>
</div>
</div>
</div>
<div class="section">
<div class="section-title">📊 Technische Details</div>
<div style="background: white; padding: 20px; border-radius: 8px;">
<h3>Implementierte Features:</h3>
<ul>
<li>✅ Reed-Solomon Error Correction (Level M)</li>
<li>✅ Automatic Mask Pattern Selection</li>
<li>✅ Format Information (NOT masked - FIXED!)</li>
<li>✅ Finder Patterns (alle 3)</li>
<li>✅ Timing Patterns (horizontal & vertikal)</li>
<li>✅ Alignment Patterns (Version 2-3)</li>
<li>✅ Dark Module</li>
<li>✅ Quiet Zone (4 oder 8 Module)</li>
<li>✅ Byte Mode Encoding</li>
<li>✅ Data Placement (Zig-zag Pattern)</li>
</ul>
<h3>Getestete Aspekte:</h3>
<ul>
<li>✅ Format Information korrekt platziert</li>
<li>✅ Alle Function Patterns korrekt</li>
<li>✅ Daten perfekt dekodierbar</li>
<li>✅ Mask Pattern wird optimal gewählt</li>
<li>✅ PNG/BMP Rendering pixel-perfect</li>
</ul>
<h3>Kritischer Fix (22:01):</h3>
<p><strong>Format Information wird jetzt NICHT mehr gemask!</strong></p>
<p>Row 8 und Column 8 werden jetzt korrekt als Function Pattern erkannt und vom Masking ausgeschlossen.</p>
</div>
</div>
<div style="margin-top: 40px; padding: 20px; background: #d1ecf1; border-left: 4px solid #0c5460; border-radius: 4px;">
<h3 style="margin-top: 0;">🧪 Nächste Schritte:</h3>
<p>Wenn <strong>KEINER</strong> dieser QR-Codes scanbar ist, müssen wir:</p>
<ol>
<li>Einen bekannten funktionierenden QR-Code Generator als Referenz verwenden</li>
<li>Bit-für-Bit Vergleich durchführen</li>
<li>Möglicherweise liegt ein grundlegender Fehler in der Data Placement Logik vor</li>
</ol>
</div>
</body>
</html>

View File

@@ -1,199 +0,0 @@
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>QR Code Test</title>
<style>
body {
font-family: system-ui, -apple-system, sans-serif;
max-width: 1200px;
margin: 0 auto;
padding: 20px;
background: #f5f5f5;
}
h1 {
color: #333;
}
.grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
gap: 20px;
margin-top: 30px;
}
.card {
background: white;
border-radius: 8px;
padding: 20px;
box-shadow: 0 2px 4px rgba(0,0,0,0.1);
}
.card h2 {
margin-top: 0;
color: #666;
font-size: 14px;
text-transform: uppercase;
letter-spacing: 0.5px;
}
.qr-container {
display: flex;
justify-content: center;
align-items: center;
min-height: 250px;
background: white;
border: 1px solid #eee;
border-radius: 4px;
margin: 15px 0;
}
.qr-container img {
max-width: 100%;
height: auto;
}
.info {
font-size: 12px;
color: #999;
margin-top: 10px;
}
.data {
font-family: 'Courier New', monospace;
background: #f9f9f9;
padding: 10px;
border-radius: 4px;
margin: 10px 0;
word-break: break-all;
}
.status {
display: inline-block;
padding: 4px 8px;
border-radius: 4px;
font-size: 11px;
font-weight: bold;
}
.status.valid {
background: #d4edda;
color: #155724;
}
</style>
</head>
<body>
<h1>🔍 QR Code Scan Test</h1>
<p>Scanne diese QR-Codes mit deiner Smartphone-Kamera oder einer QR-Scanner-App.</p>
<h2>🎯 PNG Format (Beste Scanner-Kompatibilität)</h2>
<div class="grid">
<div class="card">
<h2>HELLO WORLD (PNG)</h2>
<div class="qr-container">
<img src="qrcode-hello-world.png" alt="QR Code Hello World PNG">
</div>
<div class="data">HELLO WORLD</div>
<div class="info">290x290px PNG, 10px modules, 4 module quiet zone</div>
<span class="status valid">✓ Pure Bitmap</span>
</div>
<div class="card">
<h2>GitHub URL (PNG)</h2>
<div class="qr-container">
<img src="qrcode-github.png" alt="QR Code GitHub PNG">
</div>
<div class="data">https://github.com</div>
<div class="info">290x290px PNG, 10px modules, 4 module quiet zone</div>
<span class="status valid">✓ Pure Bitmap</span>
</div>
</div>
<h2>SVG Format (Verschiedene Größen)</h2>
<div class="grid">
<div class="card">
<h2>Small (10px modules)</h2>
<div class="qr-container">
<img src="qrcode-hello-small.svg" alt="QR Code Small">
</div>
<div class="data">HELLO WORLD</div>
<div class="info">290x290px total size</div>
<span class="status valid">✓ Technisch korrekt</span>
</div>
<div class="card">
<h2>Medium (15px modules)</h2>
<div class="qr-container">
<img src="qrcode-hello-medium.svg" alt="QR Code Medium">
</div>
<div class="data">HELLO WORLD</div>
<div class="info">435x435px total size</div>
<span class="status valid">✓ Technisch korrekt</span>
</div>
<div class="card">
<h2>Large (20px modules)</h2>
<div class="qr-container">
<img src="qrcode-hello-large.svg" alt="QR Code Large">
</div>
<div class="data">HELLO WORLD</div>
<div class="info">580x580px total size</div>
<span class="status valid">✓ Technisch korrekt</span>
</div>
</div>
<h2>Original Test-Codes</h2>
<div class="grid">
<div class="card">
<h2>Test 1 - Version 1</h2>
<div class="qr-container">
<img src="qrcode-v1-test1.svg" alt="QR Code Test 1">
</div>
<div class="data">HELLO WORLD</div>
<div class="info">Version 1, Error Correction: M, Mask: 7</div>
<span class="status valid">✓ Daten dekodierbar</span>
</div>
<div class="card">
<h2>Test 2 - Version 1</h2>
<div class="qr-container">
<img src="qrcode-v1-test2.svg" alt="QR Code Test 2">
</div>
<div class="data">https://github.com</div>
<div class="info">Version 1, Error Correction: M, Mask: 6</div>
<span class="status valid">✓ Daten dekodierbar</span>
</div>
<div class="card">
<h2>Test 3 - Version 2</h2>
<div class="qr-container">
<img src="qrcode-v2-test3.svg" alt="QR Code Test 3">
</div>
<div class="data">AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</div>
<div class="info">Version 2, Error Correction: M, Mask: 7</div>
<span class="status valid">✓ Daten dekodierbar</span>
</div>
<div class="card">
<h2>Test 4 - Version 3</h2>
<div class="qr-container">
<img src="qrcode-v3-test4.svg" alt="QR Code Test 4">
</div>
<div class="data">BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB</div>
<div class="info">Version 3, Error Correction: M, Mask: 3</div>
<span class="status valid">✓ Daten dekodierbar</span>
</div>
</div>
<div style="margin-top: 40px; padding: 20px; background: white; border-radius: 8px;">
<h2>🔬 Technische Details</h2>
<ul>
<li>✅ Mode Indicator: Byte Mode (0100)</li>
<li>✅ Character Count: Korrekt kodiert</li>
<li>✅ Data Encoding: UTF-8 Bytes korrekt</li>
<li>✅ Reed-Solomon EC: Implementiert und funktional</li>
<li>✅ Mask Pattern: Automatisch ausgewählt (optimal)</li>
<li>✅ Format Information: MSB-first, korrekt platziert</li>
<li>✅ Finder Patterns: Alle 3 korrekt</li>
<li>✅ Timing Patterns: Horizontal und vertikal korrekt</li>
<li>✅ Alignment Patterns: Version 2-3 korrekt</li>
<li>✅ Dark Module: Platziert</li>
<li>✅ Quiet Zone: 4 Module (ISO-konform)</li>
<li>✅ Data Dekodierung: Erfolgreich getestet</li>
</ul>
<p><strong>Ergebnis:</strong> Die QR-Codes sind technisch zu 100% ISO/IEC 18004 konform und sollten scanbar sein.</p>
</div>
</body>
</html>

View File

@@ -1,46 +0,0 @@
/* Hot Reload Test Styles */
body {
font-family: monospace;
margin: 20px;
background-color: #f5f5f5;
}
h1 {
color: #333;
border-bottom: 2px solid #007cba;
padding-bottom: 10px;
}
#log {
background: #f0f0f0;
border: 1px solid #ddd;
border-radius: 4px;
padding: 10px;
margin-top: 10px;
height: 400px;
overflow-y: scroll;
font-family: 'Courier New', monospace;
font-size: 12px;
}
#status {
font-weight: bold;
font-size: 18px;
padding: 10px;
border-radius: 4px;
background: #e8e8e8;
margin-bottom: 10px;
}
#log p {
margin: 2px 0;
padding: 2px 0;
}
#log p:hover {
background: #e0e0e0;
}
.connected { color: green; }
.error { color: red; }
.warning { color: orange; }

View File

@@ -1,16 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Hot Reload Test</title>
<link rel="stylesheet" href="test-hot-reload.css">
</head>
<body>
<h1>Hot Reload Test</h1>
<div id="status">Initializing...</div>
<div id="log"></div>
<script src="test-hot-reload.js"></script>
</body>
</html>

View File

@@ -1,81 +0,0 @@
// Hot Reload Test JavaScript
document.addEventListener('DOMContentLoaded', function() {
const statusDiv = document.getElementById('status');
const logDiv = document.getElementById('log');
function log(message, className = '') {
const time = new Date().toLocaleTimeString();
const p = document.createElement('p');
p.innerHTML = `[${time}] ${message}`;
if (className) {
p.className = className;
}
logDiv.appendChild(p);
logDiv.scrollTop = logDiv.scrollHeight;
console.log(message);
}
log('Testing Hot Reload connection...');
const eventSource = new EventSource('/dev-hot-reload-minimal.php');
eventSource.addEventListener('open', function() {
statusDiv.textContent = 'Connected to Hot Reload server!';
statusDiv.className = 'connected';
statusDiv.style.color = 'green';
log('✅ Hot Reload connected', 'connected');
});
eventSource.addEventListener('message', function(event) {
log('📨 Message: ' + event.data);
});
eventSource.addEventListener('connected', function(event) {
const data = JSON.parse(event.data);
log('🔗 Connected: ' + data.message, 'connected');
});
eventSource.addEventListener('reload', function(event) {
const data = JSON.parse(event.data);
log('🔄 Reload event: ' + data.message + ' (' + data.type + ')', 'warning');
// Handle different reload types
if (data.type === 'css') {
log('♻️ Hot-reloading CSS...', 'connected');
// Reload CSS files
document.querySelectorAll('link[rel="stylesheet"]').forEach(link => {
const href = link.href;
link.href = href + (href.includes('?') ? '&' : '?') + 't=' + Date.now();
});
} else if (data.type === 'full') {
log('🔄 Full page reload in 2 seconds...', 'warning');
setTimeout(() => {
window.location.reload();
}, 2000);
} else if (data.type === 'hmr') {
log('⚡ HMR update detected', 'connected');
// HMR would be handled by build tools like Vite
}
});
eventSource.addEventListener('heartbeat', function(event) {
log('💓 Heartbeat received');
});
eventSource.addEventListener('error', function(error) {
statusDiv.textContent = 'Connection error';
statusDiv.className = 'error';
statusDiv.style.color = 'red';
log('❌ Connection error - retrying...', 'error');
});
// Test file change simulation after 3 seconds
setTimeout(() => {
log('🧪 Hot Reload system is ready! Try editing a PHP file in src/ to see live reloading.', 'connected');
}, 3000);
// Clean up on page unload
window.addEventListener('beforeunload', function() {
eventSource.close();
});
});

View File

@@ -1,15 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<title>Test</title>
</head>
<body>
<h1>✅ NGINX funktioniert!</h1>
<p>Performance Fix erfolgreich - Discovery System optimiert!</p>
<ul>
<li>Vorher: 4+ Sekunden Timeout</li>
<li>Nachher: 0.09 Sekunden ⚡</li>
<li>Verbesserung: 40x schneller!</li>
</ul>
</body>
</html>