Docker¶
SWS
has first-class Docker support.
It is provided in three Docker image variants such as Scratch, Alpine and Debian images.
All images are available on Docker Hub and GitHub Container Registry.
OS/Arch¶
All Docker images are Multi-Arch and the following operating systems and architectures are supported.
linux/386
linux/amd64
linux/arm/v6
linux/arm/v7
linux/arm64
linux/ppc64le
(Debian only)linux/s390x
(Debian only)
SWS statically-linked binary
All the Docker images use the SWS statically-linked binary, meaning that the binary is highly optimized, performant, and dependency-free thanks to musl libc.
Run a container¶
To give the server a quick try just run the following commands.
Tips
- The SWS CLI arguments can be provided directly to the container or omitted as shown below.
- A Docker volume like
-v $HOME/my-public-dir:/public
can be specified to overwrite the default root directory.
To run SWS, there are several Docker image variants that you can use.
Scratch (just the binary)
docker run --rm -it -p 8787:80 joseluisq/static-web-server:2 -g info
# or
docker run --rm -it -p 8787:80 ghcr.io/static-web-server/static-web-server:2 -g info
Alpine
docker run --rm -it -p 8787:80 joseluisq/static-web-server:2-alpine -g info
# or
docker run --rm -it -p 8787:80 ghcr.io/static-web-server/static-web-server:2-alpine -g info
Debian
docker run --rm -it -p 8787:80 joseluisq/static-web-server:2-debian -g info
# or
docker run --rm -it -p 8787:80 ghcr.io/static-web-server/static-web-server:2-debian -g info
Dockerfile¶
SWS Docker images can be extended as needed.
Extending the Scratch Docker image (just the binary)
FROM joseluisq/static-web-server:2
# or
FROM ghcr.io/static-web-server/static-web-server:2
# do stuff...
Or the Alpine
FROM joseluisq/static-web-server:2-alpine
# or
FROM ghcr.io/static-web-server/static-web-server:2-alpine
# do stuff...
Or the Debian
FROM joseluisq/static-web-server:2-debian
# or
FROM ghcr.io/static-web-server/static-web-server:2-debian
# do stuff...
Docker Compose¶
Example using Docker Compose.
version: "3.3"
services:
website:
image: joseluisq/static-web-server:2-alpine
container_name: "website"
ports:
- 80:80
restart: unless-stopped
environment:
# Note: those envs are customizable but also optional
- SERVER_ROOT=/var/public
- SERVER_CONFIG_FILE=/etc/config.toml
volumes:
- ./public:/var/public
- ./config.toml:/etc/config.toml
Traefik Proxy¶
Example using Docker Swarm and Traefik Proxy.
- Create an external
traefik_net
Docker attachable network for Traefik:docker network create --driver=overlay --attachable traefik_net
- Map a host directory like
/var/www/website
to the service container or create an externalwebsite_data
Docker volume if you prefer:docker volume create website_data
version: "3.3"
services:
traefik:
image: "traefik:v2.11"
command:
#- "--log.level=DEBUG"
- "--api.insecure=true"
- "--providers.docker=true"
- "--providers.docker.exposedbydefault=false"
- "--entrypoints.web.address=:80"
ports:
- "80:80"
- "8080:8080"
volumes:
- "/var/run/docker.sock:/var/run/docker.sock:ro"
website:
image: joseluisq/static-web-server:2
environment:
# Note: those envs are customizable but also optional
- SERVER_ROOT=/public
volumes:
- /var/www/website:/public
# Or use an existing Docker volume
# - website_data:/public
labels:
- "traefik.enable=true"
- "traefik.docker.network=traefik_net"
- "traefik.http.routers.website.entrypoints=web"
- "traefik.http.routers.website.rule=Host(`website.localhost`)"
- "traefik.http.routers.website.priority=1"
- "traefik.http.services.website.loadbalancer.server.port=80"
networks:
- traefik_net
# volumes:
# website_data:
# external: true
networks:
traefik_net:
external: true
Kubernetes¶
Example using Kubernetes pod with liveness probe.
apiVersion: v1
kind: Pod
metadata:
name: website
spec:
containers:
- name: sws
image: ghcr.io/static-web-server/static-web-server
command:
- static-web-server
- --root=/public
- --health
ports:
- containerPort: 80
livenessProbe:
httpGet:
path: /health
port: http
TrueNAS SCALE¶
If you use Kubernetes with TrueNAS SCALE then check out the TrueCharts Community Website and its Introduction to SCALE page to deploy an SWS application in your instance.