Full-service installer for the Caddy web server, including systemd.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
AJ ONeal d5dbb4d6d5 update links 4 years ago
Library/LaunchDaemons move to own project 5 years ago
etc updated to use proper conventions 5 years ago
srv/www more proper default index.html 5 years ago
README.md update links 4 years ago
install-caddy use same bash fns for http_get as other daplie scripts 5 years ago


Caddy Installer

Works on

  • Ubuntu Linux
  • macOS Sierra
  • probably lots of others


  • systemd (Ubuntu, Fedora, Arch, etc)
  • launchd (OS X, macOS, Darwin)

Quick 'n' Dirty


curl -L https://git.coolaj86.com/coolaj86/caddy-installer.sh/raw/master/install-caddy | bash

Caddy + Features:

curl -L https://git.coolaj86.com/coolaj86/caddy-installer.sh/raw/master/install-caddy | bash -s -- search,realip

The default site location is /srv/www/ and the server begins immediately.

Test it at

Install... the installer

Yes... you install the installer

# download
curl -L https://git.coolaj86.com/coolaj86/caddy-installer.sh/raw/master/install-caddy -o install-caddy

#change permissions
sudo chown root:root ./install-caddy
sudo chmod a+x ./install-caddy

# move
sudo mv ./install-caddy /usr/local/bin/install-caddy


install-caddy --help

Usage: install-caddy [plugin1,plugin2,...]

Optional arguments (defaults shown)
  --os darwin      # any of windows darwin linux freebsd openbsd
  --arch amd64     # any of arm64 amd64 386 armv5 armv6l armv7l


Where do my websites go?

The default site is /srv/www/localhost.

If you own a domain (say example.com) then you should put a new folder in /srv/www (such as /srv/www/example.com) and then edit /etc/caddy/Caddyfile to include a config such as this:

https://example.com {
  root /srv/www/example.com
https://www.example.com {
  redir https://example.com

Start caddy on boot

Startup Scripts are installed by the installer :)

  • systemd (Ubuntu, Fedora, Arch, etc)
  • launchd (OS X, macOS, Darwin)

Caddy should begin running on ports 80 and 443 as soon as you install it and should automatically start on boot


all platforms

go (in which caddy is written) doesn't support privilege deescalation (running on root to bind to port 80 and 443 and then switching to a non-root user).

This isn't usually a problem, however, because the launchers (systemd et al) usually do.

darwin / macOS / OS X

  • launchd doesn't support privilege deescalation
  • authbind doesn't work on recent versions of OS X

However, you can use ipfw to locally port-forward.

Also, launchd is a pain to configure. There's not much in the way of official documuntation... but there is some great unofficial documentation and LaunchControl (direct download) makes it actually quite easy. (ignore that the site looks like a 90s spam site - much like MakeMKV - it's actually legit)

Debugging systemd

sudo -u www-data CADDYPATH=/etc/ssl/caddy /usr/local/bin/caddy -log stdout -agree=true -conf=/etc/caddy/Caddyfile -root=/var/tmp