Caddy in a SmartOS Native Zone

On my home server, I am currently using Caddy as a reverse-proxy. For the public sites such as this Bookstack app, Caddy also provides SSL and other key security requirements.

I have Caddy running in a native SmartOS zone. Caddy isn’t that resource-intensive, so it could run on as little as 512 MB of RAM. In my zone, I gave it 2 GB of RAM. This is because I want to compile Caddy from scratch.

Steps to get Caddy running in a native SmartOS zone:

  1. Install the Golang compiler: pkgin update && pkgin install go122 git-base gcc12 gmake
  2. Set environment variables: export GOROOT=/opt/local/go122; export GOPATH=/root/go; export PATH=$GOROOT/bin:$GOPATH/bin:$PATH
  3. Install xcaddy: go install github.com/caddyserver/xcaddy/cmd/xcaddy@latest
  4. Build Caddy: xcaddy build --output /opt/local/bin/caddy
  5. Create caddy user/group: groupadd -g 800 caddy; useradd -u 800 -g caddy -d /var/caddy -s /usr/bin/false caddy
  6. Create directories: mkdir -p /opt/local/etc/caddy /var/caddy/data /var/log/caddy
  7. Set permissions: chown -R caddy:caddy /var/caddy /var/log/caddy; chmod 750 /var/caddy /var/log/caddy
  8. Create Caddyfile: nano /opt/local/etc/caddy/Caddyfile
  9. Create SMF manifest at /var/svc/manifest/site/caddy.xml
  10. Import and enable: svccfg import /var/svc/manifest/site/caddy.xml; svcadm enable svc:/site/caddy:default
  11. Reload config: svcadm refresh svc:/site/caddy:default

See also: home-servers-tunneling, self-hosting-text-website, goblog-freebsd, owncast-streaming