2016-12-30 09:41:04 +00:00
<!-- BANNER_TPL_BEGIN -->
2016-12-30 07:53:29 +00:00
About Daplie: We're taking back the Internet!
2016-11-25 17:20:39 +00:00
--------------
2016-12-30 07:53:29 +00:00
Down with Google, Apple, and Facebook!
We're re-decentralizing the web and making it read-write again - one home cloud system at a time.
Tired of serving the Empire? Come join the Rebel Alliance:
2016-11-25 17:20:39 +00:00
2016-12-30 07:53:29 +00:00
< a href = "mailto:jobs@daplie.com" > jobs@daplie.com</ a > | [Invest in Daplie on Wefunder ](https://daplie.com/invest/ ) | [Pre-order Cloud ](https://daplie.com/preorder/ ), The World's First Home Server for Everyone
2016-11-25 17:20:39 +00:00
2016-12-30 09:41:04 +00:00
<!-- BANNER_TPL_END -->
2016-11-25 17:20:39 +00:00
2017-01-27 06:07:51 +00:00
Goldilocks
==========
2017-02-22 22:00:14 +00:00
The node.js webserver that's just right.
2015-07-08 06:43:46 +00:00
2015-07-08 07:46:01 +00:00
A simple HTTPS static file server with valid TLS (SSL) certs.
2015-07-08 06:43:46 +00:00
2017-02-01 22:47:08 +00:00
Comes bundled a valid certificate for localhost.daplie.me,
2015-07-08 07:46:01 +00:00
which is great for testing and development, and you can specify your own.
2015-06-30 23:11:01 +00:00
2015-07-08 06:43:46 +00:00
Also great for testing ACME certs from letsencrypt.org.
2015-06-24 21:44:42 +00:00
Install
-------
```bash
2017-02-22 22:00:14 +00:00
# v2 in npm
npm install -g goldilocks
2017-01-08 00:21:12 +00:00
# master in git (via ssh)
2017-02-22 22:00:14 +00:00
npm install -g git+ssh://git@git.daplie.com:Daplie/goldilocks.js
2017-01-08 00:21:12 +00:00
# master in git (unauthenticated)
2017-02-22 22:00:14 +00:00
npm install -g git+https://git@git.daplie.com:Daplie/goldilocks.js
2015-06-24 21:44:42 +00:00
```
2017-01-07 23:43:45 +00:00
```bash
2017-02-22 22:00:14 +00:00
goldilocks
2015-06-24 21:44:42 +00:00
```
2017-01-07 23:43:45 +00:00
```bash
2017-02-01 22:47:08 +00:00
Serving /Users/foo/ at https://localhost.daplie.me:8443
2015-06-24 21:44:42 +00:00
```
Usage
-----
2016-10-17 23:50:17 +00:00
Examples:
```
2017-01-20 20:13:41 +00:00
# Install
2017-02-22 22:00:14 +00:00
npm install -g git+https://git@git.daplie.com:Daplie/goldilocks.js
2017-01-20 20:13:41 +00:00
# Use tunnel
2017-02-22 22:00:14 +00:00
goldilocks --sites jane.daplie.me --agree-tos --email jane@example.com --tunnel
2017-01-20 20:13:41 +00:00
# BEFORE you access in a browser for the first time, use curl
# (because there's a concurrency bug in the greenlock setup)
curl https://jane.daplie.me
2016-10-17 23:50:17 +00:00
```
2016-10-17 23:52:32 +00:00
Options:
2017-02-22 22:00:14 +00:00
* `-p <port>` - i.e. `sudo goldilocks -p 443` (defaults to 80+443 or 8443)
* `-d <dirpath>` - i.e. `goldilocks -d /tmp/` (defaults to `pwd` )
2017-02-03 17:50:33 +00:00
* you can use `:hostname` as a template for multiple directories
2017-02-22 22:00:14 +00:00
* Example A: `goldilocks -d /srv/www/:hostname --sites localhost.foo.daplie.me,localhost.bar.daplie.me`
* Example B: `goldilocks -d ./:hostname/public/ --sites localhost.foo.daplie.me,localhost.bar.daplie.me`
2015-07-08 06:45:40 +00:00
* `-c <content>` - i.e. `server-https -c 'Hello, World! '` (defaults to directory index)
2016-10-17 23:46:11 +00:00
* `--express-app <path>` - path to a file the exports an express-style app (`function (req, res, next) { ... }`)
2016-10-07 19:46:29 +00:00
* `--livereload` - inject livereload into all html pages (see also: [fswatch ](http://stackoverflow.com/a/13807906/151312 )), but be careful if `<dirpath>` has thousands of files it will spike your CPU usage to 100%
2015-07-08 06:43:46 +00:00
2016-10-17 23:46:11 +00:00
* `--email <email>` - email to use for Let's Encrypt, Daplie DNS, Daplie Tunnel
* `--agree-tos` - agree to terms for Let's Encrypt, Daplie DNS
2017-02-02 03:02:25 +00:00
* `--sites <domain.tld>` comma-separated list of domains to respond to (default is `localhost.daplie.me` )
* optionally you may include the path to serve with `|` such as `example.com|/tmp,example.net/srv/www`
2017-02-01 22:56:40 +00:00
* `--tunnel` - make world-visible (must use `--sites` )
2016-10-17 23:46:11 +00:00
2015-07-08 06:43:46 +00:00
Specifying a custom HTTPS certificate:
2015-07-08 07:46:01 +00:00
* `--key /path/to/privkey.pem` specifies the server private key
2015-07-13 23:46:44 +00:00
* `--cert /path/to/fullchain.pem` specifies the bundle of server certificate and all intermediate certificates
* `--root /path/to/root.pem` specifies the certificate authority(ies)
2015-07-08 06:43:46 +00:00
2015-07-13 23:46:44 +00:00
Note: `--root` may specify single cert or a bundle, and may be used multiple times like so:
2015-07-08 07:46:01 +00:00
```
2015-07-13 23:46:44 +00:00
--root /path/to/primary-root.pem --root /path/to/cross-root.pem
2015-07-08 07:46:01 +00:00
```
Other options:
2015-07-13 23:46:44 +00:00
* `--serve-root true` alias for `-c` with the contents of root.pem
2017-02-01 22:56:40 +00:00
* `--sites example.com` changes the servername logged to the console
2015-07-13 23:46:44 +00:00
* `--letsencrypt-certs example.com` sets and key, fullchain, and root to standard letsencrypt locations
2015-06-30 23:11:01 +00:00
Examples
--------
```bash
2017-02-22 22:00:14 +00:00
goldilocks -p 1443 -c 'Hello from 1443' &
goldilocks -p 2443 -c 'Hello from 2443' &
goldilocks -p 3443 -d /tmp &
2015-06-30 23:11:01 +00:00
2017-02-01 22:47:08 +00:00
curl https://localhost.daplie.me:1443
2015-06-30 23:11:01 +00:00
> Hello from 1443
curl --insecure https://localhost:2443
> Hello from 2443
2017-02-01 22:47:08 +00:00
curl https://localhost.daplie.me:3443
2015-06-30 23:11:01 +00:00
> [html index listing of /tmp]
```
2015-07-08 06:43:46 +00:00
2017-02-01 22:47:08 +00:00
And if you tested < http: / / localhost . daplie . me:3443 > in a browser,
it would redirect to < https: / / localhost . daplie . me:3443 > (on the same port).
2015-07-08 06:43:46 +00:00
(in curl it would just show an error message)
### Testing ACME Let's Encrypt certs
2015-07-08 06:51:38 +00:00
In case you didn't know, you can get free https certificates from
[letsencrypt.org ](https://letsencrypt.org )
2015-07-08 06:48:18 +00:00
(ACME letsencrypt)
and even a free subdomain from < https: / / freedns . afraid . org > .
2015-07-08 06:43:46 +00:00
2015-07-08 06:51:38 +00:00
If you want to quickly test the certificates you installed,
you can do so like this:
2015-07-08 06:43:46 +00:00
```bash
2017-02-22 22:00:14 +00:00
goldilocks -p 8443 \
2015-07-08 07:27:14 +00:00
--letsencrypt-certs test.mooo.com \
2015-07-13 23:46:44 +00:00
--serve-root true
2015-07-08 07:27:14 +00:00
```
which is equilavent to
```bash
2017-02-22 22:00:14 +00:00
goldilocks -p 8443 \
2017-02-01 22:56:40 +00:00
--sites test.mooo.com
2015-07-08 06:43:46 +00:00
--key /etc/letsencrypt/live/test.mooo.com/privkey.pem \
2015-07-13 23:46:44 +00:00
--cert /etc/letsencrypt/live/test.mooo.com/fullchain.pem \
--root /etc/letsencrypt/live/test.mooo.com/root.pem \
-c "$(cat 'sudo /etc/letsencrypt/live/test.mooo.com/root.pem')"
2015-07-08 06:43:46 +00:00
```
2015-07-08 07:27:14 +00:00
and can be tested like so
2015-07-08 06:43:46 +00:00
```bash
2015-07-13 23:46:44 +00:00
curl --insecure https://test.mooo.com:8443 > ./root.pem
curl https://test.mooo.com:8843 --cacert ./root.pem
2015-07-08 06:43:46 +00:00
```
* [QuickStart Guide for Let's Encrypt ](https://coolaj86.com/articles/lets-encrypt-on-raspberry-pi/ )
* [QuickStart Guide for FreeDNS ](https://coolaj86.com/articles/free-dns-hosting-with-freedns-afraid-org.html )