docker.recipes

Send (Firefox Send)

intermediate

Simple private file sharing with encryption.

Overview

Send is a fork of Mozilla's discontinued Firefox Send service, providing secure temporary file sharing with client-side encryption. This implementation uses end-to-end encryption where files are encrypted in the browser before upload, ensuring that even the server never has access to unencrypted content. Users can set expiration limits based on time duration or download count, making it ideal for sharing sensitive documents that shouldn't persist indefinitely. This Docker stack combines Send with Redis to provide a complete file sharing platform. Redis serves as the backend data store for managing file metadata, download counters, expiration tracking, and user sessions. The combination ensures fast lookup times for file information while maintaining the temporary nature of shared files through Redis's built-in expiration capabilities. This configuration suits organizations needing secure internal file sharing, developers requiring temporary asset distribution, and privacy-conscious teams who want control over their file sharing infrastructure. Unlike cloud-based alternatives, this self-hosted approach keeps all file metadata and encrypted content within your infrastructure, providing complete data sovereignty while maintaining the convenience of web-based file sharing.

Key Features

  • Client-side AES-128-GCM encryption before upload ensures server-side privacy
  • Configurable file expiration by download count and time limits
  • Redis-backed metadata storage for fast file lookup and session management
  • Support for ffsend CLI client enabling command-line file sharing workflows
  • Configurable maximum file size limits via MAX_FILE_SIZE environment variable
  • One-time download URLs that automatically expire after access
  • Browser-based interface requiring no client software installation
  • Automatic cleanup of expired files and associated Redis metadata

Common Use Cases

  • 1Secure document sharing between legal teams with automatic expiration
  • 2Temporary distribution of software builds and deployment artifacts
  • 3Privacy-focused file sharing for healthcare organizations handling sensitive data
  • 4Internal corporate file sharing avoiding external cloud services
  • 5Developer collaboration for sharing logs, configs, and debug information
  • 6Educational institutions distributing assignment materials with access limits
  • 7Homelab enthusiasts creating personal secure file sharing for family use

Prerequisites

  • Docker host with minimum 640MB RAM (512MB for Redis, 128MB for Send)
  • Port 1234 available for Send web interface access
  • Understanding of Redis data persistence implications for file metadata
  • Basic knowledge of environment variable configuration for file size limits
  • Network access planning for users accessing the web interface

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 restart: unless-stopped
6 environment:
7 REDIS_HOST: redis
8 FILE_DIR: /uploads
9 volumes:
10 - send_uploads:/uploads
11 ports:
12 - "1234:1234"
13 depends_on:
14 - redis
15 networks:
16 - send
17
18 redis:
19 image: redis:alpine
20 container_name: send-redis
21 restart: unless-stopped
22 networks:
23 - send
24
25volumes:
26 send_uploads:
27
28networks:
29 send:
30 driver: bridge

.env Template

.env
1# Files auto-expire after download

Usage Notes

  1. 1Docs: https://github.com/timvisee/send#readme
  2. 2Access at http://localhost:1234 - Firefox Send fork
  3. 3End-to-end encryption in browser before upload
  4. 4Set expiration: time limit and/or download count
  5. 5Max file size configurable via MAX_FILE_SIZE env var
  6. 6CLI client: ffsend (pip install ffsend)

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
  restart: unless-stopped
  environment:
    REDIS_HOST: redis
    FILE_DIR: /uploads
  volumes:
    - send_uploads:/uploads
  ports:
    - "1234:1234"
  depends_on:
    - redis
  networks:
    - send
redis
redis:
  image: redis:alpine
  container_name: send-redis
  restart: unless-stopped
  networks:
    - send

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 restart: unless-stopped
8 environment:
9 REDIS_HOST: redis
10 FILE_DIR: /uploads
11 volumes:
12 - send_uploads:/uploads
13 ports:
14 - "1234:1234"
15 depends_on:
16 - redis
17 networks:
18 - send
19
20 redis:
21 image: redis:alpine
22 container_name: send-redis
23 restart: unless-stopped
24 networks:
25 - send
26
27volumes:
28 send_uploads:
29
30networks:
31 send:
32 driver: bridge
33EOF
34
35# 2. Create the .env file
36cat > .env << 'EOF'
37# Files auto-expire after download
38EOF
39
40# 3. Start the services
41docker compose up -d
42
43# 4. View logs
44docker 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/run | bash

Troubleshooting

  • Upload fails with large files: Increase MAX_FILE_SIZE environment variable and check available disk space in send_uploads volume
  • Redis connection errors in Send logs: Verify redis container is running and accessible via 'send' network, check Redis container logs
  • Files not expiring automatically: Confirm Redis container has sufficient memory and isn't evicting keys, check Redis maxmemory-policy setting
  • Browser encryption errors: Clear browser cache and cookies, ensure JavaScript is enabled for client-side encryption
  • Download links not working: Check Redis key expiration settings and verify file still exists in uploads volume
  • Send container fails to start: Verify /uploads directory permissions and ensure send_uploads volume is properly mounted

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

Components

sendredis

Tags

#send#sharing#encrypted#temporary

Category

Storage & Backup
Ad Space