Go Web Server
A simple, convenient, reliable, well tested HTTP/HTTPS web server to host static files.
It can host a local directory or contents of a zip file.
# Download (linux amd64, see Downloads for other builds)
curl -o gowebserver -O -L https://github.com/jeremyje/gowebserver/releases/download/v2.7.0/server-amd64; chmod +x gowebserver
# Host the current directory.
./gowebserver
# Host your home directory.
./gowebserver --path=${HOME}
# Host a zip file from the internet.
./gowebserver --path=https://github.com/jeremyje/gowebserver/archive/v2.7.0.zip
# Install in your Kubernetes Cluster.
kubectl apply -f https://raw.githubusercontent.com/jeremyje/gowebserver/main/install/kubernetes.yaml
Windows Service
sc.exe create gowebserver start= delayed-auto binpath= "C:\apps\gowebserver.exe -configfile=C:\apps\gowebserver.yaml"
sc.exe failure gowebserver reset= 0 actions= restart/1000
sc.exe start gowebserver
Features
- Zero-config required, hosts on port 80 or 8080 based on root and supports Cloud9's $PORT variable.
- HTTP and HTTPs serving
- Automatic HTTPs certificate generation
- Optional configuration by flags or YAML config file.
- Host local or HTTP served static files from:
- Local directory (current directory is default)
- ZIP archive
- Tarball archive (.tar, .tar.bz2, .tar.gz, .tar.lz4, .tar.xz)
- 7-zip
- RAR
- Git repository (HTTPS, SSH)
- Metrics export to Prometheus.
- Prebuild binaries for all major OSes.
Downloads
OS |
Arch |
Link |
Linux |
amd64 |
curl -O -L https://github.com/jeremyje/gowebserver/releases/download/v2.7.0/server-amd64 |
Linux |
arm |
curl -O -L https://github.com/jeremyje/gowebserver/releases/download/v2.7.0/server-arm |
Linux |
arm64 |
curl -O -L https://github.com/jeremyje/gowebserver/releases/download/v2.7.0/server-arm64 |
Windows |
amd64 |
(New-Object System.Net.WebClient).DownloadFile("https://github.com/jeremyje/gowebserver/releases/download/v2.7.0/server-amd64.exe", "server-amd64.exe") |
macOS |
amd64 |
curl -O -L https://github.com/jeremyje/gowebserver/releases/download/v2.7.0/server-amd64-darwin |
macOS |
arm64 |
curl -O -L https://github.com/jeremyje/gowebserver/releases/download/v2.7.0/server-arm64-darwin |
Build
Install Go 1.19 or newer.
# Install Dependencies for Building and Testing
sudo apt-add-repository non-free
sudo apt-get update
sudo apt-get -y -q install lz4 p7zip-full rar unrar
# Clone the Codebase
git clone git@github.com:jeremyje/gowebserver.git
# Build the Code
make -j$(nproc)
Test
make test
make bench
Sample
Sample code for embedding a HTTP/HTTPS server in your application.
package main
import (
"github.com/jeremyje/gowebserver/v2/pkg/gowebserver"
"go.uber.org/zap"
)
func main() {
logger, err := zap.NewProduction()
if err != nil {
zap.S().Fatal(err)
}
if err == nil {
zap.ReplaceGlobals(logger)
}
defer logger.Sync()
httpServer, err := gowebserver.New(&gowebserver.Config{
Serve: []gowebserver.Serve{{Source: ".", Endpoint: "/"}},
})
if err != nil {
zap.S().Fatal(err)
}
termCh := make(chan error)
httpServer.Serve(termCh)
}