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