Skip to content

Using Caddy with SolidSDR

Dave Hayes edited this page May 20, 2026 · 2 revisions

Why Caddy?

Caddy provides a simple way to serve SolidSDR in a Secure Context, allowing it to work on remote machines, including over the internet. There are many reverse proxy solutions, but Caddy can automatically create and manage certificates for you, which would otherwise be quite a hassle.

How does it work?

Think of Caddy as an adapter. solid-sdr-server is serving over HTTP, but your browser needs to load it over HTTPS in order for everything to work. Caddy is the adapter that sits in between:

  graph LR
      Browser -->|HTTPS| RP[Caddy]
      RP -->|HTTP| Server[solid-sdr-server]
Loading

Your browser sends an HTTPS request to Caddy, Caddy then turns around and echoes that request to solid-sdr-server over HTTP, then sends the response back to your browser.

Quick Start

This guide makes a few assumptions:

  • You are running solid-sdr-server with the default configuration
  • You will be running Caddy on the same machine as solid-sdr-server
  • You've verified that solid-sdr-server is running and accessible at http://localhost:8080

Install Caddy

Caddy is a command-line/terminal application, so Mac and Linux users will run it in the terminal, while Windows users will need to use PowerShell. If the methods below don't work for you, you can try the official install documentation. Make sure you're able to run caddy and see the help message before continuing.

macOS

Use Homebrew or MacPorts to install:

# for homebrew
brew install caddy

# for macports
sudo port install caddy

Linux

There's a good chance your distro has a package already. You can try your normal package manager commands to install it. There are too many to cover here, but common ones are:

# debian/ubuntu/raspbian
sudo apt install caddy

# fedora/redhat/centos
dnf install caddy

# arch/manjaro/parabola
pacman -Syu caddy

Windows

For people on Windows 10 or newer, winget is probably the easiest solution. In PowerShell:

winget install caddy

You'll need to close the PowerShell window and open a new one to be able to use the caddy command.

For older versions of Windows, refer to the official install docs.

Run Caddy

Determining your server address

When we run Caddy, we have to tell it what address to use when it automatically creates our HTTPS certificate. If mDNS is working on your network, that's the easiest so we'll try that first. Let's start by determining our hostname. This is simple, as we just run the hostname command in our terminal/PowerShell and it will print the hostname out. In my case, the hostname is LAPTOP-9V8U8FDA. Next, let's run Caddy (Linux users will need to prepend this with sudo):

caddy reverse-proxy --from "*.local" --to :8080

This command tells Caddy to run as a reverse proxy, and it will proxy requests it gets for any .local address to solid-sdr-server on port 8080. You may get some permission requests, certificate installation, etc. Look for a line that says something like this:

2026/05/20 16:44:05.634	INFO	caddy proxying	{"from": "https://*.local", "to": [":8080"]}

That means it worked and Caddy is running. Now, in your web browser, go to https://{hostname}.local, replacing {hostname} with the hostname we determined earlier. In my case, that's https://LAPTOP-9V8U8FDA.local. If SolidSDR loads successfully, that's a great sign! You can try going to another computer on your network and load the same address in a browser. If it works, then you can move on to Next Steps. If it does not work, then we'll need to use the IP address instead. Stop Caddy by pressing Ctrl+C, and we'll run it again using the IP address of your server instead of "*.local". If your server's IP address is 192.168.1.50, you would run:

caddy reverse-proxy --from 192.168.1.50 --to :8080

You should be able to access SolidSDR with the URL https://192.168.1.50 (replace with your actual IP address) on both the machine running SolidSDR and any others on your network.

Next Steps

Accessing from the Internet

As you may have figured out, the --from argument we pass to caddy reverse-proxy must match the address we will use to access the server or it won't work. If you want to access your server from the internet, you will need to use a public hostname or IP address. You can just pass your public IP address and that will work, but a better way using Dynamic DNS. Setting up DDNS is beyond the scope of this guide, but there are free providers (like No-IP) that will let you set up a DDNS domain that you can use. Then you just need to run caddy with your new domain name. If I registered a domain that was dave-sdr.webhop.me, that would be something like this:

caddy reverse-proxy --from dave-sdr.webhop.me --to :8080

You will need to configure port forwarding in your firewall/router to forward the following ports to the machine that's running Caddy and SolidSDR:

Port Protocol
80 TCP
443 TCP
50313 UDP

But then you should be able to access SolidSDR using your new DDNS domain, like https://dave-sdr.webhop.me

Make a Caddyfile

The main limitation of running caddy reverse-proxy as we have so far is that you can only ever use 1 address to access the server. If you use --from "*.local", then you won't be able to access the server with the IP address and vice-versa. If we want more than one address to work, we need to create a Caddyfile. Use a text editor to create a file named Caddyfile, and in it put something like this:

*.local, 192.168.1.50, dave-sdr.webhop.me, localhost {
	reverse_proxy :8080
}

This Caddyfile will let us access the server via all the listed addresses:

Replace the IP address, DDNS domain, etc with your values or remove ones you don't need. If you run caddy in the same directory that contains the Caddyfile, Caddy should pick it up automatically:

caddy run

If it does not, then you can tell Caddy where to find it:

caddy run --config /path/to/Caddyfile

Clone this wiki locally