Auch verfügbar in: 🇬🇧 English

Docker-Installation

Inhalt

English

Voraussetzungen

  • Docker 24+ oder Docker Desktop 4.x
  • Docker Compose 2.20+
  • Ein öffentlicher Hostname, der auf den Server zeigt (für Produktion mit TLS)
  • Ports 80 und 443 frei am Host (für Caddy)

Produktion mit Caddy + TLS

1. Compose-Datei herunterladen

curl -O https://raw.githubusercontent.com/itsweber/itsweber-send/main/docker/docker-compose.yml
curl -O https://raw.githubusercontent.com/itsweber/itsweber-send/main/docker/Caddyfile.example

2. Hostname setzen

Bearbeite Caddyfile.example, ersetze send.example.com durch deine Domain. Speichere als Caddyfile.

3. Starten

BASE_URL=https://send.example.com docker compose up -d

Caddy holt beim ersten Start ein Let's-Encrypt-Zertifikat. Nach etwa 30 Sekunden ist der Dienst unter https://send.example.com erreichbar.

Was läuft

Container Image Zweck
itsweber-send ghcr.io/itsweber/itsweber-send:latest Anwendung (API + SSR-Frontend)
itsweber-send-caddy caddy:2-alpine TLS-Reverse-Proxy, Security-Header-Layer

Die Anwendung lauscht intern auf :3000 und ist nicht öffentlich exponiert. Nur Caddy bindet die Host-Ports :80 und :443.


LAN / Home-Lab (selbst-signiertes TLS)

Für Tests im lokalen Netz ohne öffentliche Domain:

docker compose -f docker/docker-compose.lan.yml up -d

Caddy nutzt tls internal für ein selbst-signiertes Zertifikat. Browser zeigen beim ersten Besuch eine Warnung — einmalig als Ausnahme hinzufügen.

Das LAN-Compose bindet Host-Port :8443 (statt :443), damit es neben anderen Services laufen kann. Verbindung über https://<host-ip>:8443.


Persistente Daten

Standardmäßig hält ein Docker-Volume send-data den gesamten Zustand:

send-data/
  shares.db        # SQLite-Datenbank (better-sqlite3)
  uploads/         # verschlüsselter Blob-Speicher

Um stattdessen ein Host-Verzeichnis zu nutzen:

volumes:
  - /srv/itsweber-send:/data

Sicherstellen, dass das Verzeichnis von UID 10001 (dem app-Nutzer im Container) beschreibbar ist.


Update

docker compose pull
docker compose up -d

DB-Migrationen werden beim Container-Start automatisch angewendet. Zwischen Patch- und Minor-Releases sind keine manuellen SQL-Schritte nötig.


Backup

Das Volume enthält den gesamten Zustand. Container stoppen, Volume kopieren, neu starten:

docker compose stop itsweber-send
docker run --rm -v send-data:/data -v $PWD:/backup alpine \
  tar czf /backup/send-backup-$(date +%F).tar.gz /data
docker compose start itsweber-send

Bei S3-Storage liegt nur shares.db im Volume — die Blobs leben im Bucket und brauchen ein eigenes Backup.


Aus dem Quellcode bauen

git clone https://github.com/ITSWEBER-OFFICIAL/itsweber-send
cd itsweber-send
pnpm install
docker build -f docker/Dockerfile -t itsweber-send:dev .