Revert "Make the build fit Vercel without breaking the container"
This reverts commit ecbda3f. The deployment goes to a Linux server instead,
so the two accommodations no longer earn their place: output: "standalone"
returns to unconditional, which is what the Dockerfile wants, and
/api/import goes back to 120 seconds — the free-tier ceiling that forced 60
does not apply outside a serverless platform, and a large import benefits
from the headroom.
The Vercel section in DEPLOYMENT.md goes with it.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -1,71 +1,8 @@
|
|||||||
# Deployment
|
# Deployment mit Docker
|
||||||
|
|
||||||
Zwei Wege, beide unterstützt. Das Abbild ist umgebungsneutral — es gibt keine
|
Dieser Guide beschreibt, wie die App (bisher auf Vercel deployed, siehe
|
||||||
Werte mehr, die beim Bauen eingebacken werden —, ein Wechsel ist also
|
`vercel.json`) stattdessen als Docker-Container auf einem beliebigen Server
|
||||||
jederzeit möglich.
|
läuft.
|
||||||
|
|
||||||
| | passt, wenn |
|
|
||||||
|---|---|
|
|
||||||
| [Vercel](#vercel) | ihr nichts betreiben wollt; schnellster Weg |
|
|
||||||
| [Docker](#deployment-mit-docker) | es in eure eigene Infrastruktur soll |
|
|
||||||
|
|
||||||
**In beiden Fällen gleich:** die Umgebungsvariablen aus [Abschnitt 1](#1-env-anlegen),
|
|
||||||
die Umleitungs-URI in der Entra-Registrierung, und dass eine neue Person nach
|
|
||||||
ihrer ersten Anmeldung eine `profiles`-Zeile braucht (siehe
|
|
||||||
[docs/entra-sso.md](docs/entra-sso.md)).
|
|
||||||
|
|
||||||
## Vercel
|
|
||||||
|
|
||||||
Das Repository liegt auf `git.elycon.solutions` — einem selbst betriebenen
|
|
||||||
Git. **Vercels Git-Anbindung kann nur GitHub, GitLab und Bitbucket**, dieses
|
|
||||||
Repository lässt sich dort also nicht verknüpfen. Zwei Möglichkeiten:
|
|
||||||
|
|
||||||
### a) Von der Arbeitsstation ausrollen (ohne GitHub)
|
|
||||||
|
|
||||||
```bash
|
|
||||||
npx vercel login
|
|
||||||
npx vercel link
|
|
||||||
npx vercel --prod
|
|
||||||
```
|
|
||||||
|
|
||||||
Funktioniert mit jedem Repository. Der Preis: kein automatisches Ausrollen
|
|
||||||
bei einem Push — jede Veröffentlichung ist ein bewusster Befehl. Für zwei
|
|
||||||
Personen ist das eher Vorteil als Nachteil.
|
|
||||||
|
|
||||||
### b) Zusätzlich nach GitHub spiegeln
|
|
||||||
|
|
||||||
```bash
|
|
||||||
git remote add github git@github.com:<konto>/alpenwerk-hr.git
|
|
||||||
git push github feat/sap-om-org-model
|
|
||||||
```
|
|
||||||
|
|
||||||
Danach das GitHub-Repository in Vercel verbinden. Ab dann rollt jeder Push
|
|
||||||
aus. Zwei Fernziele bedeuten aber auch: beide müssen gepflegt werden.
|
|
||||||
|
|
||||||
### Danach
|
|
||||||
|
|
||||||
1. **Umgebungsvariablen** im Vercel-Projekt setzen (Settings → Environment
|
|
||||||
Variables), dieselben wie in [Abschnitt 1](#1-env-anlegen). `AUTH_URL` ist
|
|
||||||
nicht nötig, Vercel setzt den Host selbst.
|
|
||||||
2. **Umleitungs-URI** in der Entra-Registrierung ergänzen:
|
|
||||||
`https://<projekt>.vercel.app/api/auth/callback/microsoft-entra-id`
|
|
||||||
3. Der nächtliche Lauf ist über `vercel.json` bereits eingerichtet.
|
|
||||||
|
|
||||||
Zwei Eigenheiten der Plattform, die im Code berücksichtigt sind:
|
|
||||||
`output: "standalone"` entfällt dort automatisch (Vercel baut selbst), und
|
|
||||||
`/api/import` ist auf 60 Sekunden begrenzt — die Obergrenze des kostenlosen
|
|
||||||
Tarifs. Im Pro-Tarif liessen sich 300 setzen, falls eine Importdatei mit
|
|
||||||
vielen tausend Zeilen ansteht.
|
|
||||||
|
|
||||||
Der Verbindungspool passt zu serverlosen Aufrufen, **weil** `DATABASE_URL`
|
|
||||||
auf den Transaktions-Modus zeigt (Port 6543). Mit dem Sitzungs-Modus wären
|
|
||||||
die 15 Verbindungen des Tarifs nach wenigen gleichzeitigen Aufrufen
|
|
||||||
verbraucht.
|
|
||||||
|
|
||||||
## Deployment mit Docker
|
|
||||||
|
|
||||||
Dieser Guide beschreibt, wie die App stattdessen als Docker-Container auf
|
|
||||||
einem beliebigen Server läuft.
|
|
||||||
|
|
||||||
## Was wird containerisiert – und was nicht
|
## Was wird containerisiert – und was nicht
|
||||||
|
|
||||||
|
|||||||
@@ -25,11 +25,7 @@ class Rueckabwicklung extends Error {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 60 Sekunden, weil das die Obergrenze im kostenlosen Vercel-Tarif ist —
|
export const maxDuration = 120;
|
||||||
// ein höherer Wert lässt sich dort nicht ausrollen. Auf einem eigenen Server
|
|
||||||
// gilt die Angabe ohnehin nicht, und im Pro-Tarif liesse sie sich auf 300
|
|
||||||
// heben, falls eine Datei mit vielen tausend Zeilen ansteht.
|
|
||||||
export const maxDuration = 60;
|
|
||||||
|
|
||||||
type Antwort = {
|
type Antwort = {
|
||||||
ok: boolean;
|
ok: boolean;
|
||||||
|
|||||||
@@ -44,12 +44,8 @@ function contentSecurityPolicy(): string {
|
|||||||
|
|
||||||
const nextConfig: NextConfig = {
|
const nextConfig: NextConfig = {
|
||||||
// Emits a self-contained .next/standalone server (only the deps actually
|
// Emits a self-contained .next/standalone server (only the deps actually
|
||||||
// used at runtime, no full node_modules) — what the Dockerfile copies in.
|
// used at runtime, no full node_modules) - what the Dockerfile copies in.
|
||||||
//
|
output: "standalone",
|
||||||
// Auf Vercel ist das falsch: dort baut die Plattform selbst und erwartet
|
|
||||||
// die übliche Ausgabe. `VERCEL` setzt sie in jeder Baustrecke, die Angabe
|
|
||||||
// entfällt dort also von selbst — und der Docker-Weg bleibt unberührt.
|
|
||||||
output: process.env.VERCEL ? undefined : "standalone",
|
|
||||||
// Baseline security headers (clickjacking, MIME-sniffing, referrer leakage,
|
// Baseline security headers (clickjacking, MIME-sniffing, referrer leakage,
|
||||||
// browser feature access) plus the report-only CSP described above.
|
// browser feature access) plus the report-only CSP described above.
|
||||||
async headers() {
|
async headers() {
|
||||||
|
|||||||
Reference in New Issue
Block a user