Running self-hosted in Docker
We publish official Alpine-based images to Docker Hub as
doceventio/sfs-server -
multi-arch (amd64, arm64, arm), tagged latest and per version.
Quick start
docker run \
-e LICENSE=<your-license-key> \
-e REGION=us-east-1 \
-p 2022:2022 \
-p 2021:2021 \
-p 9990:9990 \
doceventio/sfs-server:latest
Every server parameter can be
passed as an environment variable - LICENSE and REGION are the two
required ones.
Passive FTP ports
Plain FTP and FTPS also need the passive data ranges published:
docker run \
-e LICENSE=<your-license-key> \
-e REGION=eu-west-1 \
-e PUBLICIP=<your-public-ip> \
-p 2022:2022 \
-p 2021:2021 \
-p 9990:9990 \
-p 2030-2049:2030-2049 \
doceventio/sfs-server:latest
PUBLICIP is what makes passive mode work at all - it is the address the
server tells FTP clients to open data connections to. SFTP-only deployments
need neither the ranges nor PUBLICIP.
TLS certificates and SSH keys
For production (PRODUCTION=1) you provide your own TLS certificate and SSH
host key. Either build them into an image derived from ours, or mount them
from the host and point the environment at them:
docker run \
-e LICENSE=<your-license-key> \
-e REGION=us-east-1 \
-e PRODUCTION=1 \
-e TLSCERT=/certs/cert.pem \
-e TLSKEY=/certs/key.pem \
-e SSHKEYFILE=/certs/id_rsa \
-v /path/to/certs:/certs:ro \
-p 22:2022 -p 21:2021 -p 990:9990 \
-p 2030-2049:2030-2049 \
doceventio/sfs-server:latest
In production mode logs come out of the container's stdout as JSON - see Server logging.