Fix: deploy target + Traefik-Labels + Next rewrites
- deploy-vps.sh: free-warez.top → free-warez.win (eldov.win liegt auf .win, nicht .top). Vorheriger Deploy lief auf .top ohne Traefik-Routing. - docker-compose.yml: Traefik-Labels analog w-make-com (Router für eldov.win + www.eldov.win, websecure entrypoint, HTTP→HTTPS-Redirect). Service hängt am 'proxy'-Netzwerk. - next.config.ts: Rewrites als Backup zum proxy.ts (/ → /de, /projekte/[slug] → /de/projects/[slug]). In manchen Setups greift der proxy.ts nicht zuverlässig für statische Routen — doppelt hält besser. - src/app/page.tsx: Root-Route serviert DE-Inhalt direkt, damit Healthchecks und Bots eine echte Antwort bekommen (kein endloser Redirect).
This commit is contained in:
+43
-3
@@ -1,14 +1,22 @@
|
||||
# Compose-Service für eldov.win.
|
||||
# Host-übergreifend konsistent mit w-make-com: data-Volume für die SQLite-DB,
|
||||
# .env für Secrets, kein externer Port.
|
||||
# Host: free-warez.win (gleicher VPS-Cluster wie w-make.com).
|
||||
# Traefik routet eldov.win per Docker-Labels zum Container.
|
||||
#
|
||||
# Auf dem VPS muss liegen:
|
||||
# - Traefik-Netzwerk 'proxy' (vom traefik3-crowdsec-stack Container erstellt)
|
||||
# - .env.local mit ADMIN_PASSWORD + SESSION_SECRET
|
||||
# - Volume 'eldov_data' für die SQLite-DB
|
||||
|
||||
services:
|
||||
app:
|
||||
build:
|
||||
context: .
|
||||
dockerfile: Dockerfile
|
||||
args:
|
||||
NEXT_PUBLIC_SITE_URL: ${NEXT_PUBLIC_SITE_URL:-https://eldov.win}
|
||||
image: eldov-portfolio:latest
|
||||
container_name: eldov-portfolio
|
||||
mem_limit: 512m
|
||||
restart: unless-stopped
|
||||
env_file:
|
||||
- .env.local
|
||||
@@ -16,15 +24,47 @@ services:
|
||||
- NODE_ENV=production
|
||||
- NEXT_TELEMETRY_DISABLED=1
|
||||
- DB_PATH=/app/data/eldov.db
|
||||
# Hinter Traefik: X-Forwarded-For für Rate-Limiting vertrauen
|
||||
- TRUST_PROXY_HEADERS=true
|
||||
volumes:
|
||||
- eldov_data:/app/data
|
||||
expose:
|
||||
- "3000"
|
||||
security_opt:
|
||||
- no-new-privileges:true
|
||||
healthcheck:
|
||||
test: ["CMD", "node", "-e", "fetch('http://127.0.0.1:3000/').then(r=>process.exit(r.ok?0:1)).catch(()=>process.exit(1))"]
|
||||
test: ["CMD", "node", "-e", "fetch('http://127.0.0.1:3000/').then(r=>process.exit(r.ok||r.status===307?0:1)).catch(()=>process.exit(1))"]
|
||||
interval: 30s
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
start_period: 30s
|
||||
networks:
|
||||
- default
|
||||
- proxy
|
||||
labels:
|
||||
- "traefik.enable=true"
|
||||
- "traefik.docker.network=proxy"
|
||||
- "traefik.http.routers.eldov-win.rule=Host(`eldov.win`) || Host(`www.eldov.win`)"
|
||||
- "traefik.http.routers.eldov-win.priority=100"
|
||||
- "traefik.http.routers.eldov-win.entrypoints=websecure"
|
||||
- "traefik.http.routers.eldov-win.tls=true"
|
||||
- "traefik.http.routers.eldov-win.tls.certresolver=http_resolver"
|
||||
- "traefik.http.routers.eldov-win.middlewares=default@file,crowdsec-bouncer-plugin@file"
|
||||
- "traefik.http.routers.eldov-win.service=eldov-win"
|
||||
- "traefik.http.services.eldov-win.loadbalancer.server.port=3000"
|
||||
# HTTP→HTTPS-Redirect für die unverschlüsselte Variante (Traefik
|
||||
# bringt dafür eine eingebaute redirectScheme-Middleware mit).
|
||||
- "traefik.http.routers.eldov-win-http.rule=Host(`eldov.win`) || Host(`www.eldov.win`)"
|
||||
- "traefik.http.routers.eldov-win-http.entrypoints=web"
|
||||
- "traefik.http.routers.eldov-win-http.middlewares=redirect-to-https"
|
||||
- "traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https"
|
||||
- "traefik.http.middlewares.redirect-to-https.redirectscheme.permanent=true"
|
||||
|
||||
volumes:
|
||||
eldov_data:
|
||||
name: eldov_data
|
||||
|
||||
networks:
|
||||
proxy:
|
||||
name: proxy
|
||||
external: true
|
||||
|
||||
Reference in New Issue
Block a user