docker.recipes

Send Encrypted File Sharing

beginner

Simple, private file sharing with automatic expiry (Firefox Send fork).

Overview

Send is a privacy-focused file sharing platform that emerged as a continuation of Mozilla's discontinued Firefox Send project. This self-hosted solution provides end-to-end encryption for temporary file sharing, where files are encrypted in the browser before upload and automatically deleted after download or expiration. The encryption keys never touch the server, ensuring true zero-knowledge file sharing. This deployment combines Send with Redis to create a robust temporary file sharing service. Redis serves as the session store and metadata cache, tracking download counts, expiration times, and file metadata without ever accessing the actual file contents. The in-memory nature of Redis makes it perfect for managing the ephemeral data associated with temporary file shares, while Send handles the encrypted file storage and browser-based encryption/decryption. This stack is ideal for organizations, developers, or privacy-conscious individuals who need secure file sharing without relying on third-party services. Unlike traditional cloud storage solutions, this setup ensures that sensitive documents, source code, or personal files remain encrypted and automatically purged, making it perfect for temporary collaborations, secure document handoffs, or any scenario where data retention policies require automatic cleanup.

Key Features

  • Client-side end-to-end encryption using AES-GCM with keys generated in browser
  • Automatic file expiration with configurable time limits up to 7 days
  • Download count limits with files auto-deleting after specified downloads
  • Maximum 2.5GB file size support for large document and media sharing
  • Redis-powered session management and metadata tracking for performance
  • Zero-knowledge architecture where server never sees encryption keys
  • No user accounts required - anonymous file sharing with secure links
  • Mobile-responsive web interface supporting drag-and-drop uploads

Common Use Cases

  • 1Secure sharing of confidential business documents with automatic cleanup
  • 2Developer collaboration for sharing source code snippets and build artifacts
  • 3Healthcare organizations sharing patient records with HIPAA compliance needs
  • 4Legal firms exchanging sensitive case documents with time-limited access
  • 5Remote teams sharing temporary project files without permanent cloud storage
  • 6Educational institutions distributing course materials with controlled access
  • 7Personal use for sharing family photos or documents with automatic deletion

Prerequisites

  • Minimum 640MB RAM (512MB for Redis, 128MB for Send application)
  • Port 1234 available for Send web interface access
  • BASE_URL environment variable configured for proper link generation
  • Sufficient disk space for uploaded files (considering 2.5GB max per file)
  • Modern web browser supporting WebCrypto API for client-side encryption
  • Basic understanding of temporary file sharing and link expiration concepts

For development & testing. Review security settings, change default credentials, and test thoroughly before production use. See Terms

docker-compose.yml

docker-compose.yml
1services:
2 send:
3 image: registry.gitlab.com/timvisee/send:latest
4 container_name: send
5 environment:
6 - REDIS_HOST=redis
7 - FILE_DIR=/uploads
8 - BASE_URL=${BASE_URL}
9 - MAX_FILE_SIZE=2684354560
10 - MAX_EXPIRE_SECONDS=604800
11 - MAX_DOWNLOADS=100
12 volumes:
13 - send-uploads:/uploads
14 ports:
15 - "1234:1234"
16 depends_on:
17 - redis
18 networks:
19 - send-network
20 restart: unless-stopped
21
22 redis:
23 image: redis:7-alpine
24 container_name: send-redis
25 volumes:
26 - redis-data:/data
27 networks:
28 - send-network
29 restart: unless-stopped
30
31volumes:
32 send-uploads:
33 redis-data:
34
35networks:
36 send-network:
37 driver: bridge

.env Template

.env
1# Send
2BASE_URL=http://localhost:1234
3# Max file size: 2.5GB
4# Max expiry: 7 days

Usage Notes

  1. 1Web UI at http://localhost:1234
  2. 2End-to-end encryption
  3. 3Set download limits and expiry
  4. 4Firefox Send fork
  5. 5No account needed

Individual Services(2 services)

Copy individual services to mix and match with your existing compose files.

send
send:
  image: registry.gitlab.com/timvisee/send:latest
  container_name: send
  environment:
    - REDIS_HOST=redis
    - FILE_DIR=/uploads
    - BASE_URL=${BASE_URL}
    - MAX_FILE_SIZE=2684354560
    - MAX_EXPIRE_SECONDS=604800
    - MAX_DOWNLOADS=100
  volumes:
    - send-uploads:/uploads
  ports:
    - "1234:1234"
  depends_on:
    - redis
  networks:
    - send-network
  restart: unless-stopped
redis
redis:
  image: redis:7-alpine
  container_name: send-redis
  volumes:
    - redis-data:/data
  networks:
    - send-network
  restart: unless-stopped

Quick Start

terminal
1# 1. Create the compose file
2cat > docker-compose.yml << 'EOF'
3services:
4 send:
5 image: registry.gitlab.com/timvisee/send:latest
6 container_name: send
7 environment:
8 - REDIS_HOST=redis
9 - FILE_DIR=/uploads
10 - BASE_URL=${BASE_URL}
11 - MAX_FILE_SIZE=2684354560
12 - MAX_EXPIRE_SECONDS=604800
13 - MAX_DOWNLOADS=100
14 volumes:
15 - send-uploads:/uploads
16 ports:
17 - "1234:1234"
18 depends_on:
19 - redis
20 networks:
21 - send-network
22 restart: unless-stopped
23
24 redis:
25 image: redis:7-alpine
26 container_name: send-redis
27 volumes:
28 - redis-data:/data
29 networks:
30 - send-network
31 restart: unless-stopped
32
33volumes:
34 send-uploads:
35 redis-data:
36
37networks:
38 send-network:
39 driver: bridge
40EOF
41
42# 2. Create the .env file
43cat > .env << 'EOF'
44# Send
45BASE_URL=http://localhost:1234
46# Max file size: 2.5GB
47# Max expiry: 7 days
48EOF
49
50# 3. Start the services
51docker compose up -d
52
53# 4. View logs
54docker compose logs -f

One-Liner

Run this command to download and set up the recipe in one step:

terminal
1curl -fsSL https://docker.recipes/api/recipes/send-file-sharing/run | bash

Troubleshooting

  • Upload fails with 'File too large' error: Check MAX_FILE_SIZE environment variable is set to 2684354560 bytes (2.5GB) and ensure sufficient disk space
  • Redis connection errors in Send logs: Verify REDIS_HOST environment variable matches the Redis service name and both containers are on the same network
  • Generated file links don't work: Ensure BASE_URL environment variable is set correctly to match your domain or IP address
  • Files not expiring automatically: Check Redis container has persistent storage mounted and MAX_EXPIRE_SECONDS is properly configured
  • Browser shows encryption errors: Verify the client browser supports WebCrypto API and is accessing Send over HTTPS in production
  • Container memory issues: Monitor Redis memory usage as it stores all file metadata and increase available RAM if handling many concurrent files

Community Notes

Loading...
Loading notes...

Download Recipe Kit

Get all files in a ready-to-deploy package

Includes docker-compose.yml, .env template, README, and license

Ad Space