A lightweight HTTP server based on Python's standard library that provides directory browsing, file download, and file upload capabilities. By default, the server serves and allows uploads to the ./data/ directory. However, users can customize the directory by mounting it using Docker or providing the directory when using the python main.py command.
- File upload and download functionality 🔄
- Multiple file upload capability 🚚
- Folder creation 📂
- Sortable columns (by name, type, size, last modified) 🔄
- Clean, responsive user interface 🎨
- No external dependencies - uses only Python standard library 🐍
- Python 3.9 or higher 🐍
python main.py [-H HOST] [-p PORT] [DIRECTORY]-H,--host(optional): Host address to bind to (default: 0.0.0.0) 🌐-p,--port(optional): Port number to listen on (default: 8000) 🚀DIRECTORY(optional): Base directory (default: current directory) 📂
Note: Regardless of the base directory specified, the server will only serve and allow uploads to the specified directory.
Start server on default host and port serving the current directory's data folder:
python main.pyStart server on a specific port:
python main.py -p 8000Start server on a specific host and port:
python main.py -H 0.0.0.0 -p 8000Start server with a specific base directory:
python main.py /path/to/directoryThis will serve files from the specified directory
Start server with all options:
python main.py -H 0.0.0.0 -p 8000 /path/to/directorysimple-http-server/
├── server/
│ ├── __init__.py
│ ├── handler.py # HTTP request handler
│ ├── template_loader.py # Template loading and rendering
│ └── path_utils.py # Path utilities
├── templates/ # HTML templates
│ └── directory.html # Directory listing template
├── static/ # Static files
│ ├── style.css # CSS styles
│ └── script.js # JavaScript
├── data/ # User files (created automatically)
├── main.py # Main entry point
└── README.md # Documentation
It is not intended for production use or exposure to the public internet. Use it only in trusted environments. 🚫
This project is open source and available under the MIT License. 📜
The server can be run in a Docker container for easier deployment and isolation.
Build the Docker image:
docker build -t simple-http-server .Run the container:
docker run -p 8000:8000 -v ./data:/data simple-http-serverWith custom host and port:
docker run -p 8000:8000 -v ./data:/data simple-http-server -H 0.0.0.0 -p 8000Start the server with default settings:
docker compose up -dStart the server with a custom port:
PORT=9000 docker compose up -dStop the server:
docker compose downThe Docker configuration mounts the specified directory by default to the container, which contains all uploaded files and is persisted.
This allows you to customize the appearance and behavior of the server without rebuilding the Docker image. 🔄
