Datenschutz-freundliche Website
🛡️ Eigener datensparsamer Webserver mit Caddy, Docker und OpenSSH (ohne Plesk, ohne Logs)
Du möchtest eine Website hosten, aber ohne unnötige Server-Logs, ohne Drittanbieter, ohne FTP und ohne Plesk? Dann bist du hier richtig.
In dieser Anleitung erfährst du Schritt für Schritt, wie du:
- einen eigenen V-Server aufsetzt,
- SFTP-Zugriff mit OpenSSH einrichtest,
- Docker und Caddy verwendest, um eine statische Website bereitzustellen,
- alle Logs deaktivierst,
- und automatische Updates per Watchtower einrichtest.
🔁 Hinweis: Überall, wo example.com
oder examplecom
steht, musst du deinen echten Domainnamen einsetzen (z. B. simon99.de
oder simon99de
).
1. 🔧 V-Server vorbereiten (Debian 12)
Installiere ein frisches Debian 12-Image auf deinem V-Server. Dadurch wird sichergestellt, dass keinerlei Altlasten oder Logdateien vorhanden sind.
Als Root-Nutzer einmal updaten:
apt update && apt upgrade -y
2. 🔐 OpenSSH mit SFTP einrichten (statt FTP oder SFTPGo)
Erstelle einen Benutzer für deine Website – z. B. examplecomadmin
:
sudo adduser --home /home/examplecomadmin examplecom
Dann in /etc/ssh/sshd_config
folgende Zeilen am Ende einfügen:
Match User webuser
ChrootDirectory /home/examplecomadmin
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no
Abschließend SSH neu starten:
sudo systemctl restart ssh
Jetzt kann Publii via SFTP (OpenSSH) direkt in /home/examplecomadmin/
hochladen.
Remote-Pfad in Publii: public/
(weil du dich direkt im richtigen Verzeichnis befindest)
3. 📦 Docker und Docker Compose installieren (per apt)
Wenn noch nicht geschehen, installiere Docker & Compose:
sudo apt install docker docker-compose -y
Anschließend sicherstellen, dass Docker beim Booten startet:
sudo systemctl enable docker
sudo systemctl start docker
Optional: Den aktuellen Benutzer der Docker-Gruppe hinzufügen:
sudo usermod -aG docker examplecom
(Danach ggf. einmal neu einloggen)
4. 🌐 Website per Docker + Caddy bereitstellen (ohne Logs, mit HTTPS)
Erstelle ein Arbeitsverzeichnis (z. B. /home/examplecomadmin/docker
) und wechsle hinein:
mkdir -p ~/docker
cd ~/docker
📄 Caddyfile anlegen
Erstelle eine Datei namens Caddyfile
mit folgendem Inhalt – angepasst an deinen Domainnamen:
nano Caddyfile
www.example.com {
redir https://example.com{uri}
log {
output discard
}
}
example.com {
root * /srv/www/examplecom
file_server
handle_errors {
@404 {
expression {http.error.status_code} == 404
}
rewrite @404 /404.html
file_server
}
log {
output discard
}
}
Diese Konfiguration sorgt für:
- 📦 HTTPS + automatische Zertifikate über Let's Encrypt
- 🔁 Weiterleitung von www.example.com → example.com
- ❌ Keine Logs durch
output discard
- 🧭 Eine eigene
404.html
-Seite bei Fehlern
Mit STRG + O und dann Enter Speichert man dann die Datei.
Mit STRG + X verlässt man die Datei / den nano Editor dann
Lege nun den Website-Ordner an (dieser Pfad wird gleich in Docker gemountet):
sudo mkdir -p /home/examplecomadmin/public
Hier lädst du später mit Publii deine statische Website hinein.
🛠️ Docker Compose-Datei erstellen
Lege die Datei docker-compose.yml
im selben Verzeichnis an:
services:
caddy:
image: caddy:alpine
container_name: caddy
restart: unless-stopped
ports:
- "80:80"
- "443:443"
volumes:
- ./Caddyfile:///etc/caddy/Caddyfile
- caddy_data:/data
- caddy_config:/config
- /home/examplecomadmin/public:/srv/www/examplecom
watchtower:
image: containrrr/watchtower
container_name: watchtower
restart: unless-stopped
volumes:
- /var/run/docker.sock:/var/run/docker.sock
command: --interval 1209600 --cleanup
volumes:
caddy_data:
caddy_config:
- 📂 Caddyfile: definiert alle Domains, Weiterleitungen, Dateipfade und Einstellungen.
- 📁 /home/examplecomadmin/public: dort liegen die von Publii erzeugten Website-Dateien.
- 🔁 Watchtower: aktualisiert automatisch alle Container alle 14 Tage (
1209600 Sekunden
).
🚀 Container starten
Starte jetzt Caddy + Watchtower:
docker compose up -d
Die Website ist danach per https://example.com
erreichbar – mit automatischem HTTPS und ohne jegliche Logs.
5. 🧱 Hinweis für Publii: Remote-Pfad korrekt einstellen
Publii lädt standardmäßig in einen Ordner namens public/
hoch. Genau dieser Ordner wird im Container als Website-Wurzel verwendet.
Wichtig: Da du dich per SFTP direkt in /home/examplecomadmin/
befindest, trägst du bei Publii einfach nur ein:
- Remote-Pfad:
public/
Die Dateien landen dann exakt dort, wo Caddy sie erwartet.
🔐 Datenschutz & rechtlicher Hinweis
Mit der hier beschriebenen Konfiguration ist deine Website besonders datenschutzfreundlich:
- Es werden keinerlei Besucher-Logs oder IP-Adressen gespeichert (
output discard
in Caddy). - Es gibt keine Cookies, da keine Benutzerdaten verarbeitet werden.
- Keine externen Tracker oder Skripte eingebunden.
- Keine Fonts von Google oder anderen Anbietern eingebunden.
Achtung: Wenn du externe Inhalte wie YouTube-Videos, Karten (z. B. Google Maps) oder andere eingebettete Dienste verwendest, musst du diese ggf. blockieren, bis der Besucher zugestimmt hat (Cookiebanner / Consent-Tool). Zudem musst du sie im Datenschutz erwähnen.
Die hier bereitgestellten Informationen stellen keine Rechtsberatung dar. Datenschutzgesetze (wie die DSGVO) ändern sich, daher übernehme ich keine Haftung für die rechtliche Vollständigkeit oder Aktualität. Im Zweifel solltest du rechtlichen Rat einholen.
📄 Beispielabschnitt für deine Datenschutzerklärung
3. Hosting und Server-Log-Dateien
Der Webserver dieser Website wird vollständig selbst betrieben (Selfhosting). Dabei kommen keine externen Hostingdienste, Content Delivery Networks (CDNs) oder Drittanbieter-Tools zum Einsatz. Es erfolgt keine Auswertung des Nutzerverhaltens, keine Speicherung von IP-Adressen und keine Erstellung von Server-Log-Dateien auf dem Server selbst. Auch auf das Setzen von Cookies wird verzichtet.
Zur Auslieferung der Inhalte wird der Webserver „Caddy“ verwendet. Dieser wurde so konfiguriert, dass keine Protokolle gespeichert werden („output discard“).
Die Datenübertragung erfolgt ausschließlich über verschlüsselte HTTPS-Verbindungen (TLS/SSL), um die Vertraulichkeit und Integrität der übertragenen Daten zu gewährleisten.
Hinweis: Bei einigen Hosting-Anbietern (z. B. V-Server oder Root-Server) kann es sein, dass im Rahmen der Infrastrukturüberwachung – etwa bei Angriffen wie DDoS – bestimmte Verbindungsdaten wie IP-Adresse und Port temporär und automatisiert erfasst und geloggt werden. Diese Vorgänge erfolgen außerhalb des eigenen Servers und liegen in der Verantwortung des Hosting-Anbieters. In der Regel werden diese Daten nur im Angriffsfall analysiert und anschließend gelöscht.