Multi-Stage-Build mit standalone-Output, non-root Nutzer node (UID 1000) und Healthcheck auf /api/health. Der Entrypoint prueft zuerst, ob /data beschreibbar ist, und sagt bei einem Rechteproblem genau, was zu tun ist; danach laufen die Migrationen und erst dann startet die App. Der Migrations-Runner wird beim Build mit esbuild zu einer einzelnen CJS-Datei gebuendelt. Damit braucht das Runtime-Image weder drizzle-kit noch tsx - nur das native better-sqlite3, das ohnehin dabei ist. update.sh sichert data und .env, holt den neuen Stand, baut, startet und wartet auf den Healthcheck. Wird der Container nicht gesund, rollt es Code und Container auf den vorherigen Commit zurueck und nennt den Pfad der Sicherung. .gitattributes erzwingt LF: eine entrypoint.sh mit CRLF scheitert im Container mit "no such file or directory" auf der Shebang-Zeile. Verifiziert: Image gebaut (358 MB), Container healthy, Migration laeuft, Registrierung des ersten Nutzers funktioniert, sharp arbeitet unter musl. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
21 lines
188 B
Plaintext
21 lines
188 B
Plaintext
node_modules
|
|
.next
|
|
.git
|
|
.github
|
|
data
|
|
data-e2e
|
|
test-results
|
|
playwright-report
|
|
blob-report
|
|
coverage
|
|
.env
|
|
.env.*.local
|
|
*.log
|
|
docs
|
|
README.md
|
|
QUICKSTART.md
|
|
CHANGELOG.md
|
|
CLAUDE.md
|
|
.vscode
|
|
.idea
|