generated from Dicken/dickendock
Zentrale .env-Konfiguration für alle Umgebungsvariablen
This commit is contained in:
41
.env.example
Normal file
41
.env.example
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
# LaunchPad – Umgebungsvariablen
|
||||||
|
#
|
||||||
|
# Kopiere diese Datei nach ".env" und trage echte Werte ein:
|
||||||
|
# cp .env.example .env
|
||||||
|
#
|
||||||
|
# ".env" ist in .gitignore und wird NIE committet. Auf dem Server
|
||||||
|
# (/opt/LaunchPad) muss sie nach dem ersten `git pull` einmalig manuell
|
||||||
|
# angelegt werden, da git-ignorierte Dateien nicht mitgepullt werden.
|
||||||
|
|
||||||
|
# ─── Backend ─────────────────────────────────────────────────────────
|
||||||
|
# Node-Umgebung: "development" oder "production"
|
||||||
|
NODE_ENV=production
|
||||||
|
|
||||||
|
# Host/Port, auf dem das Backend lauscht (innerhalb des Containers)
|
||||||
|
HOST=0.0.0.0
|
||||||
|
PORT=3001
|
||||||
|
|
||||||
|
# Pfad zur SQLite-Datenbankdatei (im Docker-Container: das gemountete Volume)
|
||||||
|
DATABASE_PATH=/data/launchpad.db
|
||||||
|
|
||||||
|
# Log-Level für Fastify/Pino: fatal | error | warn | info | debug | trace
|
||||||
|
LOG_LEVEL=info
|
||||||
|
|
||||||
|
# CORS-Origin fürs Frontend. "true" erlaubt alle Origins (Default – im lokalen
|
||||||
|
# Betrieb hinter Nginx unbedenklich). Für strengere Regeln z. B.:
|
||||||
|
# CORS_ORIGIN=https://launchpad.home
|
||||||
|
CORS_ORIGIN=true
|
||||||
|
|
||||||
|
# ─── FritzBox-Scan (optional) ───────────────────────────────────────
|
||||||
|
# Nur nötig für POST /api/scan/fritzbox. TR-064-Zugriff muss in der FritzBox
|
||||||
|
# aktiviert sein: Heimnetz -> Netzwerk -> Netzwerkeinstellungen ->
|
||||||
|
# "Zugriff für Anwendungen zulassen". Leer lassen = Scan liefert kontrolliert
|
||||||
|
# HTTP 400 statt zu fehlen.
|
||||||
|
FRITZBOX_HOST=192.168.1.1
|
||||||
|
FRITZBOX_PORT=49000
|
||||||
|
FRITZBOX_USERNAME=
|
||||||
|
FRITZBOX_PASSWORD=
|
||||||
|
|
||||||
|
# ─── Frontend (nur für lokale Entwicklung, `pnpm dev:frontend`) ─────
|
||||||
|
# Ziel für den Vite-Dev-Proxy von /api -> Backend
|
||||||
|
BACKEND_URL=http://localhost:3001
|
||||||
35
README.md
35
README.md
@@ -10,6 +10,7 @@ Kein überladenes Dashboard. Keine Kacheln. Im Mittelpunkt steht eine extrem sch
|
|||||||
```bash
|
```bash
|
||||||
git clone <repo-url> LaunchPad
|
git clone <repo-url> LaunchPad
|
||||||
cd LaunchPad
|
cd LaunchPad
|
||||||
|
cp .env.example .env # optional anpassen, siehe unten
|
||||||
docker compose up -d --build
|
docker compose up -d --build
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -78,23 +79,31 @@ Noch **nicht** enthalten (folgt in den nächsten Commits):
|
|||||||
— beide Backend-APIs existieren bereits vollständig
|
— beide Backend-APIs existieren bereits vollständig
|
||||||
- TanStack Router, Plugin-System, PWA-Manifest, shadcn/ui, RHF
|
- TanStack Router, Plugin-System, PWA-Manifest, shadcn/ui, RHF
|
||||||
|
|
||||||
### FritzBox-Scan konfigurieren
|
### Umgebungsvariablen (.env)
|
||||||
|
|
||||||
Der FritzBox-Scan benötigt drei Umgebungsvariablen (z. B. in `docker-compose.yml`
|
Alle Umgebungsvariablen sind in `.env.example` dokumentiert. Für die lokale
|
||||||
beim `backend`-Service oder lokal per `.env`):
|
Entwicklung und für Docker Compose:
|
||||||
|
|
||||||
```
|
```bash
|
||||||
FRITZBOX_HOST=192.168.1.1
|
cp .env.example .env
|
||||||
FRITZBOX_USERNAME=<TR-064-Benutzername>
|
# .env anpassen (v. a. FRITZBOX_* für den FritzBox-Scan)
|
||||||
FRITZBOX_PASSWORD=<TR-064-Passwort>
|
|
||||||
FRITZBOX_PORT=49000 # optional, Default 49000
|
|
||||||
```
|
```
|
||||||
|
|
||||||
TR-064-Zugriff muss in der FritzBox unter *Heimnetz → Netzwerk → Netzwerkeinstellungen
|
`.env` ist in `.gitignore` und wird nie committet. **Auf dem Server
|
||||||
→ „Zugriff für Anwendungen zulassen"* aktiviert sein. Getestet wurde der komplette
|
(`/opt/LaunchPad`) muss sie nach dem ersten `git pull` einmalig manuell
|
||||||
SOAP-/Digest-Auth-Ablauf gegen einen Mock-Server mit realistischer TR-064-Antwort
|
angelegt werden**, da git-ignorierte Dateien nicht mitgepullt werden:
|
||||||
(korrektes und falsches Passwort); ein Test gegen eine echte FritzBox war in dieser
|
|
||||||
Entwicklungsumgebung nicht möglich (kein Netzwerkzugriff auf lokale Geräte).
|
```bash
|
||||||
|
cd /opt/LaunchPad
|
||||||
|
cp .env.example .env
|
||||||
|
nano .env # FRITZBOX_* eintragen
|
||||||
|
docker compose up -d --build
|
||||||
|
```
|
||||||
|
|
||||||
|
Fehlt `.env` komplett, startet alles trotzdem mit den in `docker-compose.yml`
|
||||||
|
hinterlegten Defaults – der FritzBox-Scan liefert dann kontrolliert `HTTP 400`
|
||||||
|
statt abzustürzen. Für `pnpm dev:backend` (ohne Docker) wird `.env` automatisch
|
||||||
|
über `dotenv` geladen (`apps/backend/src/env.ts`, wird als allererstes importiert).
|
||||||
|
|
||||||
Siehe [`docs/ROADMAP.md`](./docs/ROADMAP.md) für die geplante Reihenfolge.
|
Siehe [`docs/ROADMAP.md`](./docs/ROADMAP.md) für die geplante Reihenfolge.
|
||||||
|
|
||||||
|
|||||||
@@ -15,6 +15,7 @@
|
|||||||
"@launchpad/shared": "workspace:*",
|
"@launchpad/shared": "workspace:*",
|
||||||
"@fastify/cors": "^9.0.1",
|
"@fastify/cors": "^9.0.1",
|
||||||
"better-sqlite3": "^11.3.0",
|
"better-sqlite3": "^11.3.0",
|
||||||
|
"dotenv": "^16.4.5",
|
||||||
"drizzle-orm": "^0.33.0",
|
"drizzle-orm": "^0.33.0",
|
||||||
"fastify": "^4.28.1"
|
"fastify": "^4.28.1"
|
||||||
},
|
},
|
||||||
|
|||||||
11
apps/backend/src/env.ts
Normal file
11
apps/backend/src/env.ts
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
import { config } from "dotenv";
|
||||||
|
import { fileURLToPath } from "node:url";
|
||||||
|
import { dirname, resolve } from "node:path";
|
||||||
|
|
||||||
|
const currentDir = dirname(fileURLToPath(import.meta.url));
|
||||||
|
|
||||||
|
// apps/backend/src/env.ts (bzw. apps/backend/dist/env.js) -> Repo-Root liegt
|
||||||
|
// drei Verzeichnisebenen höher. Existiert dort keine .env (z. B. im
|
||||||
|
// Docker-Image), passiert einfach nichts – die Werte kommen dann bereits aus
|
||||||
|
// der Container-Umgebung (docker-compose env_file/environment).
|
||||||
|
config({ path: resolve(currentDir, "../../../.env") });
|
||||||
@@ -1,3 +1,4 @@
|
|||||||
|
import "./env.js";
|
||||||
import Fastify from "fastify";
|
import Fastify from "fastify";
|
||||||
import cors from "@fastify/cors";
|
import cors from "@fastify/cors";
|
||||||
import { ensureSchema } from "./db/client.js";
|
import { ensureSchema } from "./db/client.js";
|
||||||
|
|||||||
@@ -5,6 +5,9 @@ services:
|
|||||||
dockerfile: apps/backend/Dockerfile
|
dockerfile: apps/backend/Dockerfile
|
||||||
container_name: launchpad-backend
|
container_name: launchpad-backend
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
|
env_file:
|
||||||
|
- path: ./.env
|
||||||
|
required: false
|
||||||
environment:
|
environment:
|
||||||
- DATABASE_PATH=/data/launchpad.db
|
- DATABASE_PATH=/data/launchpad.db
|
||||||
- PORT=3001
|
- PORT=3001
|
||||||
|
|||||||
9
pnpm-lock.yaml
generated
9
pnpm-lock.yaml
generated
@@ -23,6 +23,9 @@ importers:
|
|||||||
better-sqlite3:
|
better-sqlite3:
|
||||||
specifier: ^11.3.0
|
specifier: ^11.3.0
|
||||||
version: 11.10.0
|
version: 11.10.0
|
||||||
|
dotenv:
|
||||||
|
specifier: ^16.4.5
|
||||||
|
version: 16.6.1
|
||||||
drizzle-orm:
|
drizzle-orm:
|
||||||
specifier: ^0.33.0
|
specifier: ^0.33.0
|
||||||
version: 0.33.0(@types/better-sqlite3@7.6.13)(@types/react@18.3.31)(better-sqlite3@11.10.0)(react@18.3.1)
|
version: 0.33.0(@types/better-sqlite3@7.6.13)(@types/react@18.3.31)(better-sqlite3@11.10.0)(react@18.3.1)
|
||||||
@@ -1157,6 +1160,10 @@ packages:
|
|||||||
dlv@1.1.3:
|
dlv@1.1.3:
|
||||||
resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==}
|
resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==}
|
||||||
|
|
||||||
|
dotenv@16.6.1:
|
||||||
|
resolution: {integrity: sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==}
|
||||||
|
engines: {node: '>=12'}
|
||||||
|
|
||||||
drizzle-kit@0.24.2:
|
drizzle-kit@0.24.2:
|
||||||
resolution: {integrity: sha512-nXOaTSFiuIaTMhS8WJC2d4EBeIcN9OSt2A2cyFbQYBAZbi7lRsVGJNqDpEwPqYfJz38yxbY/UtbvBBahBfnExQ==}
|
resolution: {integrity: sha512-nXOaTSFiuIaTMhS8WJC2d4EBeIcN9OSt2A2cyFbQYBAZbi7lRsVGJNqDpEwPqYfJz38yxbY/UtbvBBahBfnExQ==}
|
||||||
hasBin: true
|
hasBin: true
|
||||||
@@ -2640,6 +2647,8 @@ snapshots:
|
|||||||
|
|
||||||
dlv@1.1.3: {}
|
dlv@1.1.3: {}
|
||||||
|
|
||||||
|
dotenv@16.6.1: {}
|
||||||
|
|
||||||
drizzle-kit@0.24.2:
|
drizzle-kit@0.24.2:
|
||||||
dependencies:
|
dependencies:
|
||||||
'@drizzle-team/brocli': 0.10.2
|
'@drizzle-team/brocli': 0.10.2
|
||||||
|
|||||||
Reference in New Issue
Block a user