daemon
a web server system made of separate processes focused on a reverse proxy server that is configured automatically over RPC (or one line of config for pre-existing servers). It also has a launcher program that can run your (go) servers in a minimal chroot under a separated user.
It's especially good if you want to write go servers and share one URL between them easily with automatic TLS support.
Features
- 🔀 Run many backend web servers and securely share a single TLS protected domain name (via reverse proxy)
- 🧑💻 Read the logs of each server streaming real time to the dashboard which also lets you reload the config file and restart servers
- 🔛 Launch backend servers isolated in a minimal chroot as unprivileged users, configured in a simple textproto file
- 🤖 Backends automatically register their paths on the domain via gRPC (there's also support for servers that can't send the RPCs) and receive a port assignment and get their TLS certificate signed by the portal Certificate Authority
- 📚 There's a client library to do all this in one function call, and a tools library full of helpful functions for writing a go webserver
- 👾 Install as one binary that runs each server, or as individual binaries
Quick Start
Make sure you have go installed then
- Install it with
go install ask.systems/daemon@latest
- This will leave the binary at
~/go/bin/daemon
by default - I like to configure my
$GOPATH/bin
to be in my$PATH
- This will leave the binary at
- Run
daemon spawn
(or use~/go/bin/daemon
if it isn't in your$PATH
)- This will run spawn which will print logs and write an example
config.pbtxt
in the current directory - It will run portal and the dashboard, prompt for a dashboard login password, and then print the address of the dashboard at the end.
- Note: since this doesn't include getting an officially recognized TLS certificate, portal will generate a new self-signed certificate which you will have to accept warnings about in your browser.
- This will run spawn which will print logs and write an example
You can then edit the config file which has comments about how it works. You can add an instance of host to try out hosting a static website (there's an example in the file commented out).
More Info
Check out the Github README this page is a cropped version of it.
The go documentation has more info about the tools library and client API if you want to make your own go servers that automatically register with the reverse proxy.