diff --git a/README.md b/README.md
index bb9536a..a989040 100644
--- a/README.md
+++ b/README.md
@@ -194,17 +194,32 @@ For a more detail read the full
# Examples
-- [greenlock-express.js/examples/](https://git.rootprojects.org/root/greenlock-express.js/src/branch/master/examples)
- - [Express](https://git.rootprojects.org/root/greenlock-express.js/src/branch/master/examples/express/)
- - [Node's **http2**](https://git.rootprojects.org/root/greenlock-express.js/src/branch/master/examples/http2/)
- - [Node's https](https://git.rootprojects.org/root/greenlock-express.js/src/branch/master/examples/https/)
- - [**WebSockets**](https://git.rootprojects.org/root/greenlock-express.js/src/branch/master/examples/websockets/)
- - [Socket.IO](https://git.rootprojects.org/root/greenlock-express.js/src/branch/master/examples/socket.io/)
- - [Cluster](https://git.rootprojects.org/root/greenlock-express.js/src/branch/master/examples/cluster/)
- - [**Wildcards**](https://git.rootprojects.org/root/greenlock-express.js/src/branch/master/examples/wildcards/) (coming soon)
- - [**Localhost**](https://git.rootprojects.org/root/greenlock-express.js/src/branch/master/examples/localhost/) (coming soon)
- - [**CI/CD**](https://git.rootprojects.org/root/greenlock-express.js/src/branch/master/examples/ci-cd/) (coming soon)
- - [HTTP Proxy](https://git.rootprojects.org/root/greenlock-express.js/src/branch/master/examples/http-proxy/)
+To see all of the examples, just browse [greenlock-express.js/examples/](https://git.rootprojects.org/root/greenlock-express.js/src/branch/master/examples)
+
+| Example | Location + Description |
+| :--------------------: | :----------------------------------------------------------------------------------------------------------------------------------------- |
+| Express | [./examples/express/][ex-express] how to export an express app |
+| Node's **http2** | [./examples/http2/][ex-http2] how to use Node's built-in http2 server |
+| Node's https | [./examples/https][ex-https] how to customize the https server |
+| **WebSockets** | [./examples/websockets/][ex-websockets] how to use `on('upgrade')` |
+| Socket.IO | [./examples/socket.io][ex-socketio] how to overcomplicate a persistent connection |
+| Cluster | [./examples/cluster/][ex-cluster] how to use Node's built-in clustering with master and worker processes |
+| **Wildcards** | [coming someday][ex-wildcards] (ask to help create this) how to use DNS-01 for wildcard certs |
+| **Localhost** | [coming someday][ex-localhost] (ask to help create this) how to use DNS-01 for domains that resolve to private networks, such as 127.0.0.1 |
+| **CI/CD** | [coming someday][ex-cicd] (ask to help create this) how to use the `--staging` environment for test deployments |
+| HTTP Proxy | [examples/http-proxy][ex-http-proxy] how to (reverse) proxy decrypted traffic to another server |
+| - | Build your own
Be sure to tell me about it (open an issue) |
+
+[ex-express]: https://git.rootprojects.org/root/greenlock-express.js/src/branch/master/examples/express/
+[ex-http2]: https://git.rootprojects.org/root/greenlock-express.js/src/branch/master/examples/http2/
+[ex-https]: https://git.rootprojects.org/root/greenlock-express.js/src/branch/master/examples/https2/
+[ex-websockets]: https://git.rootprojects.org/root/greenlock-express.js/src/branch/master/examples/websockets/
+[ex-socketio]: https://git.rootprojects.org/root/greenlock-express.js/src/branch/master/examples/socketo.io/
+[ex-cluster]: https://git.rootprojects.org/root/greenlock-express.js/src/branch/master/examples/cluster/
+[ex-wildcards]: https://git.rootprojects.org/root/greenlock-express.js/src/branch/master/examples/wildcards/
+[ex-localhost]: https://git.rootprojects.org/root/greenlock-express.js/src/branch/master/examples/localhost/
+[ex-cicd]: https://git.rootprojects.org/root/greenlock-express.js/src/branch/master/examples/ci-cd/
+[ex-http-proxy]: https://git.rootprojects.org/root/greenlock-express.js/src/branch/master/examples/http-proxy/
# Troubleshooting
@@ -257,15 +272,40 @@ See the section on **Custom** callbacks and plugins below.
-->
- [Custom Domain Management](https://git.rootprojects.org/root/greenlock-manager-test.js)
- - `npx greenlock init --manager ./path-or-npm-name.js --manager-FOO 'set option FOO'`
+ - edit `server.js` and/or `.greenlockrc` to switch from the default `configDir` manager to your config system or database
+ - CLI example: `npx greenlock init --manager ./path-or-npm-name.js --manager-FOO 'set option FOO'`
- [Custom Key & Cert Storage](https://git.rootprojects.org/root/greenlock-store-test.js)
- - `npx greenlock defaults --store greenlock-store-fs --store-base-path ./greenlock.d`
+ - edit the `defaults` section of `greenlock.d/config.json` to change the certificate store or database
+ - CLI example: `npx greenlock defaults --store greenlock-store-fs --store-base-path ./greenlock.d`
- [Custom ACME HTTP-01 Challenges](https://git.rootprojects.org/root/acme-http-01-test.js)
- - `npx greenlock defaults --challenge-http-01 ./you-http-01.js`
- - `npx greenlock update --subject example.com --challenge-http-01 acme-http-01-standalone`
+ - edit the `defaults` section of `greenlock.d/config.json` to change the challenges by hand
+ - CLI example: `npx greenlock defaults --challenge-http-01 ./you-http-01.js`
- [Custom ACME DNS-01 Challenges](https://git.rootprojects.org/root/acme-dns-01-test.js)
- - `npx greenlock defaults --challenge-dns-01 acme-dns-01-ovh --challenge-dns-01-token xxxx`
- - `npx greenlock update --subject example.com --challenge-dns-01 ./your-dns-01.js`
+ - edit the `defaults` section of `greenlock.d/config.json` to change the challenges by hand
+ - CLI example: `npx greenlock defaults --challenge-dns-01 acme-dns-01-ovh --challenge-dns-01-token xxxx`
+ - Per-site example: `npx greenlock update --subject example.com --challenge-dns-01 ./your-dns-01.js`
+ - API example:
+ ```js
+ greenlock.sites.set({
+ subject: "example.com",
+ challenges: {
+ "dns-01": {
+ module: "my-npm-module-name",
+ foo: "some option",
+ bar: "some other option"
+ }
+ }
+ });
+ ```
+
+If you're using the default `configDir` management you can edit `greenlock.d/config.json` by hand to change
+which default and per-site modules are used.
+
+You can use the CLI, even if you're using a database, buckets, or your own file storage.
+
+You can also use the API, particularly if you need to set values dynamically per-site or per-user
+rather than using the global defaults. The certificate store and all challenges can be set
+per-site, but most per-site use cases are for DNS-01.
# Ready-made Integrations
diff --git a/examples/cluster/server.js b/examples/cluster/server.js
index f15adca..67e02f0 100644
--- a/examples/cluster/server.js
+++ b/examples/cluster/server.js
@@ -16,7 +16,12 @@ require("../../")
// n-1 cpus, with a minimum of 2
workers: 4
})
- .ready(httpsWorker);
+ // ready is only executed by workers (no-op in master)
+ .ready(httpsWorker)
+ // master is only executed by master (no-op in a worker)
+ .master(function() {
+ console.info("I'm the master");
+ });
function httpsWorker(glx) {
// WRONG