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.