2.2 KiB
2.2 KiB
⚡ TECHNO-TODO
90s-Terminal/Cyberpunk-Style Todo-App. Bewusst als Proof-of-Concept gebaut, um den kompletten Selbsthosting-Workflow zu testen:
Gitea (Git) → Dokploy (PaaS) → Docker Swarm → Traefik → Live im LAN
Tech-Stack
- Runtime: Node.js 22 (Alpine)
- Framework: Express 4
- Datenbank: SQLite via
better-sqlite3(bewusst statt PostgreSQL — siehe unten) - Templating: EJS
- Style: 90s CRT/Neon-Look (grüne Scanlines, pinker Glow, monospace)
Warum SQLite statt PostgreSQL?
Die erste Version nutzte PostgreSQL über Dokploy's Datenbank-Provisioning. Dabei traten zwei Probleme auf:
- DB-Service wurde nie gestartet — der
techno-dbDocker-Service existierte nicht, die App crashte mitECONNREFUSED/ENOTFOUND. - Der Dokploy-Deploy-Worker hatte zusätzlich einen abgelaufenen API-Key und die Services waren out-of-sync (manuell umbenannt).
Für den POC wurde daher auf SQLite umgestellt — keine externe DB nötig, die App ist
in sich abgeschlossen. Für eine Produktiv-App mit echter Datenbank siehe
docs/DEPLOYMENT.md.
Schnellstart (lokal)
npm install
npm start
# → http://localhost:3000
Schnellstart (Docker)
docker build -t techno-todo .
docker run -p 3000:3000 techno-todo
Dokumentation
| Datei | Inhalt |
|---|---|
docs/DEPLOYMENT.md |
Komplette Dokploy-Deployment-Anleitung — nativer Weg (UI/API) + was tatsächlich gemacht wurde |
docs/AUTODEPLOY.md |
Auto-Deploy-Pipeline — Gitea-Push → automatischer Build + Deploy |
docs/TROUBLESHOOTING.md |
Alle Fehler, die beim POC aufgetreten sind, und ihre Lösungen |
docs/ARCHITECTURE.md |
Netzwerk-Topologie und Infrastruktur-Übersicht |
Live-URL
| Typ | URL |
|---|---|
| Öffentlich | https://todo.kgessner.de |
| LAN | http://techno-todo.192.168.0.184.sslip.io/ |
todo.kgessner.de wird über einen Reverse-Proxy (öffentliche IP 152.53.197.186) auf
192.168.0.184:80 geleitet. Damit Traefik den Request annimmt, muss todo.kgessner.de
als Host in der Traefik-Routing-Regel stehen (siehe docs/ARCHITECTURE.md).