$docker.recipes

Send (Firefox Send)

intermediate

Simple private file sharing with encryption.

[i]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

  • [1]Secure document sharing between legal teams with automatic expiration
  • [2]Temporary distribution of software builds and deployment artifacts
  • [3]Privacy-focused file sharing for healthcare organizations handling sensitive data
  • [4]Internal corporate file sharing avoiding external cloud services
  • [5]Developer collaboration for sharing logs, configs, and debug information
  • [6]Educational institutions distributing assignment materials with access limits
  • [7]Homelab 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
[!]

WARNING: 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

[i]Usage Notes

  1. [1]Docs: https://github.com/timvisee/send#readme
  2. [2]Access at http://localhost:1234 - Firefox Send fork
  3. [3]End-to-end encryption in browser before upload
  4. [4]Set expiration: time limit and/or download count
  5. [5]Max file size configurable via MAX_FILE_SIZE env var
  6. [6]CLI 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