Wrapper-Frontend vor cryptgeon: der Browser verschluesselt lokal, per Mail geht nur der Link raus. Fuer das Deployment nach den Konventionen aus DEPLOY.md hergerichtet: - docker-compose.yml mit festem Projekt- und Container-Namen, kein ports-Mapping, Healthcheck als Deploy-Gate. cryptgeon und redis liegen im internen Netz, nur app haengt im Web-Netz. - cryptgeon von latest auf 2.9.3 gepinnt. Das ist derselbe Stand, den latest bisher geliefert hat; 2.6.2 existiert nicht. - /healthz in server.js, vor dem Catch-all-Proxy registriert. - Dockerfile auf npm ci mit Lockfile und non-root umgestellt. - .gitea/workflows/deploy.yml: Build und Syntaxpruefung vor dem Deploy, .env aus dem Repo-Secret DOTENV. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
3.0 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:
cp .env.example .env && docker compose up --build
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.