http-server
                                
                                
                                
                                    http-server copied to clipboard
                            
                            
                            
                        A small application with no dependencies to expose a local folder as an HTTP server. It includes a file explorer and a Markdown renderer.
http-server, a simple HTTP file server
 
http-server is a static file server with zero dependencies: just one binary to run. It also supports:
- CORS support: by setting the 
Access-Control-Allow-Originheader to*.HEADrequests, although unnecessary when doing CORS onGETrequests, are also supported. - Authentication support: via either plain username and password or through a JWT token, with optional support for validating if the token isn't expired.
 - Directory listing: if no 
index.htmlorindex.htmfiles are present in the directory, a directory listing page will show instead. - Markdown support: if a 
README.mdorreadme.mdfile is present in the directory during directory listing, it will be rendered as HTML. Additional support for GitHub-flavored markdown is also available. - Fully air-gapped: the directory listing feature is fully air-gapped, meaning that it does not require any external resources to be loaded. This is useful for environments where internet access is not available.
 
The app is available both as a standalone binary and as a Docker container image.
Docker image
Find the latest version available here. latest will always map to the latest version, which could led you to download a newer major version that might contain a breaking change. I recommend using v2 for the tag, since it will always map to a stable version with all potential patches applied. This is the safest way to use to avoid any breaking changes.
# stable version 2
docker pull ghcr.io/patrickdappollonio/docker-http-server:v2
# pin to specific version
docker pull ghcr.io/patrickdappollonio/docker-http-server:v2.0.0
# bleeding edge version (will always update to latest)
docker pull ghcr.io/patrickdappollonio/docker-http-server:latest
Configuring the container
There are three ways to configure the container:
- Using a YAML configuration file: create a configuration file named 
.http-server.yaml. This file cannot be accessed using the file explorer mode nor it will show up in the directory listing. The variable names match the command line flags. For example, to set--disable-markdown, you can usedisable-markdown: truein the configuration file. - Using environment variables: The environment variables match the command line flags. For example, to set 
--disable-markdown, you can useDISABLE_MARKDOWN=trueas an environment variable. Additionally, and to avoid collisions, all environment variables can be prefixed withFILE_SERVER_. For example, to set--pathparameter, which would collide with your Operating System's$PATH, you can use insteadFILE_SERVER_PATH. - Overwriting the 
commandandargs: Overriding the arguments passed to the container is also possible. For Docker, see overridingCMDbut keep theENTRYPOINTintact. Fordocker compose, see overriding thecommand. For Kubernetes, see overridingcommandandargs. 
Static binary
You can download the latest version from the Releases page.
Usage options
The following options are available.
A simple HTTP server and a directory listing tool.
Usage:
  http-server [flags]
Flags:
      --banner string          markdown text to be rendered at the top of the directory listing page
      --cors                   enable CORS support by setting the "Access-Control-Allow-Origin" header to "*"
      --disable-cache-buster   disable the cache buster for assets from the directory listing feature
      --disable-etag           disable ETag header generation
      --disable-markdown       disable the markdown rendering feature
      --ensure-unexpired-jwt   enable time validation for JWT claims "exp" and "nbf"
      --gzip                   enable gzip compression for supported content-types
  -h, --help                   help for http-server
      --hide-links             hide the links to this project's source code
      --jwt-key string         signing key for JWT authentication
      --markdown-before-dir    render markdown content before the directory listing
      --password string        password for basic authentication
  -d, --path string            path to the directory you want to serve (default "./")
      --pathprefix string      path prefix for the URL where the server will listen on (default "/")
  -p, --port int               port to configure the server to listen on (default 5000)
      --title string           title of the directory listing page
      --username string        username for basic authentication
  -v, --version                version for http-server
Detailed configuration
All the available configuration options are documented in the docs. You can find them here.