Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
3.4 KiB
SendSecret
Sichere Passwort-Uebergabe fuer Kunden. Eigenes Frontend vor cryptgeon: das Passwort wird im Browser verschluesselt, landet als einmalig abrufbare Notiz in cryptgeon, und per Mail geht nur der Link raus. Der Schluessel steht im URL-Fragment und erreicht den Server nie.
Zwei Einstiege:
/- Kundenformular. Verschickt den Link automatisch anRECIPIENT_EMAIL./link- erzeugt nur den Link zum selbst Weitergeben.
Aufbau
Browser --https--> Nginx Proxy Manager --> sendsecret (app)
| / statische Seite
| /api/send Mailversand
| /healthz Deploy-Gate
+--> cryptgeon --> redis
cryptgeon und redis haengen nur im internen Netz sendsecret-internal
und sind von aussen nicht erreichbar.
Lokal entwickeln
cd app && npm ci && npm run build && npm start
Braucht ein laufendes cryptgeon unter http://cryptgeon:8000 sowie die
Variablen aus .env.example. Einfacher ist der komplette Stack:
docker network create nginx-proxy-manager_default # nur beim ersten Mal
cp .env.example .env
docker compose up --build
Das Netz ist im Compose als external deklariert, weil es auf dem Server
dem Nginx Proxy Manager gehoert - lokal muss es einmal von Hand angelegt
werden. Die App laeuft dann ohne Port-Mapping nur im Netz; zum Ausprobieren
docker compose run --service-ports oder kurzzeitig ein ports: in einer
lokalen Override-Datei.
Konfiguration
.env im Repo-Root, Vorlage in .env.example:
| Variable | Bedeutung |
|---|---|
SMTP_HOST / SMTP_PORT |
Mailserver, Port 465 schaltet auf TLS |
SMTP_USER / SMTP_PASS |
Zugangsdaten |
SMTP_FROM |
Absender im Format Name <adresse> |
RECIPIENT_EMAIL |
Empfaenger der Kundenmails |
APP_URL |
Oeffentliche Basis-URL, prueft die eingereichten Links |
Auf dem Server kommt der Inhalt nicht aus einer Datei, sondern aus dem
Gitea-Repo-Secret DOTENV.
Deployment
Per Tag-Push, Konventionen in DEPLOY.md.
Einmalig einzurichten:
-
Repo-Secret
DOTENVanlegen (Repo -> Einstellungen -> Actions -> Secrets) mit dem kompletten.env-Inhalt, mehrzeilig. Kanonische Fassung in den Passwortmanager - Gitea gibt den Wert nicht mehr heraus. -
Pruefen, ob auf dem Server schon Container mit den festen Namen laufen:
docker ps -a --filter name=sendsecret. Falls ja, im alten Verzeichnis einmaldocker compose down, sonst kollidieren die Namen. -
Proxy Host im Nginx Proxy Manager:
Feld Wert Domain Names secret.lucas-orth.deScheme httpForward Hostname / IP sendsecretForward Port 3000Danach Let's-Encrypt-Zertifikat ausstellen und "Force SSL" aktivieren.
-
Deployen:
git tag v1.0.0 && git push origin v1.0.0
Danach pruefen:
docker ps --filter name=sendsecret --format '{{.Names}}\t{{.Status}}'
sendsecret muss healthy zeigen, nicht Restarting.
Versionen
cupcakearmy/cryptgeon ist auf 2.9.3 gepinnt - das ist derselbe Stand,
den latest bisher geliefert hat. Die Frontend-Bundles verschluesseln mit
occulto 2.0.6 gegen dieses API-Format; ein Upgrade betrifft beide Seiten.