Preview-Router: öffentliche Seiten überstehen Server-Neustart

Nach einem Neustart startet der Kundenbereich oft vor Appwrite. Bisher
lieferte getPublicSubdomains dann ein leeres Set, syncPreviewTls setzte
alle Preview-Hosts hinter die Login-Weiche (preview-chain) und wiederholte
das nie. Öffentliche Seiten wie anelia-wolf und emmas-schatzkiste waren
bis zum nächsten Deploy nur noch mit Login erreichbar bzw. 403.

- Antwortet Appwrite nicht, übernimmt syncPreviewTls die öffentlichen
  Seiten aus der zuletzt geschriebenen preview-hosts.yml. Neue Subdomains
  bleiben login-geschützt, ohne alte Datei ist alles geschützt.
- Beim Start wird der Abgleich alle 15 s wiederholt (max. 10 min), bis er
  mit Appwrite-Daten geklappt hat.
- Tests: Datei lesen, Abgleich mit/ohne Appwrite, Startup-Wiederholung.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
ClaudeandClaude Opus 5.5 committed 2026-09-26 22:19:33 +00:00
1 parent ba9916cfe6
commit d5eb908cb6
3 files changed
+218 -10

No files matched your search

+2 -4
View File
@@ -3,7 +3,7 @@ import path from 'node:path'
import { fileURLToPath } from 'node:url'
import { config, assertServerConfig, WOMS_DATABASE_ID } from './config.js'
import { verifyDatabaseAccess } from './services/appwriteAdmin.js'
import { syncPreviewTls } from './services/previewDeploy.js'
import { syncPreviewTlsOnStartup } from './services/previewDeploy.js'
import { requireSession, sessionMiddleware } from './middleware/session.js'
import authRoutes from './routes/auth.js'
import projectsRoutes from './routes/projects.js'
@@ -101,9 +101,7 @@ app.use((err, _req, res, _next) => {
const server = app.listen(config.port, '0.0.0.0', () => {
console.log(`Webklar Kundenbereich läuft auf Port ${config.port}`)
syncPreviewTls()
.then((r) => console.log('[startup] Preview-TLS-Sync:', JSON.stringify(r)))
.catch((err) => console.error('[startup] Preview-TLS-Sync fehlgeschlagen:', err.message))
syncPreviewTlsOnStartup()
verifyDatabaseAccess().then((result) => {
if (result.ok) return
console.error(