Auch verfügbar in: DE Deutsch

Docker Installation

Inhalt

Prerequisites

  • Docker 24+ or Docker Desktop 4.x
  • Docker Compose 2.20+
  • A public hostname pointing at the server (for production with TLS)
  • Ports 80 and 443 free on the host (for Caddy)

Production with Caddy + TLS

1. Download the Compose file

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

2. Set the hostname

Edit Caddyfile.example, replace send.example.com with your domain. Save it as Caddyfile.

3. Start

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

Caddy fetches a Let's Encrypt certificate on first start. After about 30 seconds the service is reachable at https://send.example.com.

What runs

Container Image Purpose
itsweber-send ghcr.io/itsweber-official/itsweber-send:latest Application (API + SSR frontend)
itsweber-send-caddy caddy:2-alpine TLS reverse proxy, security-header layer

The application listens on :3000 inside the network and is not exposed publicly. Only Caddy binds host ports :80 and :443.


LAN / home-lab (self-signed TLS)

For testing on a local network without a public domain:

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

Caddy uses tls internal to issue a self-signed certificate. Browsers show a warning on first visit — add an exception once.

The LAN compose binds :8443 on the host (instead of :443) so it can coexist with other services. Connect via https://<host-ip>:8443.


Persistent data

By default a Docker named volume send-data holds:

send-data/
  shares.db        # SQLite database (better-sqlite3)
  uploads/         # encrypted blob storage

To use a host directory instead, mount it:

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

Make sure the host directory is writable by UID 10001 (the container's app user).


Updating

docker compose pull
docker compose up -d

Database migrations are applied automatically on container start. No manual SQL is required between patch and minor releases.


Backup

The volume contains the entire state. Stop the container, copy the volume, restart:

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

For S3 storage, only shares.db is in the volume — blobs live in the bucket and need a separate backup strategy.


Building from source

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