Docker
SoulFire + Docker = ❤️
Looking for the easy way? Use our automated setup script instead.
Docker Hub image
Official Docker images are available on Docker Hub. Those contain the SoulFire Dedicated Server. This guide assumes you know Docker and Docker compose well and are able to troubleshoot issues on your own.
Pterodactyl/Pelican panel egg
You want to use Docker without the hassle of setting up the container yourself? If you are a user of Pterodactyl/Pelican, you can use the official egg.
It is recommended to set up the Cloudflared egg to setup HTTPS to forward the SoulFire egg.
How to install Docker?
Look at this official guide.
HTTPS setup
SoulFire uses HTTP, but if you run a public domain endpoint you're going to need HTTPS set up for dedicated servers. You have two options, use Cloudflared as a HTTPS tunnel or set up a reverse proxy like Traefik with automatic HTTPS.
Cloudflared tunnel (Recommended)
You get the token from the Cloudflare Zero Trust dashboard. Follow the official guide to learn how to get the Cloudflared tunnel token.
TUNNEL_TOKEN=mytokengoeshereservices:
app:
image: ghcr.io/alexprogrammerde/soulfire
restart: always
volumes:
- app_data:/soulfire/data
cloudflared:
image: cloudflare/cloudflared
command: tunnel run
environment:
TUNNEL_TOKEN: ${TUNNEL_TOKEN}
volumes:
app_data:
driver: localTraefik
Traefik is a reverse proxy that can serve SoulFire with HTTPS.
DOMAIN=your-domain.com
EMAIL=your@email.comservices:
app:
image: ghcr.io/alexprogrammerde/soulfire
restart: always
labels:
- "traefik.enable=true"
- "traefik.http.routers.soulfire.rule=Host(`${DOMAIN}`)"
- "traefik.http.services.soulfire.loadbalancer.server.port=38765"
- "traefik.http.routers.soulfire.entrypoints=websecure"
- "traefik.http.routers.soulfire.tls.certresolver=myresolver"
volumes:
- app_data:/soulfire/data
traefik:
image: traefik
command:
- "--api.insecure=true"
- "--providers.docker=true"
- "--providers.docker.exposedbydefault=false"
- "--entrypoints.web.address=:80"
- "--entrypoints.websecure.address=:443"
- "--certificatesresolvers.myresolver.acme.tlschallenge=true"
- "--certificatesresolvers.myresolver.acme.email=${EMAIL}"
- "--certificatesresolvers.myresolver.acme.storage=/letsencrypt/acme.json"
ports:
- "80:80"
- "443:443"
volumes:
- "/var/run/docker.sock:/var/run/docker.sock:ro"
- "letsencrypt:/letsencrypt"
volumes:
app_data:
driver: local
letsencrypt:
driver: localTraefik (IP SSL)
IP SSL certificates from Let's Encrypt are short-lived (~6 days). Traefik handles automatic renewal, but your containers must remain running. Requires Traefik v3.6.7+.
If you don't have a domain, you can use Let's Encrypt IP address certificates with Traefik. This uses the TLS-ALPN-01 challenge on port 443 and does not require a domain name.
PUBLIC_IP=203.0.113.42
EMAIL=your@email.comservices:
app:
image: ghcr.io/alexprogrammerde/soulfire
restart: always
labels:
- "traefik.enable=true"
- "traefik.http.routers.soulfire.rule=Host(`${PUBLIC_IP}`)"
- "traefik.http.services.soulfire.loadbalancer.server.port=38765"
- "traefik.http.routers.soulfire.entrypoints=websecure"
- "traefik.http.routers.soulfire.tls.certresolver=myresolver"
volumes:
- app_data:/soulfire/data
traefik:
image: traefik:v3
command:
- "--providers.docker=true"
- "--providers.docker.exposedbydefault=false"
- "--entrypoints.web.address=:80"
- "--entrypoints.websecure.address=:443"
- "--certificatesresolvers.myresolver.acme.tlschallenge=true"
- "--certificatesresolvers.myresolver.acme.email=${EMAIL}"
- "--certificatesresolvers.myresolver.acme.storage=/letsencrypt/acme.json"
- "--certificatesresolvers.myresolver.acme.certificatesduration=160"
- "--certificatesresolvers.myresolver.acme.profile=shortlived"
- "--certificatesresolvers.myresolver.acme.disablecommonname=true"
ports:
- "80:80"
- "443:443"
volumes:
- "/var/run/docker.sock:/var/run/docker.sock:ro"
- "letsencrypt:/letsencrypt"
volumes:
app_data:
driver: local
letsencrypt:
driver: localHTTP setup
Just setup SoulFire with no extra configuration or other services.
This will only serve SoulFire via HTTP. This means that traffic with SoulFire is unencrypted and insecure. All tokens/emails are sent in cleartext and are hijackable with Man In The Middle attacks. It is recommended to setup SoulFire using HTTPS.
services:
app:
image: ghcr.io/alexprogrammerde/soulfire
restart: always
ports:
- '38765:38765'
volumes:
- app_data:/soulfire/data
volumes:
app_data:
driver: localHow is this guide?
Last updated on