|Project Name||Stars||Downloads||Repos Using This||Packages Using This||Most Recent Commit||Total Releases||Latest Release||Open Issues||License||Language|
|Frp||68,101||9||2 days ago||78||July 10, 2022||97||apache-2.0||Go|
|A fast reverse proxy to help you expose a local server behind a NAT or firewall to the internet.|
|Caddy||47,606||118||334||a day ago||85||October 26, 2020||80||apache-2.0||Go|
|Fast and extensible multi-platform HTTP/1-2-3 web server with automatic HTTPS|
|Vapor||22,858||6 days ago||November 16, 2021||113||mit||Swift|
|💧 A server-side Swift HTTP web framework.|
|Postgrest||20,624||4||19 hours ago||37||July 12, 2022||208||mit||Haskell|
|REST API for any Postgres database|
|Aiohttp||13,602||7,355||4,894||2 days ago||220||November 14, 2021||497||other||Python|
|Asynchronous HTTP client/server framework for asyncio and Python|
|A full-featured http proxy for node.js|
|a simple zero-configuration command-line http server|
|Chisel||9,160||2||21||4 days ago||27||February 03, 2022||184||mit||Go|
|A fast TCP/UDP tunnel over HTTP|
|Warp||8,145||73||355||19 hours ago||34||November 09, 2021||216||mit||Rust|
|A super-easy, composable, web server framework for warp speeds.|
|Proxygen||7,826||11 hours ago||40||other||C++|
|A collection of C++ HTTP libraries including an easy to use HTTP server.|
DatHTTPD has been replaced by Homebase! Same basic design, but more features and an easier-to-pronounce name.
A Web server for Dat and HTTPS.
Dat sites are hosted at public keys, which are the equivalent of IP addresses in the P2P network. The pubkeys are ugly, though! Wouldn't it be nice if your dats could have nice DNS shortnames, and also rehost over HTTPS for people still on legacy browsers?
dathttpd is for you!
You can use the Dat CLI or the Beaker Browser.
After uploading your site to a Dat archive, identify the archive's URL. You'll need this for your dathttpd config.
Create an A record that points to your server's IP address.
Make sure your server is accessible by port 80 (http), 443 (https), and 3282 (dat).
On your server, create a config file at
~/.dathttpd.yml that follows this structure:
letsencrypt: email: '[email protected]' agreeTos: true sites: my-site.com: url: dat://1f968afe867f06b0d344c11efc23591c7f8c5fb3b4ac938d6000f330f6ee2a03/ my-other-site.com: url: dat://ff34725120b2f3c5bd5028e4f61d14a45a22af48a7b12126d5d588becde88a93/
# install build dependencies sudo apt-get install libtool m4 automake libcap2-bin build-essential # install dathttpd (https://docs.npmjs.com/getting-started/fixing-npm-permissions) npm install -g dathttpd # give node perms to use ports 80 and 443 sudo setcap cap_net_bind_service=+ep `readlink -f \`which node\`` # start dathttpd dathttpd
To daemonify the server in Debian-based systems, stop the dathttpd process and then run:
# install a helper tool npm install -g add-to-systemd # create a systemd entry for dathttpd sudo add-to-systemd dathttpd --user $(whoami) $(which dathttpd) # start the dathttpd service sudo systemctl start dathttpd
Here's an example
ports: http: 80 https: 443 metric: 8089 directory: ~/.dathttpd letsencrypt: email: '[email protected]' agreeTos: true sites: my-site.com: url: dat://1f968afe867f06b0d344c11efc23591c7f8c5fb3b4ac938d6000f330f6ee2a03/ datOnly: false my-other-site.com: url: dat://ff34725120b2f3c5bd5028e4f61d14a45a22af48a7b12126d5d588becde88a93/ datOnly: true my-proxy.com: proxy: http://localhost:8080 my-old-site.com: redirect: https://my-site.com
The port to serve the HTTP sites. Defaults to 80. (Optional)
HTTP automatically redirects to HTTPS.
The port to serve the HTTPS sites. Defaults to 443. (Optional)
The port to serve the prometheus metrics. Defaults to 8089. (Optional)
The directory where dathttpd will store your Dat archive's files. Defaults to ~/.dathttpd. (Optional)
Settings for LetsEncrypt. If false or unset, HTTPS will be disabled.
The email to send Lets Encrypt? notices to. (Required)
Do you agree to the terms of service of Lets Encrypt? (Required, must be true)
A listing of the sites to host. Each site is labeled (keyed) by the hostname you want the site to serve at.
Sites can either host dat archives or proxy to a URL. To make a dat-site, set the
url attribute. To make a proxy, set the
You'll need to configure the DNS entry for the hostname to point to the server. For instance, if using
site.myhostname.com, you'll need a DNS entry pointing
site.myhostname.com to the server.
The Dat URL of the site to host.
The HTTP URL of the site to proxy.
The HTTP URL of the site to redirect traffic to.
If true, rather than serve the assets over HTTPS, dathttpd will serve a redirect to the dat:// location. Defaults to false. (Optional)
If true, serve the HSTS header. You can specify how long the strict-transport rule lasts as the value. (parsed using the ms module). If
true is given, will default to 7 days. Defaults to false. (Optional)
--config <path>use the config file at the given path instead of the default
~/.dathttpd.yml. Overrides the value of the
DATHTTPD_CONFIG=cfg_file_pathspecify an alternative path to the config than
stagingto use the lets-encrypt testing servers.
DatHTTPD has built-in support for Prometheus, which can be visualized by Grafana.
DatHTTPD exposes its metrics at port 8089. Prometheus periodically scrapes the metrics, and stores them in a database. Grafana provides a nice dashboard. It's a little daunting at first, but setup should be relatively painless.
Follow these steps:
Your prometheus.yml config should include have the scrape_configs set like this:
scrape_configs: - job_name: 'prometheus' static_configs: - targets: ['localhost:9090'] - job_name: 'dathttpd' static_configs: - targets: ['localhost:8089']
Report any issues you have along the way!