From 305de38ff6f1f5786d76c253ac4f3459dc670edd Mon Sep 17 00:00:00 2001 From: Basilosaurusrex <77463090+Basilosaurusrex@users.noreply.github.com> Date: Fri, 6 Feb 2026 19:46:26 +0100 Subject: [PATCH] .env commit --- .env.example | 15 +++++++++++---- docs/DEPLOY-SERVER.md | 34 ++++++++++++++++++++++++++++++++++ docs/PROMPT-SERVER-SETUP.md | 36 ++++++++++++++++++++++++++++++++++++ package.json | 2 ++ scripts/setup-env.cjs | 25 +++++++++++++++++++++++++ 5 files changed, 108 insertions(+), 4 deletions(-) create mode 100644 docs/DEPLOY-SERVER.md create mode 100644 docs/PROMPT-SERVER-SETUP.md create mode 100644 scripts/setup-env.cjs diff --git a/.env.example b/.env.example index 9a233fb..47c1715 100644 --- a/.env.example +++ b/.env.example @@ -1,4 +1,11 @@ -VITE_APPWRITE_PROJECT_ID="696b82270034001dab69" -VITE_APPWRITE_ENDPOINT="https://appwrite.webklar.com/v1" -VITE_APPWRITE_DATABASE_ID="contacts" -VITE_APPWRITE_CONTACT_COLLECTION_ID="messages" +# Appwrite – Kopie auf dem Server als .env anlegen (wird nicht mit Git gepusht!) +# Nach dem Klonen/Pullen: npm run setup:env oder cp .env.example .env + +VITE_APPWRITE_ENDPOINT=https://appwrite.webklar.com/v1 +VITE_APPWRITE_PROJECT_ID=696b82270034001dab69 +VITE_APPWRITE_DATABASE_ID=698124a20035e8f6dc42 +VITE_APPWRITE_CONTACT_COLLECTION_ID=contact_submissions + +# Optional: Supabase (falls später genutzt) +# VITE_SUPABASE_URL= +# VITE_SUPABASE_ANON_KEY= diff --git a/docs/DEPLOY-SERVER.md b/docs/DEPLOY-SERVER.md new file mode 100644 index 0000000..0eeea62 --- /dev/null +++ b/docs/DEPLOY-SERVER.md @@ -0,0 +1,34 @@ +# Deployment auf dem Server + +## .env wird nicht mit Git übertragen + +Die Datei **`.env`** steht in `.gitignore` und wird beim `git push` **nicht** mit ins Repository übernommen. Auf dem Server fehlen dadurch die Umgebungsvariablen für Appwrite – die Meldung *"Appwrite ist nicht konfiguriert"* entsteht genau deshalb. + +## Lösung: .env auf dem Server anlegen + +**Im Repo mitgepusht:** `.env.example`, `scripts/setup-env.cjs`, und die Script-Einträge in `package.json` (`setup:env`, `deploy:server`). Die `.env` wird weiterhin **nicht** ins Git aufgenommen. + +**Nach dem ersten Klonen oder nach jedem Pullen auf dem Server:** + +**Option A – ein Befehl (empfohlen):** +Legt `.env` aus `.env.example` an (falls noch nicht vorhanden) und baut die App: + +```bash +npm run deploy:server +``` + +**Option B – einzeln:** +Nur `.env` anlegen (überschreibt keine bestehende `.env`): + +```bash +npm run setup:env +npm run build +``` + +**Option C – mit deploy.sh / Container:** +Wenn auf dem Server ein `deploy.sh` und Docker/Compose genutzt werden: Nach `git pull` kann `deploy.sh` die `.env` aus `.env.example` erzeugen (falls fehlend) und vor jedem Build eine `.env.local` aus den Container-Umgebungsvariablen schreiben (z. B. alle `VITE_APPWRITE_*`). So kommt die Appwrite-Konfiguration zuverlässig ins Frontend-Build. Ein Neustart von Nginx ist in der Regel nicht nötig; der neue Build liegt in `/out` (oder dem konfigurierten Ausgabeordner). + +**Option D – manuell:** +`.env` selbst anlegen mit dem Inhalt von `.env.example` oder den Werten aus dieser Doku, danach `npm run build`. + +**.env nicht committen** – sie bleibt nur lokal bzw. auf dem Server und enthält projektspezifische Werte. diff --git a/docs/PROMPT-SERVER-SETUP.md b/docs/PROMPT-SERVER-SETUP.md new file mode 100644 index 0000000..a950015 --- /dev/null +++ b/docs/PROMPT-SERVER-SETUP.md @@ -0,0 +1,36 @@ +# Prompt für KI mit Server-Zugriff (automatisches .env + Build) + +Kopiere den folgenden Block und gib ihn einer KI, die Zugriff auf deinen Server hat (z. B. Cursor Agent, SSH-Terminal, Deployment-KI). + +--- + +## Prompt (zum Kopieren) + +``` +Kontext: Das Projekt ist eine Vite/React-Webapp (Webklar). Die Datei .env wird aus Sicherheitsgründen nicht mit Git mitgepusht. Auf dem Server fehlt sie deshalb nach git pull – dadurch erscheint die Meldung "Appwrite ist nicht konfiguriert". + +Aufgabe: +1. In das Projektverzeichnis der Webklar-App wechseln (dort wo package.json und .env.example liegen). +2. .env aus der Vorlage anlegen, falls sie noch nicht existiert: + - Befehl ausführen: npm run setup:env + - (Das Skript kopiert .env.example nach .env und überschreibt keine bestehende .env.) +3. Die App neu bauen, damit die Umgebungsvariablen ins Frontend kommen: + - Befehl ausführen: npm run build +4. Optional: Den Webserver/Prozess neu starten (z. B. PM2, systemd, nginx), der die gebauten Dateien aus dist/ ausliefert oder die App betreibt. + +Alternativ kannst du in einem Schritt beides machen: npm run deploy:server (legt .env an, falls fehlend, und führt danach vite build aus). + +Wichtig: Im Projektroot ausführen, also dort wo package.json und scripts/setup-env.js liegen. +``` + +--- + +## Kurzversion (nur Befehle) + +Wenn die KI schon im richtigen Projektordner ist: + +``` +Führe nacheinander aus: +1. npm run deploy:server +2. [Webserver/App neu starten, falls nötig – z. B. pm2 restart webklar oder systemctl restart dein-service] +``` diff --git a/package.json b/package.json index dd1850d..8efd31a 100644 --- a/package.json +++ b/package.json @@ -6,6 +6,8 @@ "scripts": { "dev": "vite", "build": "vite build", + "setup:env": "node scripts/setup-env.cjs", + "deploy:server": "npm run setup:env && vite build", "build:dev": "vite build --mode development", "lint": "eslint .", "preview": "vite preview", diff --git a/scripts/setup-env.cjs b/scripts/setup-env.cjs new file mode 100644 index 0000000..bc8de72 --- /dev/null +++ b/scripts/setup-env.cjs @@ -0,0 +1,25 @@ +#!/usr/bin/env node +/** + * Legt .env aus .env.example an, falls .env noch nicht existiert. + * .cjs damit es unter "type": "module" (package.json) mit require() läuft. + * Für Deployment: deploy.sh kann vor dem Build .env.local aus Container-Env schreiben. + */ +const fs = require("fs"); +const path = require("path"); + +const envPath = path.join(process.cwd(), ".env"); +const examplePath = path.join(process.cwd(), ".env.example"); + +if (fs.existsSync(envPath)) { + console.log(".env existiert bereits – nichts geändert."); + process.exit(0); +} + +if (!fs.existsSync(examplePath)) { + console.error(".env.example nicht gefunden. Bitte manuell .env anlegen."); + process.exit(1); +} + +fs.copyFileSync(examplePath, envPath); +console.log(".env wurde aus .env.example erstellt. Bitte danach 'npm run build' ausführen."); +process.exit(0);