Warum einen eigenen Pastebin hosten?
Pastebin-Dienste wie pastebin.com oder hastebin.de sind praktisch – aber was passiert mit deinen Daten? Öffentliche Pastes sind für jeden einsehbar, der den Link errät. Und selbst „private“ Pastes liegen auf fremden Servern in unbekannten Rechtsräumen.
Ein selbst-gehosteter Pastebin gibt dir die volle Kontrolle: Du bestimmst, wie lange Pastes leben, wer sie sehen darf, ob sie nach dem Lesen verschwinden (Burn-after-Reading) und welche Daten gespeichert werden. Perfekt für: Entwickler-Teams, die Code teilen, Admins, die Logs analysieren, oder einfach für Passwörter, die du kurz teilen musst.
Microbin ist bewusst minimal gehalten (ein Container, eine SQLite-Datei, keine Abhängigkeiten), damit du ihn in 2 Minuten zum Laufen bringst. Im Gegensatz zu Full-Blown-Lösungen wie HedgeDoc (ehemals CodiMD) oder Outline fokussiert sich Microbin auf eine Sache: Text teilen. Und das macht es perfekt.
Warum SQLite und nicht PostgreSQL?
Microbin nutzt SQLite als Datenbank – und das ist hier die richtige Entscheidung! Ein Pastebin-Dienst hat keine komplexen Abfragen oder Relationen. Du suchst nicht „alle Pastes von User X aus Monat Y“, sondern: „Gib mir Paste mit ID 123“. SQLite ist dafür perfekt optimiert, braucht keinen separaten Datenbank-Server und macht Backups trivial (einfach die Datei kopieren).
Außerdem: Ein Pastebin verarbeitet typischerweise wenige Schreibzugriffe pro Minute. SQLite kommt mit solchen Lasten problemlos klar, ohne dass du einen PostgreSQL-Container (mit eigenem RAM-Bedarf) betreiben musst. Weniger Container = weniger Komplexität = weniger kann schiefgehen.
Was ist Microbin?
Microbin ist ein minimalistischer, selbst-gehosteter Pastebin-Dienst – ideal zum Teilen von Code, Logs, Konfigurationen oder Text-Snippets. Anders als öffentliche Dienste wie Pastebin.com bleibt alles unter deiner Kontrolle: verschlüsselt, mit Passwortschutz, automatischer Löschung und QR-Code.
Architektur
Client (Browser)
│
▼
Nginx (SSL:443)
│
▼
Microbin (Docker:8080)
│
▼
microbin_data (SQLite + Files)
Super simpel – nur ein Container, eine SQLite-Datenbank, keine externen Abhängigkeiten.
1. docker-compose.yml
services:
microbin:
container_name: microbin
image: danielszabo99/microbin:latest
restart: unless-stopped
ports:
- "127.0.0.1:9765:8080"
volumes:
- ./microbin_data:/app/microbin_data
env_file:
- .env
environment:
- MICROBIN_PUBLIC_PATH=https://paste.example.com
- MICROBIN_PORT=8080
- MICROBIN_WIDE=true
- MICROBIN_HIGHLIGHTSYNTAX=true
- MICROBIN_QR=true
- MICROBIN_EDITABLE=true
- MICROBIN_PRIVATE=true
- MICROBIN_NO_LISTING=true
- MICROBIN_ENABLE_BURN_AFTER=true
- MICROBIN_GC_DAYS=90
- MICROBIN_DEFAULT_EXPIRY=24hour
.env (Umgebungsvariablen)
MICROBIN_ADMIN_USERNAME=admin MICROBIN_ADMIN_PASSWORD=DEIN_SICHERES_PASSWORT
2. Nginx Reverse-Proxy
server {
listen 443 ssl http2;
server_name paste.example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
location / {
proxy_pass http://127.0.0.1:9765;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_read_timeout 90;
proxy_connect_timeout 90;
proxy_redirect off;
client_max_body_size 10M;
}
}
3. Alle Environment-Variablen erklärt
| Variable | Wert | Beschreibung |
|---|---|---|
MICROBIN_PUBLIC_PATH |
https://paste.example.com | Öffentliche URL (wichtig für QR-Codes & Links) |
MICROBIN_WIDE |
true | Breites Layout für mehr Platz |
MICROBIN_HIGHLIGHTSYNTAX |
true | Syntax-Highlighting für Code |
MICROBIN_QR |
true | QR-Code für jeden Paste generieren |
MICROBIN_EDITABLE |
true | Pastes nachträglich bearbeitbar |
MICROBIN_PRIVATE |
true | Nur mit Link einsehbar (keine öffentliche Liste) |
MICROBIN_NO_LISTING |
true | Keine öffentliche Paste-Liste |
MICROBIN_ENABLE_BURN_AFTER |
true | Paste nach einmaligem Lesen löschen |
MICROBIN_GC_DAYS |
90 | Autom. Aufräumen nach 90 Tagen |
MICROBIN_DEFAULT_EXPIRY |
24hour | Standard-Ablaufzeit: 24h |
4. Schnellstart
# Verzeichnis anlegen mkdir -p /opt/microbin && cd /opt/microbin # docker-compose.yml erstellen (siehe oben) nano docker-compose.yml # .env mit Admin-Zugang nano .env # Stack starten docker compose up -d # Prüfen docker compose ps curl http://127.0.0.1:9765
5. Nginx-Konfiguration für ISPConfig
Wenn Microbin hinter ISPConfig läuft, nutze die ISPConfig-Web-GUI, um die Domain paste.example.com anzulegen, und füge in der Nginx-Direktiven-Option folgendes ein:
location / {
proxy_pass http://127.0.0.1:9765;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_read_timeout 90;
proxy_connect_timeout 90;
proxy_redirect off;
client_max_body_size 10M;
}
6. Funktionen im Detail
🔒 Privatmodus
Mit MICROBIN_PRIVATE=true sind alle Pastes standardmäßig privat – nur wer den direkten Link kennt, kann sie sehen. Perfekt für Team-internen Austausch.
🔥 Burn after reading
Pastes können so konfiguriert werden, dass sie sich nach dem ersten Aufruf selbst zerstören. Ideal für Passwörter, API-Keys oder temporäre Zugangsdaten.
📱 QR-Codes
Jeder Paste bekommt automatisch einen QR-Code generiert. Perfekt zum Teilen per Handy – einfach scannen und los.
🧹 Auto-Cleanup
Microbin löscht automatisch Pastes, die älter als 90 Tage sind (MICROBIN_GC_DAYS=90). Der Speicher bleibt sauber.
✨ Syntax-Highlighting
Code wird automatisch farbig hervorgehoben. Unterstützt die gängigsten Sprachen (Python, JavaScript, Go, Bash, YAML, JSON, etc.).
7. Backup
Da Microbin SQLite nutzt, reicht ein einfaches File-Backup:
# Container stoppen docker compose down # Daten sichern tar -czf microbin-backup-$(date +%Y%m%d).tar.gz microbin_data/ # Container starten docker compose up -d
Fazit
Microbin ist mit einem Docker-Container in 5 Minuten einsatzbereit. Perfekt als privater Pastebin-Dienst für Entwickler, Teams oder den eigenen Bedarf.
🔗 GitHub: danielszabo99/microbin | Weitere Projekte auf GitHub
