# GMMC Media Server A high-performance, public media download server built with Rust and Axum. It is designed to serve extremely large files (100GB+) seamlessly and features a retro, Minecraft-themed web dashboard for easy access. ## Features - **Blazing Fast & Lightweight**: Powered by Rust, Axum, and Tokio. - **Large File Optimization**: Streams files using configurable chunk sizes (default 8MB) to handle massive files with low memory footprint. - **Resume Support**: Full support for HTTP `Range` requests, allowing paused or interrupted downloads to be resumed. - **Retro Dashboard**: A dynamic, Minecraft-style UI built with vanilla HTML/CSS and the VT323 font. Includes 1-click copy-to-clipboard commands for terminal downloading. - **No Authentication Required**: Built for public, hassle-free access. - **Security & Access Control**: Built-in security headers and optional IP whitelisting. ## Prerequisites - [Rust & Cargo](https://rustup.rs/) (edition 2021) - A `.env` file for server configuration - A `media_config.json` file for file registry ## Configuration ### 1. Environment Variables (`.env`) Create a `.env` file in the root directory: ```env PORT=3000 HOST=0.0.0.0 # Request timeout in seconds (default 3600 for 1 hour) REQUEST_TIMEOUT_SECS=3600 # Streaming chunk size in KB (default 8192 for 8MB) CHUNK_SIZE_KB=8192 # Optional: comma-separated list of allowed IPs # ALLOWED_IPS=127.0.0.1,192.168.1.100 # Optional: Domain for generating absolute download URLs # DOMAIN=https://downloads.example.com ``` ### 2. Media Registry (`media_config.json`) Define the files you want to host. Create a `media_config.json` in the root directory: ```json { "files": { "ubuntu-iso": { "name": "Ubuntu 24.04 LTS", "path": "/path/to/ubuntu-24.04-desktop-amd64.iso", "description": "The latest LTS release of Ubuntu.", "content_type": "application/x-iso9660-image" }, "large-dataset": { "name": "AI Training Dataset", "path": "./data/dataset.tar.gz", "description": "Huge 150GB dataset for machine learning models." } } } ``` ## Running the Server 1. Clone the repository and navigate to the project root. 2. Build and run the server: ```bash cargo run --release ``` 3. Open your browser and navigate to `http://localhost:3000` (or your configured `HOST` and `PORT`). ## Usage - **Web Dashboard**: Visit the root URL to view available files, their sizes, and descriptions. Click "Download" or copy the provided cURL commands. - **Direct Download (Browser)**: `http://localhost:3000/download/{file_id}` - **cURL Download**: ```bash curl -O http://localhost:3000/download/{file_id} ``` *(For resumable downloads via cURL, add `-C -`)* ## Tech Stack - **[Rust](https://www.rust-lang.org/)** - **[Axum](https://github.com/tokio-rs/axum)** (Web Framework) - **[Tokio](https://tokio.rs/)** (Asynchronous Runtime) - **[Tower](https://github.com/tower-rs/tower)** (Middleware & Networking) - **[Serde](https://serde.rs/)** (Serialization/Deserialization)