CI / pruefen (push) Has been cancelled
Der Datenbankport wurde in beiden Betriebsarten auf 0.0.0.0 gelegt, obwohl ihn nur die Entwicklung braucht: im Container spricht die Anwendung "db:5432" ueber das Compose-Netz an, und backup.sh geht ueber docker exec. Auf einem Server lauschte Postgres damit im Netz, geschuetzt allein durch das Passwort aus der .env. Die Anleitung riet zwar zu 127.0.0.1, aber als Handgriff statt als Voreinstellung -- die falsche Richtung. Datenbank und Adminer binden jetzt von Haus aus auf 127.0.0.1. Liegen mehrere Stacks auf einem Host und regelt ein gemeinsamer Reverse Proxy den Zugang, braucht Nebula gar keinen Host-Port. docker-compose.server.yml nimmt beide Freigaben zurueck und haengt die Anwendung in ein geteiltes Netz. Das braucht !reset: Compose fuehrt "ports" beim Zusammenfuehren anhaengend statt ersetzend zusammen, eine leere Liste im Override wuerde also nichts loeschen. update.sh las die Adresse aus APP_PORT und haette in diesem Modus einen Port gemeldet, den es nicht gibt. Es fragt jetzt Docker und sagt sonst, dass nur das interne Netz erreichbar ist. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
107 lines
5.3 KiB
Bash
107 lines
5.3 KiB
Bash
# ─────────────────────────────────────────────────────────────
|
||
# Nebula – Beispielkonfiguration
|
||
# Kopieren nach ".env" und Werte anpassen.
|
||
# (Die .env wird sowohl von Next.js als auch von docker compose gelesen.)
|
||
# ─────────────────────────────────────────────────────────────
|
||
|
||
# ── Anwendung ────────────────────────────────────────────────
|
||
# Anzeigename: Seitentitel, Kopfzeile und Name im Passkey-Dialog.
|
||
APP_NAME="Nebula"
|
||
# Kleine Zeile unter dem Namen in der Kopfzeile.
|
||
APP_TAGLINE="Vibe Coding"
|
||
|
||
# Oeffentliche Adresse der Instanz – genau so, wie du sie im Browser aufrufst.
|
||
#
|
||
# WICHTIG fuer Passkeys: Daraus werden die WebAuthn-Relying-Party-ID (der
|
||
# Hostname) und der erwartete Origin abgeleitet. Passt der Wert nicht zur
|
||
# aufgerufenen Adresse, lehnt der Browser die Anmeldung ab. Passkeys brauchen
|
||
# ausserdem einen sicheren Kontext: https:// – oder http://localhost.
|
||
#
|
||
# Wird die rpID spaeter geaendert (anderer Hostname), sind bestehende Passkeys
|
||
# ungueltig und muessen neu angelegt werden. Passwoerter bleiben davon unberuehrt.
|
||
APP_URL="http://localhost:3000"
|
||
|
||
# Port innerhalb des Containers bzw. im Standalone-Betrieb
|
||
PORT="3000"
|
||
# Host-Port-Mapping fuer den App-Container (--profile full)
|
||
APP_PORT="3000"
|
||
|
||
# ── Datenbank ────────────────────────────────────────────────
|
||
# Standalone-Betrieb: App laeuft lokal, Postgres via "docker compose up -d db"
|
||
# oder als nativ installierter Dienst.
|
||
DATABASE_URL="postgresql://nebula:nebula@localhost:5432/nebula?schema=public"
|
||
|
||
# Im Docker-Vollbetrieb (--profile full) setzt compose DATABASE_URL selbst
|
||
# auf den Service-Hostnamen "db" – der Wert oben wird dann nicht verwendet.
|
||
|
||
# Zugangsdaten des Postgres-Containers aus docker-compose.yml
|
||
POSTGRES_USER="nebula"
|
||
POSTGRES_PASSWORD="nebula"
|
||
POSTGRES_DB="nebula"
|
||
# Host-Port, unter dem die Datenbank erreichbar ist. Nur die Entwicklung
|
||
# braucht ihn: im Container spricht die Anwendung "db:5432" an. Deshalb an
|
||
# 127.0.0.1 gebunden, damit er nicht im Netz steht.
|
||
POSTGRES_PORT="127.0.0.1:5432"
|
||
# Host-Port fuer Adminer (--profile tools)
|
||
ADMINER_PORT="127.0.0.1:8080"
|
||
|
||
# ── Betrieb ohne veroeffentlichte Ports ──────────────────────
|
||
# Liegen mehrere Stacks auf demselben Docker-Host und regelt ein gemeinsamer
|
||
# Reverse Proxy den Zugang, veroeffentlicht Nebula gar keinen Port. Dann diese
|
||
# beiden Zeilen aktivieren – danach genuegt ueberall "docker compose up -d":
|
||
# COMPOSE_FILE="docker-compose.yml:docker-compose.server.yml"
|
||
# COMPOSE_PROFILES="full"
|
||
#
|
||
# Name des geteilten Netzes und der Alias, unter dem der Proxy Nebula findet.
|
||
# PROXY_NETWORK="proxy"
|
||
# PROXY_ALIAS="nebula"
|
||
|
||
# ── Sicherheit ───────────────────────────────────────────────
|
||
# Schluessel zur Verschluesselung der Git-Access-Tokens (AES-256-GCM).
|
||
# Erzeugen mit: openssl rand -base64 32
|
||
# oder: node -e "console.log(require('crypto').randomBytes(32).toString('base64'))"
|
||
# oder: npm run setup (legt die .env inkl. Schluessel an)
|
||
# WICHTIG: Wird der Wert nachtraeglich geaendert, sind gespeicherte Git-Tokens
|
||
# nicht mehr entschluesselbar und muessen neu hinterlegt werden. Anmeldungen
|
||
# und Passkeys sind davon nicht betroffen.
|
||
APP_SECRET="bitte-aendern-mindestens-32-zeichen-langer-zufallswert"
|
||
|
||
# Lebensdauer einer Anmeldung in Tagen.
|
||
SESSION_TTL_DAYS="30"
|
||
|
||
# ── Benachrichtigungen ───────────────────────────────────────
|
||
# ntfy und Webhook brauchen nichts weiter – die Ziele werden in der
|
||
# Anwendung unter "Mein Konto" eingerichtet.
|
||
#
|
||
# E-Mail steht erst zur Verfuegung, wenn SMTP_HOST gesetzt ist:
|
||
# SMTP_HOST="smtp.example.com"
|
||
# SMTP_PORT="587"
|
||
# SMTP_SECURE="false" # true bei Port 465, sonst STARTTLS
|
||
# SMTP_USER="nebula@example.com"
|
||
# SMTP_PASSWORD="geheim"
|
||
# SMTP_FROM="Nebula <nebula@example.com>"
|
||
|
||
# Timeout fuer das Zustellen in Millisekunden
|
||
NOTIFY_TIMEOUT_MS="10000"
|
||
|
||
# ── Ausgehende Git-Zugriffe ──────────────────────────────────
|
||
# Timeout fuer Git-API-Aufrufe in Millisekunden
|
||
GIT_API_TIMEOUT_MS="15000"
|
||
|
||
# Schutz vor Server Side Request Forgery: die Basis-URL einer Git-Verbindung
|
||
# ist eine Benutzereingabe und wird vom Server abgerufen.
|
||
#
|
||
# Voreinstellung: Loopback, Link-Local (169.254.x, Cloud-Metadaten), Multicast
|
||
# und CGNAT sind gesperrt; das private LAN ist erlaubt, weil dort ueblicherweise
|
||
# die eigene Gitea-Instanz steht.
|
||
|
||
# Gitea laeuft auf demselben Rechner wie Nebula? Dann auf true setzen.
|
||
# GIT_ALLOW_LOOPBACK="false"
|
||
|
||
# Kein Zugriff ins private Netz (10/8, 172.16/12, 192.168/16, fc00::/7)?
|
||
# GIT_BLOCK_PRIVATE="false"
|
||
|
||
# Strengster Modus: nur diese Hosts sind erlaubt, alles andere wird geblockt.
|
||
# Eine Angabe hier hebt die beiden Schalter darueber auf.
|
||
# GIT_ALLOWED_HOSTS="github.com,gitlab.com,git.meine-firma.de"
|