Documentation
Docker

Docker

SoulFire + Docker = ❤️ Official Docker images are available on Docker Hub (opens in a new tab). 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 (opens in a new tab).

How to install Docker?

Look at this official guide (opens in a new tab).

Basic setup

Just setup SoulFire with no extra configuration or other services.

services:
  app:
    image: alexprogrammerde/soulfire
    restart: always
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:38765/health"]
      interval: 30s
      timeout: 10s
      retries: 5
    ports:
      - '38765:38765'
    volumes:
      - app_data:/soulfire/data
 
volumes:
  app_data:
    driver: local

HTTPS setup

SoulFire runs on HTTP, but if you run a web endpoint you're going to need HTTPS for client-side requests from websites. You have two options, set up a reverse proxy with automatic HTTPS or use cloudflared as a https tunnel.

Reverse proxy

You will have to change the placeholders for the domain and email.

services:
  app:
    image: alexprogrammerde/soulfire
    restart: always
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:38765/health"]
      interval: 30s
      timeout: 10s
      retries: 5
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.soulfire.rule=Host(`your-domain.com`)"
      - "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=your@email.com"
      - "--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: local

Cloudflared

You get the token from the cloudflare dashboard (opens in a new tab).

services:
  app:
    image: alexprogrammerde/soulfire
    restart: always
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:38765/health"]
      interval: 30s
      timeout: 10s
      retries: 5
    volumes:
      - app_data:/soulfire/data
 
  cloudflared:
    image: cloudflare/cloudflared
    command: tunnel run
    environment:
      - TUNNEL_TOKEN=mytokengoeshere
 
volumes:
  app_data:
    driver: local