Getting Started with Speedify Self-Hosted Server

This guide will walk you through setting up your own Speedify Self-Hosted Server. The process is straightforward, and you'll be up and running in no time.


What You'll Need

Before getting started, make sure you have:

  • A server with a static, publicly-accessible IP address – This is essential for clients to connect reliably
  • At least 2 CPU cores (x86_64 or amd64 architecture only)
  • 4GB of RAM
  • 20GB of storage
  • Ubuntu (preferred) – Though Windows, macOS, and other Linux distributions should work fine since we're using Docker

Step 1: Install Docker

Since Speedify Self-Hosted Server runs in Docker containers, you'll need to install Docker first.

Follow the official Docker installation instructions for your distribution: https://docs.docker.com/engine/install/

For Ubuntu specifically, you'll want to follow the "Install using the apt repository" method for the smoothest experience.

Alternatively, you can use scripts to install Docker on Proxmox, either in a VM or under LXC: https://community-scripts.org/


For Windows or macOS

Download and install Docker Desktop: https://www.docker.com/get-started/

After installation, make sure Docker is running by opening a terminal and typing:

docker version                

You should see the Docker version information printed out.


Verify Your Setup

Before proceeding, confirm that:

  • Docker is installed and running
  • Your server's static IP address is configured and accessible
  • You have sufficient system resources available
  • Verify that inbound ports 8443/TCP, 32768-65535/TCP and 32768-65535/UDP are open

Step 2: Create Your Docker Compose Configuration

Now that Docker is installed, you'll need to create a configuration file that tells Docker how to run your Speedify server.

Create the docker-compose.yml File

In your preferred directory (we recommend creating a dedicated folder like ~/speedify-server        ), create a file called docker-compose.yml         with the following contents:

services:
  speed-server:
    platform: linux/amd64
    image: speedify/ss-manager:latest
    volumes:
      - ${DOCKER_SOCK_PATH:-/var/run/docker.sock}:/run/docker.sock
      - ./.local/ssm/analytics:/var/log/speedify/analytics
      - ./.local/ssm/var/log/speedify/servers:/var/log/speedify/servers
      - ./.local/ssm/var/run/speedify/servers:/var/run/speedify/servers
      - /proc:/host-proc:ro
      - ./.local/ssm/var/lib/ssm:/var/lib/ssm
    ports:
      - 8443:443
    environment:
      ALLOCATION_TYPE: ondemand
      ENABLE_SESSION_TOKENS: "true"
      DIRECTORY_URI: "https://directory.speedifynetworks.com"
      SELF_HOSTED_MODE: "true"
      PUBLIC_API_PORT: "8443"
      API_HTTP_PORT: "80"
      API_HTTPS_PORT: "443"
      DOCKER_REPO_PREFIX: "speedify"
    restart: always

Quick Tips

  • Linux/macOS: You can create this file using your favorite text editor (nano        , vim        , or vi        ):

nano docker-compose.yml        

Paste the contents, then save and exit.

  • Windows: Use Notepad, VS Code, or any text editor. Make sure to save it as docker-compose.yml                 (not .txt        ).

What This Configuration Does

This file sets up your Speedify server with:

- Automatic restarts if the container stops

- Persistent storage for logs and server data in the .local/ssm         directory

The server will automatically create the necessary subdirectories when it starts for the first time.

Additional Configuration Options

There are a few additional configuration options that are optional that might apply to your environment. If needed, these should be added to the environment:     block in the docker-compose.yml file:

  • PUBLIC_IP  - this can be set to control the IP address that VPN clients try to connect to this self-hosted server on. Normally the self-hosted server's public IP address is detected automatically, but in some scenarios, like when the self-hosted server and clients are all on a VPC, you may want to override this.
  • PUBLISHED_PORT_RANGE  - the range of ports on the server that should be used for VPN session transport connections. Normally the full range of ephemeral ports is used, but if a smaller range of ports is desired, this can be set to something like "9500-9600"
  • BLOCK_TORRENTS  - this controls if the client will try to detect and prevent peer-to-peer BitTorrent traffic while connected to this server. Typically torrents are not blocked on self-hosted servers, but if this behavior is desired this can be set to "true"
  • MIN_SIMPLE_SS_VERSION  - this controls the minimum client version that is allowed to connect to this server, for cases where versions that would normally be supported are not desired. This should be set to a valid semantic version, such as "16.5.0"
  • SERVER_NAME  - this controls the name of the server shown in the web dashboard, ex: "Office Server #1"

Step 3: Launch Your Speedify Self-Hosted Server

You're all set! Now let's bring your server online.

Start the Server

From the directory containing your docker-compose.yml         file, run these commands:

docker compose pull        

This downloads the latest Speedify server container image. It may take a minute or two depending on your connection speed.

docker compose up -d        

This starts your server in detached mode (running in the background). The -d         flag means it won't tie up your terminal.

docker compose logs -f        

This shows you the live logs from your server. You'll see startup messages and connection activity as clients connect.

What You'll See

The logs will display real-time information about: - Server initialization - Client connections - Any errors or warnings that need attention

To exit the logs view, press Ctrl+C        . This only stops viewing the logs; your server keeps running in the background!

Verify Everything is Running

After starting the server, you can check its status anytime with:

docker compose ps        

You should see the speed-server         service listed as "Up" or "running".

Managing Your Server

  • View logs again: docker compose logs -f        
  • Stop the server: docker compose down        
  • Restart the server: docker compose restart        
  • Update to latest version: docker compose pull && docker compose up -d        

Step 4: Activate Your Self-Hosted Server

Now that your server is running, you need to activate it with a license.

Find Your Activation QR Code

In the logs you're viewing, look for a section that displays an Activation QR Code and URL. It will look something like this:

=== QR Code for Activation URL ===
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
█ ▄▄▄▄▄ █▄▄██████ ▀ ▄▄▄█ ██ ▄▄▄▄▄ █
█ █   █ █ ▀█ ▄    ▀█▀▄█▀▄▄█ █   █ █
[... QR code continues ...]
Activation URL: https://my.speedify.com/activate?activationCode=123456&role=server
Activation Code: 123456
=====================================

Activate Your Server

You have two options to activate:

Option 1: Scan the QR Code (Mobile)

Simply scan the QR code displayed in the logs using your mobile device's camera or a QR code scanner app.

Option 2: Use the Activation URL (Desktop/Mobile)

Copy the Activation URL from the logs and open it in your web browser.

Complete Activation

Once you follow the QR code or URL:

  1. Sign in to your existing Speedify account, or create a new account if you don't have one yet
  2. Complete the activation process

Purchase Your License

During or after activation, you'll need to purchase a Self-Hosted Server license:


Enterprise Self-Hosted Server:


Personal Self-Hosted Server:


The Enterprise license allows for 1000 sessions to the server at the same time, while the Personal license allows up to 5 sessions.



Wait for Activation to Complete

After purchasing and linking your license, you have two options:

Option 1: Wait for Automatic Refresh (Easy)

Wait up to 15 minutes for the automatic login refresh cycle. The server will detect your new license and complete activation automatically.

Option 2: Restart Immediately (Faster)

Press Ctrl+C         to exit the log view, then restart your server:

docker compose down && docker compose up -d && docker compose logs -f        

Confirmation

Once activation is successful, you'll see a message in the logs indicating that your server should now appear in the server list in the Speedify app.


Success! Your Self-Hosted Server is now fully activated and ready to use. Open your Speedify app to see your new server in the available servers list.


Troubleshooting

Common Issues

Server won't start

- Check that Docker is running: docker ps        

- Verify that inbound ports 8443/TCP, 32768-65535/TCP and 32768-65535/UDP are open

- Review logs for specific error messages: docker compose logs        


Activation not working

- Ensure you've completed the purchase process

- Check your internet connection

- Try the restart method to force a refresh


Can't see server in Speedify app

- Confirm activation completed successfully in the logs

- Make sure you're signed into the same account used for activation

- Restart the Speedify app


Need Help?

If you run into any issues:

- Check the logs first: docker compose logs        

- Ensure your firewall allows traffic on the port used

- Verify your server's public IP is accessible

- Contact support@speedify.com


Did you know - If you're looking to purchase Speedify for multiple people, or need volume pricing, visit the Speedify for Teams page for more details.