Docker

SoulFire + Docker = ❤️ 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.

How to install Docker?

Look at this official guide.

Basic setup

Just setup SoulFire with no extra configuration or other services.

docker-compose.yml
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.

docker-compose.yml
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.

docker-compose.yml
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