spa: deploy-script und htaccess für svelte.joerg-lohrer.de
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
1fb77669e6
commit
8af049a9ff
|
|
@ -0,0 +1,13 @@
|
||||||
|
RewriteEngine On
|
||||||
|
|
||||||
|
# HTTPS forcieren
|
||||||
|
RewriteCond %{HTTPS} !=on
|
||||||
|
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
|
||||||
|
|
||||||
|
# Existierende Datei oder Verzeichnis? Direkt ausliefern.
|
||||||
|
RewriteCond %{REQUEST_FILENAME} -f [OR]
|
||||||
|
RewriteCond %{REQUEST_FILENAME} -d
|
||||||
|
RewriteRule ^ - [L]
|
||||||
|
|
||||||
|
# Alles andere → SPA-Fallback (SvelteKit mit adapter-static)
|
||||||
|
RewriteRule ^ /index.html [L]
|
||||||
|
|
@ -0,0 +1,10 @@
|
||||||
|
# Scripts
|
||||||
|
|
||||||
|
- **`deploy-svelte.sh`** — deployed den SvelteKit-Build aus `app/build/` nach
|
||||||
|
`svelte.joerg-lohrer.de` via FTPS. Benötigt `.env.local` im Repo-Root mit
|
||||||
|
den Variablen `SVELTE_FTP_HOST`, `SVELTE_FTP_USER`, `SVELTE_FTP_PASS`,
|
||||||
|
`SVELTE_FTP_REMOTE_PATH`. Aufruf:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
cd app && npm run build && cd .. && ./scripts/deploy-svelte.sh
|
||||||
|
```
|
||||||
|
|
@ -0,0 +1,55 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
# Deploy: SvelteKit-Build nach svelte.joerg-lohrer.de per FTPS.
|
||||||
|
# Credentials kommen aus ./.env.local (gitignored), Variablen-Prefix SVELTE_FTP_.
|
||||||
|
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
ROOT="$(cd "$(dirname "$0")/.." && pwd)"
|
||||||
|
cd "$ROOT"
|
||||||
|
|
||||||
|
if [ ! -f .env.local ]; then
|
||||||
|
echo "FEHLER: .env.local fehlt — Credentials ergänzen (siehe .env.example)." >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# nur SVELTE_FTP_* exportieren (via Tempfile — process substitution ist nicht
|
||||||
|
# überall verfügbar, je nach Shell/Sandbox).
|
||||||
|
_ENV_TMP="$(mktemp)"
|
||||||
|
trap 'rm -f "$_ENV_TMP"' EXIT
|
||||||
|
grep -E '^SVELTE_FTP_' .env.local > "$_ENV_TMP" || true
|
||||||
|
set -a
|
||||||
|
# shellcheck disable=SC1090
|
||||||
|
. "$_ENV_TMP"
|
||||||
|
set +a
|
||||||
|
|
||||||
|
for v in SVELTE_FTP_HOST SVELTE_FTP_USER SVELTE_FTP_PASS SVELTE_FTP_REMOTE_PATH; do
|
||||||
|
if [ -z "${!v:-}" ]; then
|
||||||
|
echo "FEHLER: $v fehlt in .env.local." >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
BUILD_DIR="$ROOT/app/build"
|
||||||
|
if [ ! -d "$BUILD_DIR" ]; then
|
||||||
|
echo "FEHLER: app/build nicht vorhanden. Bitte vorher 'npm run build' in app/ ausführen." >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Lade Build von $BUILD_DIR nach ftp://$SVELTE_FTP_HOST$SVELTE_FTP_REMOTE_PATH"
|
||||||
|
|
||||||
|
# pro Datei ein curl-Upload (zuverlässig auf macOS ohne lftp)
|
||||||
|
find "$BUILD_DIR" -type f -print0 | while IFS= read -r -d '' local_file; do
|
||||||
|
rel="${local_file#$BUILD_DIR/}"
|
||||||
|
remote="ftp://$SVELTE_FTP_HOST${SVELTE_FTP_REMOTE_PATH%/}/$rel"
|
||||||
|
echo " → $rel"
|
||||||
|
# --tls-max 1.2: All-Inkl/Kasserver FTPS schließt bei TLS 1.3 die Data-
|
||||||
|
# Connection mit "426 Transfer aborted" — mit 1.2 läuft es sauber durch.
|
||||||
|
curl -sSf --ssl-reqd --tls-max 1.2 --ftp-create-dirs \
|
||||||
|
--retry 3 --retry-delay 2 --retry-all-errors \
|
||||||
|
--connect-timeout 15 \
|
||||||
|
--user "$SVELTE_FTP_USER:$SVELTE_FTP_PASS" \
|
||||||
|
-T "$local_file" "$remote"
|
||||||
|
done
|
||||||
|
|
||||||
|
echo "Upload fertig. Live-Check:"
|
||||||
|
curl -sIL "https://svelte.joerg-lohrer.de/" | head -5
|
||||||
Loading…
Reference in New Issue