Deploying Send
Introduction
Send is a self-hosted, encrypted file sharing service that allows you to share files securely with end-to-end encryption. Originally developed by Mozilla as Firefox Send, the project was discontinued but lives on through community forks. Send enables users to upload files and receive a unique link that can be shared with anyone, with the files automatically deleted after a specified time or number of downloads.
Built with Node.js on the backend and a modern web frontend, Send provides a simple drag-and-drop interface for sharing files without requiring recipients to create accounts. All encryption happens client-side in the browser, meaning the server never has access to unencrypted file contents.
Key highlights of Send:
- End-to-End Encryption: Files are encrypted in the browser before upload
- Automatic Expiration: Files automatically delete after time limit or download count
- Password Protection: Add an additional layer of security with passwords
- No Account Required: Recipients can download without creating accounts
- Large File Support: Upload files up to configurable size limits
- Drag-and-Drop Interface: Simple, intuitive file uploading
- Download Limits: Set maximum number of downloads per link
- No Tracking: Privacy-focused with no analytics or tracking
- 100% Open Source: Multiple community forks available
This guide walks through deploying Send on Klutch.sh using Docker, configuring file limits, and providing secure file sharing for your users.
Why Deploy Send on Klutch.sh
Deploying Send on Klutch.sh provides several advantages:
Simplified Deployment: Klutch.sh automatically builds your Send configuration without complex Node.js setup.
Persistent Storage: Attach persistent volumes for file storage that survives restarts.
HTTPS by Default: Klutch.sh provides automatic SSL certificates, essential for secure end-to-end encryption.
Custom Domains: Use your own domain for branded, trustworthy file sharing links.
Always-On Availability: Your file sharing service remains accessible 24/7.
Prerequisites
Before deploying Send on Klutch.sh, ensure you have:
- A Klutch.sh account
- A GitHub account with a repository for your Send configuration
- Basic familiarity with Docker and containerization concepts
- A Redis instance for session management (optional but recommended)
Preparing Your Repository
Create a GitHub repository with your Send configuration.
Repository Structure
send-deploy/├── Dockerfile└── .dockerignoreCreating the Dockerfile
Create a Dockerfile in the root of your repository using a community fork:
FROM registry.gitlab.com/timvisee/send:latest
# Environment variablesENV BASE_URL=${BASE_URL}ENV DETECT_BASE_URL=trueENV FILE_DIR=/uploads
# File limitsENV MAX_FILE_SIZE=${MAX_FILE_SIZE:-2684354560}ENV MAX_FILES_PER_ARCHIVE=${MAX_FILES_PER_ARCHIVE:-64}ENV MAX_EXPIRE_SECONDS=${MAX_EXPIRE_SECONDS:-604800}ENV MAX_DOWNLOADS=${MAX_DOWNLOADS:-100}ENV DOWNLOAD_COUNTS=${DOWNLOAD_COUNTS:-1,2,5,10,20,50,100}
# Redis configuration (optional)ENV REDIS_HOST=${REDIS_HOST:-}ENV REDIS_PORT=${REDIS_PORT:-6379}
# Create upload directoryRUN mkdir -p /uploads
# Expose the web interface portEXPOSE 1443Environment Variables Reference
| Variable | Required | Default | Description |
|---|---|---|---|
BASE_URL | Yes | - | Public URL of your Send instance |
MAX_FILE_SIZE | No | 2684354560 | Maximum file size in bytes (default 2.5 GB) |
MAX_FILES_PER_ARCHIVE | No | 64 | Maximum files per upload |
MAX_EXPIRE_SECONDS | No | 604800 | Maximum expiration time (default 7 days) |
MAX_DOWNLOADS | No | 100 | Maximum downloads per link |
DOWNLOAD_COUNTS | No | 1,2,5,10,20,50,100 | Available download count options |
EXPIRE_TIMES_SECONDS | No | 300,3600,86400,604800 | Available expiration time options |
REDIS_HOST | No | - | Redis host for session storage |
REDIS_PORT | No | 6379 | Redis port |
FILE_DIR | No | /uploads | Directory for encrypted file storage |
Deploying Send on Klutch.sh
- Select HTTP as the traffic type
- Set the internal port to 1443
Push Your Repository to GitHub
Initialize and push your repository:
git initgit add Dockerfile .dockerignoregit commit -m "Initial Send deployment configuration"git remote add origin https://github.com/yourusername/send-deploy.gitgit push -u origin mainCreate a New Project on Klutch.sh
Navigate to the Klutch.sh dashboard and create a new project with a descriptive name like “send” or “file-sharing”.
Create a New App
Within your project, create a new app. Connect your GitHub account and select your Send repository.
Configure HTTP Traffic
In the deployment settings:
Set Environment Variables
Add the following environment variables:
| Variable | Value |
|---|---|
BASE_URL | https://your-app-name.klutch.sh |
MAX_FILE_SIZE | 2684354560 (2.5 GB) |
MAX_EXPIRE_SECONDS | 604800 (7 days) |
Attach Persistent Volumes
Add the following volume:
| Mount Path | Recommended Size | Purpose |
|---|---|---|
/uploads | 50+ GB | Encrypted file storage |
Deploy Your Application
Click Deploy to start the build process.
Access Send
Once deployment completes, access your Send instance at https://your-app-name.klutch.sh.
Using Send
Uploading Files
- Navigate to your Send instance
- Drag and drop files onto the upload area, or click to browse
- Configure sharing options:
- Expiration time
- Download limit
- Optional password
- Click Upload
- Copy the generated link to share
Downloading Files
- Open the shared link
- Enter password if required
- Click Download
- Files are decrypted in the browser and saved locally
Security Features
- Client-Side Encryption: Files are encrypted using AES-GCM before upload
- Key in URL Fragment: Decryption key is part of the URL fragment (never sent to server)
- Zero Knowledge: Server only stores encrypted blobs
- Automatic Deletion: Files are deleted after expiration or download limit
Advanced Configuration
Custom Expiration Options
Set custom expiration time options (in seconds):
EXPIRE_TIMES_SECONDS=300,3600,86400,604800,2592000This provides options for 5 minutes, 1 hour, 1 day, 7 days, and 30 days.
Custom Download Limits
Set custom download count options:
DOWNLOAD_COUNTS=1,2,5,10,25,50,100,200Branding
Some forks support custom branding through environment variables or mounted configuration files. Check your chosen fork’s documentation for options.
Troubleshooting
Upload Fails
Symptoms: File upload fails or times out.
Solutions:
- Check file size against
MAX_FILE_SIZElimit - Verify persistent storage has sufficient space
- Check browser console for JavaScript errors
Link Not Working
Symptoms: Share link returns an error.
Solutions:
- Verify the file hasn’t expired or reached download limit
- Check that
BASE_URLmatches your actual deployment URL - Ensure the link wasn’t truncated when sharing
Download Decryption Error
Symptoms: Download fails with decryption error.
Solutions:
- Ensure the complete URL including the fragment (#) was copied
- Try downloading in a different browser
- Check that the file wasn’t corrupted during upload
Additional Resources
Conclusion
Deploying Send on Klutch.sh gives you a private, encrypted file sharing service that respects user privacy. With end-to-end encryption, automatic expiration, and no account requirements for recipients, Send provides a secure alternative to commercial file sharing services while keeping all data under your control.