A lightweight, containerized Python web application for uploading, downloading, and managing files. Features password protection and support for large files (up to 20GB).
Just go then:
docker run --rm -it -p 5000:5000 -e PORT=5000 --name giveme-app giveme
- 🔐 Password-protected access
- 📤 File upload with progress support
- 📥 File download
- 📋 File listing with sizes
- 🗑️ File deletion
- 🐳 Fully containerized with Docker
- 💾 Support for large files (tested up to 20GB)
- 🎨 Clean, modern UI
-
Clone and navigate to the repository
cd giveme -
Create a
.envfilecp .env.example .env
-
Edit
.envand set your passwordnano .env
Set your own values:
APP_PASSWORD=your-secure-password-here PORT=5000 -
Start the application
docker-compose up -d
-
Access the application
Open your browser and go to:
http://localhost:5000
# Build the image
docker build -t giveme .
# Run on port 5000 instead
docker run --rm \
-p 5000:5000 \
-v $(pwd)/data:/app/data \
-e APP_PASSWORD=your-password \
-e PORT=5000 \
--name giveme-app \
giveme# Create virtual environment
python3 -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
# Install dependencies
pip install -r requirements.txt
# Set environment variables
export APP_PASSWORD=your-password
export PORT=5000
# Run the application
python app.pyAPP_PASSWORD- Password required to access the application (if not set, a random password will be generated and displayed in logs)PORT- Port number for the application (default:5000)MAX_CONTENT_LENGTH- Maximum file size (default: 21474836480, (20*1024*1024*1024~20GB) configurable inapp.py)
All uploaded files are stored in the ./data directory. This directory is:
- Created automatically on first run
- Mounted as a Docker volume for persistence
- Excluded from git (via
.gitignore)
- Login - Enter the password you configured in the
.envfile - Upload Files - Click "Choose File", select your file, and click "Upload"
- Download Files - Click the "Download" button next to any file
- Delete Files - Click the "Delete" button next to any file (requires confirmation)
- Logout - Click the "Logout" button in the header
- Framework: Flask 3.0
- WSGI Server: Gunicorn (production-ready)
- Python Version: 3.13
- Workers: 4 (configurable)
- Port: 5000 (configurable via PORT env var)
- Max File Size: 20GB (configurable)
- Chunk Size: 8KB for streaming uploads/downloads
- Request Timeout: 300 seconds (5 minutes)
giveme/
├── app.py # Main Flask application
├── requirements.txt # Python dependencies
├── Dockerfile # Docker image definition
├── docker-compose.yml # Docker Compose configuration
├── .env.example # Example environment variables
├── .gitignore # Git ignore rules
├── templates/ # HTML templates
│ ├── login.html # Login page
│ └── index.html # Main file hub page
└── data/ # File storage directory (created automatically)
- Always use a strong password for
APP_PASSWORDin production - If
APP_PASSWORDis not set, a random password is generated on startup (check logs) - Sessions are invalidated on container restart for security
- Files are served with secure filenames using
werkzeug.utils.secure_filename - Consider adding HTTPS in production (use a reverse proxy like nginx)
# If using docker-compose
docker-compose down
# If using docker directly
docker stop giveme-app
docker rm giveme-app# View logs (docker-compose)
docker-compose logs -f
# View logs (docker)
docker logs -f giveme-appMIT License - Feel free to use and modify as needed.