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:
- Install the Golang compiler:
pkgin update && pkgin install go122 git-base gcc12 gmake - Set environment variables:
export GOROOT=/opt/local/go122; export GOPATH=/root/go; export PATH=$GOROOT/bin:$GOPATH/bin:$PATH - Install xcaddy:
go install github.com/caddyserver/xcaddy/cmd/xcaddy@latest - Build Caddy:
xcaddy build --output /opt/local/bin/caddy - Create caddy user/group:
groupadd -g 800 caddy; useradd -u 800 -g caddy -d /var/caddy -s /usr/bin/false caddy - Create directories:
mkdir -p /opt/local/etc/caddy /var/caddy/data /var/log/caddy - Set permissions:
chown -R caddy:caddy /var/caddy /var/log/caddy; chmod 750 /var/caddy /var/log/caddy - Create Caddyfile:
nano /opt/local/etc/caddy/Caddyfile - Create SMF manifest at
/var/svc/manifest/site/caddy.xml - Import and enable:
svccfg import /var/svc/manifest/site/caddy.xml; svcadm enable svc:/site/caddy:default - Reload config:
svcadm refresh svc:/site/caddy:default
See also: home-servers-tunneling, self-hosting-text-website, goblog-freebsd, owncast-streaming