From f006dfdbe61acb4e3c19f6fe8e67ebcf8b02ad40 Mon Sep 17 00:00:00 2001 From: David Young Date: Tue, 26 Jan 2021 10:54:24 +1300 Subject: [PATCH] Make better use of markdown snippets --- .../ha-docker-swarm/docker-swarm-mode.md | 3 +-- manuscript/recipes/autopirate.md | 3 +-- manuscript/recipes/bitwarden.md | 9 +-------- manuscript/recipes/bookstack.md | 11 ++--------- manuscript/recipes/calibre-web.md | 11 ++--------- manuscript/recipes/cyberchef.md | 10 +--------- manuscript/recipes/duplicati.md | 3 +-- manuscript/recipes/duplicity.md | 3 +-- manuscript/recipes/elkarbackup.md | 11 ++--------- manuscript/recipes/emby.md | 11 ++--------- manuscript/recipes/ghost.md | 10 +--------- manuscript/recipes/gitlab.md | 18 ++---------------- manuscript/recipes/gollum.md | 15 ++------------- manuscript/recipes/homeassistant.md | 9 ++------- manuscript/recipes/huginn.md | 10 ++-------- manuscript/recipes/instapy.md | 13 ++----------- manuscript/recipes/jellyfin.md | 10 ++-------- manuscript/recipes/kanboard.md | 7 +------ manuscript/recipes/keycloak.md | 12 ++---------- manuscript/recipes/komga.md | 10 +--------- manuscript/recipes/linx.md | 11 +---------- manuscript/recipes/mail.md | 8 +++----- manuscript/recipes/mattermost.md | 11 ++--------- manuscript/recipes/miniflux.md | 6 +----- manuscript/recipes/minio.md | 6 +----- manuscript/recipes/munin.md | 9 ++------- manuscript/recipes/nextcloud.md | 11 ++--------- manuscript/recipes/openldap.md | 6 +----- manuscript/recipes/owntracks.md | 11 ++--------- manuscript/recipes/photoprism.md | 11 ++--------- manuscript/recipes/phpipam.md | 9 ++------- manuscript/recipes/plex.md | 11 ++--------- manuscript/recipes/privatebin.md | 6 +----- manuscript/recipes/realms.md | 11 ++--------- manuscript/recipes/restic.md | 11 ++--------- manuscript/recipes/swarmprom.md | 6 +----- manuscript/recipes/template.md | 11 +---------- manuscript/recipes/tiny-tiny-rss.md | 9 ++------- manuscript/recipes/wallabag.md | 11 ++--------- manuscript/recipes/wekan.md | 10 ++-------- manuscript/recipes/wetty.md | 11 ++--------- 41 files changed, 67 insertions(+), 318 deletions(-) diff --git a/manuscript/ha-docker-swarm/docker-swarm-mode.md b/manuscript/ha-docker-swarm/docker-swarm-mode.md index 56513fc..32abc16 100644 --- a/manuscript/ha-docker-swarm/docker-swarm-mode.md +++ b/manuscript/ha-docker-swarm/docker-swarm-mode.md @@ -127,8 +127,7 @@ networks: - subnet: 172.16.0.0/24 ``` -!!! note - Setup unique static subnets for every stack you deploy. This avoids IP/gateway conflicts which can otherwise occur when you're creating/removing stacks a lot. See [my list](/reference/networks/) here. +--8<-- "reference-networks.md" Launch the cleanup stack by running ```docker stack deploy docker-cleanup -c ``` diff --git a/manuscript/recipes/autopirate.md b/manuscript/recipes/autopirate.md index a0df43e..c984b75 100644 --- a/manuscript/recipes/autopirate.md +++ b/manuscript/recipes/autopirate.md @@ -104,8 +104,7 @@ networks: - subnet: 172.16.11.0/24 ```` -!!! note - Setup unique static subnets for every stack you deploy. This avoids IP/gateway conflicts which can otherwise occur when you're creating/removing stacks a lot. See [my list](/reference/networks/) here. +--8<-- "reference-networks.md" #### Assemble the tools.. diff --git a/manuscript/recipes/bitwarden.md b/manuscript/recipes/bitwarden.md index c4b454e..30c1d34 100644 --- a/manuscript/recipes/bitwarden.md +++ b/manuscript/recipes/bitwarden.md @@ -20,14 +20,7 @@ Bitwarden is a free and open source password management solution for individuals * Secure password generator * Self-host on your own server (optional) -## Ingredients - -!!! summary "Ingredients" - Existing: - - 1. [X] [Docker swarm cluster](/ha-docker-swarm/design/) with [persistent shared storage](/ha-docker-swarm/shared-storage-ceph.md) - 2. [X] [Traefik](/ha-docker-swarm/traefik) configured per design - 3. [X] DNS entry for the hostname you intend to use, pointed to your [keepalived](/ha-docker-swarm/keepalived/) IP +--8<-- "recipe-standard-ingredients.md" ## Preparation diff --git a/manuscript/recipes/bookstack.md b/manuscript/recipes/bookstack.md index bbddeaf..6d49be4 100644 --- a/manuscript/recipes/bookstack.md +++ b/manuscript/recipes/bookstack.md @@ -8,11 +8,7 @@ A friendly middle ground between heavyweights like MediaWiki or Confluence and [ I like to protect my public-facing web UIs with an [oauth_proxy](/reference/oauth_proxy), ensuring that if an application bug (or a user misconfiguration) exposes the app to unplanned public scrutiny, I have a second layer of defense. -## Ingredients - -1. [Docker swarm cluster](/ha-docker-swarm/design/) with [persistent shared storage](/ha-docker-swarm/shared-storage-ceph.md) -2. [Traefik](/ha-docker-swarm/traefik/) configured per design -3. DNS entry for the hostname you intend to use, pointed to your [keepalived](/ha-docker-swarm/keepalived/) IP +--8<-- "recipe-standard-ingredients.md" ## Preparation @@ -124,10 +120,7 @@ networks: - subnet: 172.16.33.0/24 ``` -!!! note - Setup unique static subnets for every stack you deploy. This avoids IP/gateway conflicts which can otherwise occur when you're creating/removing stacks a lot. See [my list](/reference/networks/) here. - - +--8<-- "reference-networks.md" ## Serving diff --git a/manuscript/recipes/calibre-web.md b/manuscript/recipes/calibre-web.md index a8f914d..388e33f 100644 --- a/manuscript/recipes/calibre-web.md +++ b/manuscript/recipes/calibre-web.md @@ -21,11 +21,7 @@ Support for editing eBook metadata and deleting eBooks from Calibre library * Upload new books in PDF, epub, fb2 format -## Ingredients - -1. [Docker swarm cluster](/ha-docker-swarm/design/) with [persistent shared storage](/ha-docker-swarm/shared-storage-ceph.md) -2. [Traefik](/ha-docker-swarm/traefik) configured per design -3. DNS entry for the hostname you intend to use, pointed to your [keepalived](/ha-docker-swarm/keepalived/) IP +--8<-- "recipe-standard-ingredients.md" ## Preparation @@ -107,10 +103,7 @@ networks: - subnet: 172.16.18.0/24 ``` -!!! note - Setup unique static subnets for every stack you deploy. This avoids IP/gateway conflicts which can otherwise occur when you're creating/removing stacks a lot. See [my list](/reference/networks/) here. - - +--8<-- "reference-networks.md" ## Serving diff --git a/manuscript/recipes/cyberchef.md b/manuscript/recipes/cyberchef.md index 448d71c..4c950e1 100644 --- a/manuscript/recipes/cyberchef.md +++ b/manuscript/recipes/cyberchef.md @@ -17,15 +17,7 @@ Here are some examples of fancy hax0r tricks you can do with CyberChef: Here's a [live demo](https://gchq.github.io/CyberChef)! -## Ingredients - -!!! summary "Ingredients" - Already deployed: - - * [X] [Docker swarm cluster](/ha-docker-swarm/design/) with [persistent shared storage](/ha-docker-swarm/shared-storage-ceph.md) - * [X] [Traefik](/ha-docker-swarm/traefik) configured per design - * [X] DNS entry for the hostname you intend to use (*or a wildcard*), pointed to your [keepalived](/ha-docker-swarm/keepalived/) IP - +--8<-- "recipe-standard-ingredients.md" ## Preparation diff --git a/manuscript/recipes/duplicati.md b/manuscript/recipes/duplicati.md index c8c4bd9..1bdfa30 100644 --- a/manuscript/recipes/duplicati.md +++ b/manuscript/recipes/duplicati.md @@ -94,8 +94,7 @@ networks: - subnet: 172.16.55.0/24 ``` -!!! note - Setup unique static subnets for every stack you deploy. This avoids IP/gateway conflicts which can otherwise occur when you're creating/removing stacks a lot. See [my list](/reference/networks/) here. +--8<-- "reference-networks.md" ## Serving diff --git a/manuscript/recipes/duplicity.md b/manuscript/recipes/duplicity.md index a63b041..373c0dd 100644 --- a/manuscript/recipes/duplicity.md +++ b/manuscript/recipes/duplicity.md @@ -143,8 +143,7 @@ networks: - subnet: 172.16.10.0/24 ``` -!!! note -Setup unique static subnets for every stack you deploy. This avoids IP/gateway conflicts which can otherwise occur when you're creating/removing stacks a lot. See [my list](/reference/networks/) here. +--8<-- "reference-networks.md" ## Serving diff --git a/manuscript/recipes/elkarbackup.md b/manuscript/recipes/elkarbackup.md index a9f393e..009a26d 100644 --- a/manuscript/recipes/elkarbackup.md +++ b/manuscript/recipes/elkarbackup.md @@ -12,11 +12,7 @@ ElkarBackup is a free open-source backup solution based on RSync/RSnapshot. It's ## Details -## Ingredients - -1. [Docker swarm cluster](/ha-docker-swarm/design/) with [persistent shared storage](/ha-docker-swarm/shared-storage-ceph.md) -2. [Traefik](/ha-docker-swarm/traefik) configured per design -3. DNS entry for the hostname you intend to use, pointed to your [keepalived](/ha-docker-swarm/keepalived/) IP +--8<-- "recipe-standard-ingredients.md" ## Preparation @@ -151,10 +147,7 @@ networks: - subnet: 172.16.36.0/24 ``` -!!! note - Setup unique static subnets for every stack you deploy. This avoids IP/gateway conflicts which can otherwise occur when you're creating/removing stacks a lot. See [my list](/reference/networks/) here. - - +--8<-- "reference-networks.md" ## Serving diff --git a/manuscript/recipes/emby.md b/manuscript/recipes/emby.md index ff3e34c..60bb282 100644 --- a/manuscript/recipes/emby.md +++ b/manuscript/recipes/emby.md @@ -6,11 +6,7 @@ I've started experimenting with Emby as an alternative to Plex, because of the advanced [parental controls](https://github.com/MediaBrowser/Wiki/wiki/Parental-Controls) it offers. Based on my experimentation thus far, I have a "**kid-safe**" profile which automatically logs in, and only displays kid-safe content, based on ratings. -## Ingredients - -1. [Docker swarm cluster](/ha-docker-swarm/design/) with [persistent shared storage](/ha-docker-swarm/shared-storage-ceph.md) -2. [Traefik](/ha-docker-swarm/traefik) configured per design -3. DNS entry for the hostname you intend to use, pointed to your [keepalived](/ha-docker-swarm/keepalived/) IP +--8<-- "recipe-standard-ingredients.md" ## Preparation @@ -68,10 +64,7 @@ networks: - subnet: 172.16.17.0/24 ``` -!!! note - Setup unique static subnets for every stack you deploy. This avoids IP/gateway conflicts which can otherwise occur when you're creating/removing stacks a lot. See [my list](/reference/networks/) here. - - +--8<-- "reference-networks.md" ## Serving diff --git a/manuscript/recipes/ghost.md b/manuscript/recipes/ghost.md index 38582a3..140fbc0 100644 --- a/manuscript/recipes/ghost.md +++ b/manuscript/recipes/ghost.md @@ -6,14 +6,7 @@ hero: Ghost - A recipe for beautiful online publication. ![](/images/ghost.png) -## Ingredients - -!!! summary "Ingredients" - Existing: - - 1. [X] [Docker swarm cluster](/ha-docker-swarm/design/) with [persistent shared storage](/ha-docker-swarm/shared-storage-ceph.md) - 2. [X] [Traefik](/ha-docker-swarm/traefik) configured per design - 3. [X] DNS entry for the hostname you intend to use, pointed to your [keepalived](/ha-docker-swarm/keepalived/) IP +--8<-- "recipe-standard-ingredients.md" ## Preparation @@ -25,7 +18,6 @@ Create the location for the bind-mount of the application data, so that it's per mkdir -p /var/data/ghost ``` - ### Setup Docker Swarm Create a docker swarm config file in docker-compose syntax (v3), something like this: diff --git a/manuscript/recipes/gitlab.md b/manuscript/recipes/gitlab.md index 28e5b18..ee7beeb 100644 --- a/manuscript/recipes/gitlab.md +++ b/manuscript/recipes/gitlab.md @@ -6,14 +6,7 @@ GitLab is a self-hosted [alternative to GitHub](https://about.gitlab.com/compari Docker does maintain an [official "Omnibus" container](https://docs.gitlab.com/omnibus/docker/README.html), but for this recipe I prefer the "[dockerized gitlab](https://github.com/sameersbn/docker-gitlab)" project, since it allows distribution of the various Gitlab components across multiple swarm nodes. -## Ingredients - -!!! summary "Ingredients" - Existing: - - 1. [X] [Docker swarm cluster](/ha-docker-swarm/design/) with [persistent shared storage](/ha-docker-swarm/shared-storage-ceph.md) - 2. [X] [Traefik](/ha-docker-swarm/traefik) configured per design - 3. [X] DNS entry for the hostname you intend to use, pointed to your [keepalived](/ha-docker-swarm/keepalived/) IP +--8<-- "recipe-standard-ingredients.md" ## Preparation @@ -114,14 +107,7 @@ networks: - subnet: 172.16.2.0/24 ```` -!!! note - Setup unique static subnets for every stack you deploy. This avoids IP/gateway conflicts which can otherwise occur when you're creating/removing stacks a lot. See [my list](/reference/networks/) here. - - - - - - +--8<-- "reference-networks.md" ## Serving diff --git a/manuscript/recipes/gollum.md b/manuscript/recipes/gollum.md index c6f8b13..a6c047a 100644 --- a/manuscript/recipes/gollum.md +++ b/manuscript/recipes/gollum.md @@ -30,15 +30,7 @@ Gollum meets all these requirements, and as an added bonus, is extremely fast an !!! note Since Gollum itself offers no user authentication, this design secures gollum behind an [oauth2 proxy](/reference/oauth_proxy/), so that in order to gain access to the Gollum UI at all, oauth2 authentication (_to GitHub, GitLab, Google, etc_) must have already occurred. - -## Ingredients - -!!! summary "Ingredients" - Existing: - - 1. [X] [Docker swarm cluster](/ha-docker-swarm/design/) with [persistent shared storage](/ha-docker-swarm/shared-storage-ceph.md) - 2. [X] [Traefik](/ha-docker-swarm/traefik) configured per design - 3. [X] DNS entry for the hostname you intend to use, pointed to your [keepalived](/ha-docker-swarm/keepalived/) IP +--8<-- "recipe-standard-ingredients.md" ## Preparation @@ -116,10 +108,7 @@ networks: - subnet: 172.16.9.0/24 ``` -!!! note - Setup unique static subnets for every stack you deploy. This avoids IP/gateway conflicts which can otherwise occur when you're creating/removing stacks a lot. See [my list](/reference/networks/) here. - - +--8<-- "reference-networks.md" ## Serving diff --git a/manuscript/recipes/homeassistant.md b/manuscript/recipes/homeassistant.md index c4c9373..6e3bb4f 100644 --- a/manuscript/recipes/homeassistant.md +++ b/manuscript/recipes/homeassistant.md @@ -6,11 +6,7 @@ Home Assistant is a home automation platform written in Python, with extensive s This recipie combines the [extensibility](https://home-assistant.io/components/) of [Home Assistant](https://home-assistant.io/) with the flexibility of [InfluxDB](https://docs.influxdata.com/influxdb/v1.4/) (_for time series data store_) and [Grafana](https://grafana.com/) (_for **beautiful** visualisation of that data_). -## Ingredients - -1. [Docker swarm cluster](/ha-docker-swarm/design/) with [persistent shared storage](/ha-docker-swarm/shared-storage-ceph.md) -2. [Traefik](/ha-docker-swarm/traefik) configured per design -3. DNS entry for the hostname you intend to use, pointed to your [keepalived](/ha-docker-swarm/keepalived/) IP +--8<-- "recipe-standard-ingredients.md" ## Preparation @@ -118,8 +114,7 @@ networks: - subnet: 172.16.13.0/24 ``` -!!! note - Setup unique static subnets for every stack you deploy. This avoids IP/gateway conflicts which can otherwise occur when you're creating/removing stacks a lot. See [my list](/reference/networks/) here. +--8<-- "reference-networks.md" ## Serving diff --git a/manuscript/recipes/huginn.md b/manuscript/recipes/huginn.md index 90d88ad..3142572 100644 --- a/manuscript/recipes/huginn.md +++ b/manuscript/recipes/huginn.md @@ -6,10 +6,7 @@ Huginn is a system for building agents that perform automated tasks for you onli -## Ingredients - -1. [Docker swarm cluster](/ha-docker-swarm/design/) with [persistent shared storage](/ha-docker-swarm/shared-storage-ceph.md) -2. [Traefik](/ha-docker-swarm/traefik) configured per design +--8<-- "recipe-standard-ingredients.md" ## Preparation @@ -127,10 +124,7 @@ networks: - subnet: 172.16.6.0/24 ``` -!!! note - Setup unique static subnets for every stack you deploy. This avoids IP/gateway conflicts which can otherwise occur when you're creating/removing stacks a lot. See [my list](/reference/networks/) here. - - +--8<-- "reference-networks.md" ## Serving diff --git a/manuscript/recipes/instapy.md b/manuscript/recipes/instapy.md index fbb96ee..f9d4ffb 100644 --- a/manuscript/recipes/instapy.md +++ b/manuscript/recipes/instapy.md @@ -8,15 +8,7 @@ What's an Instagram bot? Basically, you feed the bot your Instagram user/passwor Great power, right? A client (_yes, you can [hire](https://www.funkypenguin.co.nz/) me!_) asked me to integrate InstaPy into their swarm, and this recipe is the result. -## Ingredients - -!!! summary "Ingredients" - Existing: - - 1. [X] [Docker swarm cluster](/ha-docker-swarm/design/) with [persistent shared storage](/ha-docker-swarm/shared-storage-ceph.md) - 2. [X] [Traefik](/ha-docker-swarm/traefik) configured per design - 3. [X] DNS entry for the hostname you intend to use, pointed to your [keepalived](/ha-docker-swarm/keepalived/) IP - +--8<-- "recipe-standard-ingredients.md" ## Preparation @@ -65,8 +57,7 @@ services: - "5900:5900" ``` -!!! note - Setup unique static subnets for every stack you deploy. This avoids IP/gateway conflicts which can otherwise occur when you're creating/removing stacks a lot. See [my list](/reference/networks/) here. +--8<-- "reference-networks.md" ### Command your bot diff --git a/manuscript/recipes/jellyfin.md b/manuscript/recipes/jellyfin.md index 40763e8..7702aad 100644 --- a/manuscript/recipes/jellyfin.md +++ b/manuscript/recipes/jellyfin.md @@ -6,11 +6,7 @@ If it looks very similar as Emby, is because it started as a fork of it, but it has evolve since them. For a complete explanation of the why, look [here](https://jellyfin.org/docs/general/about.html). -## Ingredients - -1. [Docker swarm cluster](/ha-docker-swarm/design/) with [persistent shared storage](/ha-docker-swarm/shared-storage-ceph.md) -2. [Traefik](/ha-docker-swarm/traefik) configured per design -3. DNS entry for the hostname you intend to use, pointed to your [keepalived](/ha-docker-swarm/keepalived/) IP +--8<-- "recipe-standard-ingredients.md" ## Preparation @@ -77,9 +73,7 @@ networks: - subnet: 172.16.57.0/24 ``` -!!! note - Setup unique static subnets for every stack you deploy. This avoids IP/gateway conflicts which can otherwise occur when you're creating/removing stacks a lot. See [my list](/reference/networks/) here. - +--8<-- "reference-networks.md" ## Serving diff --git a/manuscript/recipes/kanboard.md b/manuscript/recipes/kanboard.md index 380e897..d38eac6 100644 --- a/manuscript/recipes/kanboard.md +++ b/manuscript/recipes/kanboard.md @@ -19,12 +19,7 @@ Features include: ![](/images/kanboard.png) -## Ingredients - -1. [Docker swarm cluster](/ha-docker-swarm/design/) with [persistent shared storage](/ha-docker-swarm/shared-storage-ceph.md) -2. [Traefik](/ha-docker-swarm/traefik) configured per design -3. DNS entry pointing your NextCloud url (_kanboard.example.com_) to your [keepalived](/ha-docker-swarm/keepalived/) IP - +--8<-- "recipe-standard-ingredients.md" ## Preparation diff --git a/manuscript/recipes/keycloak.md b/manuscript/recipes/keycloak.md index dea1be6..1f0b8ba 100644 --- a/manuscript/recipes/keycloak.md +++ b/manuscript/recipes/keycloak.md @@ -4,14 +4,7 @@ ![KeyCloak Screenshot](../images/keycloak.png) -## Ingredients - -!!! Summary -Existing: - - * [X] [Docker swarm cluster](/ha-docker-swarm/design/) with [persistent shared storage](/ha-docker-swarm/shared-storage-ceph/) - * [X] [Traefik](/ha-docker-swarm/traefik) configured per design - * [X] DNS entry for the hostname (_i.e. "keycloak.your-domain.com"_) you intend to use, pointed to your [keepalived](/ha-docker-swarm/keepalived/) IP +--8<-- "recipe-standard-ingredients.md" ## Preparation @@ -121,8 +114,7 @@ networks: - subnet: 172.16.49.0/24 ``` -!!! note -Setup unique static subnets for every stack you deploy. This avoids IP/gateway conflicts which can otherwise occur when you're creating/removing stacks a lot. See [my list](/reference/networks/) here. +--8<-- "reference-networks.md" ## Serving diff --git a/manuscript/recipes/komga.md b/manuscript/recipes/komga.md index 9c32041..b54d315 100644 --- a/manuscript/recipes/komga.md +++ b/manuscript/recipes/komga.md @@ -8,15 +8,7 @@ So you've just watched a bunch of superhero movies, and you're suddenly inspired ## Ingredients -!!! summary "Ingredients" - Already deployed: - - * [X] [Docker swarm cluster](/ha-docker-swarm/design/) with [persistent shared storage](/ha-docker-swarm/shared-storage-ceph.md) - * [X] [Traefik](/ha-docker-swarm/traefik) configured per design - * [X] DNS entry for the hostname you intend to use (*or a wildcard*), pointed to your [keepalived](/ha-docker-swarm/keepalived/) IP - - Related: - +--8<-- "recipe-standard-ingredients.md" * [X] [AutoPirate](/recipes/autopirate/) components (*specifically [Mylar](/recipes/autopirate/mylar/)*), for searching for, downloading, and managing comic books ## Preparation diff --git a/manuscript/recipes/linx.md b/manuscript/recipes/linx.md index 5feb98d..823fa0e 100644 --- a/manuscript/recipes/linx.md +++ b/manuscript/recipes/linx.md @@ -14,16 +14,7 @@ Want to privately share some log output with a password, or a self-destructing c - :white_check_mark: Torrent download of files using web seeding - :white_check_mark: File expiry, deletion key, file access key, and random filename options - -## Ingredients - -!!! summary "Ingredients" - Already deployed: - - * [X] [Docker swarm cluster](/ha-docker-swarm/design/) with [persistent shared storage](/ha-docker-swarm/shared-storage-ceph.md) - * [X] [Traefik](/ha-docker-swarm/traefik) configured per design - * [X] DNS entry for the hostname you intend to use (*or a wildcard*), pointed to your [keepalived](/ha-docker-swarm/keepalived/) IP - +--8<-- "recipe-standard-ingredients.md" ## Preparation diff --git a/manuscript/recipes/mail.md b/manuscript/recipes/mail.md index 01fde5a..3b4d779 100644 --- a/manuscript/recipes/mail.md +++ b/manuscript/recipes/mail.md @@ -15,9 +15,8 @@ docker-mailserver doesn't include a webmail client, and one is not strictly need ## Ingredients 1. [Docker swarm cluster](/ha-docker-swarm/design/) with [persistent shared storage](/ha-docker-swarm/shared-storage-ceph.md) -2. [Traefik](/ha-docker-swarm/traefik) configured per design -3. LetsEncrypt authorized email address for domain -4. Access to manage DNS records for domains +2. LetsEncrypt authorized email address for domain +3. Access to manage DNS records for domains ## Preparation @@ -153,8 +152,7 @@ networks: - subnet: 172.16.2.0/24 ``` -!!! note - Setup unique static subnets for every stack you deploy. This avoids IP/gateway conflicts which can otherwise occur when you're creating/removing stacks a lot. +--8<-- "reference-networks.md" A sample docker-mailserver.env file looks like this: diff --git a/manuscript/recipes/mattermost.md b/manuscript/recipes/mattermost.md index c87623a..2449dc3 100644 --- a/manuscript/recipes/mattermost.md +++ b/manuscript/recipes/mattermost.md @@ -6,11 +6,7 @@ Intro Details -## Ingredients - -1. [Docker swarm cluster](/ha-docker-swarm/design/) with [persistent shared storage](/ha-docker-swarm/shared-storage-ceph.md) -2. [Traefik](/ha-docker-swarm/traefik) configured per design -3. DNS entry for the hostname you intend to use, pointed to your [keepalived](/ha-docker-swarm/keepalived/) IP +--8<-- "recipe-standard-ingredients.md" ## Preparation @@ -101,10 +97,7 @@ networks: - subnet: 172.16.40.0/24 ``` -!!! note - Setup unique static subnets for every stack you deploy. This avoids IP/gateway conflicts which can otherwise occur when you're creating/removing stacks a lot. See [my list](/reference/networks/) here. - - +--8<-- "reference-networks.md" ## Serving diff --git a/manuscript/recipes/miniflux.md b/manuscript/recipes/miniflux.md index 14b773d..efc8e9c 100644 --- a/manuscript/recipes/miniflux.md +++ b/manuscript/recipes/miniflux.md @@ -16,11 +16,7 @@ I've [reviewed Miniflux in detail on my blog](https://www.funkypenguin.co.nz/rev !!! abstract "2.0+ is a bit different" [Some things changed](https://docs.miniflux.net/en/latest/migration.html) when Miniflux 2.0 was released. For one thing, the only supported database is now postgresql (_no more SQLite_). External themes are gone, as is PHP (_in favor of golang_). It's been a controversial change, but I'm keen on minimal and single-purpose, so I'm still very happy with the direction of development. The developer has laid out his [opinions](https://docs.miniflux.net/en/latest/opinionated.html) re the decisions he's made in the course of development. -## Ingredients - -1. [Docker swarm cluster](/ha-docker-swarm/design/) with [persistent shared storage](/ha-docker-swarm/shared-storage-ceph.md) -2. [Traefik](/ha-docker-swarm/traefik) configured per design -3. DNS entry pointing your Miniflux url (i.e. _miniflux.example.com_) to your [keepalived](/ha-docker-swarm/keepalived/) IP +--8<-- "recipe-standard-ingredients.md" ## Preparation diff --git a/manuscript/recipes/minio.md b/manuscript/recipes/minio.md index 114a212..b62211a 100644 --- a/manuscript/recipes/minio.md +++ b/manuscript/recipes/minio.md @@ -15,11 +15,7 @@ Possible use-cases: 2. Simulating S3 in a dev environment 3. Mirroring an S3 bucket locally -## Ingredients - -1. [Docker swarm cluster](/ha-docker-swarm/design/) with [persistent shared storage](/ha-docker-swarm/shared-storage-ceph.md) -2. [Traefik](/ha-docker-swarm/traefik) configured per design -3. DNS entry for the hostname you intend to use, pointed to your [keepalived](/ha-docker-swarm/keepalived/) IP +--8<-- "recipe-standard-ingredients.md" ## Preparation diff --git a/manuscript/recipes/munin.md b/manuscript/recipes/munin.md index 768fd52..4d63d30 100644 --- a/manuscript/recipes/munin.md +++ b/manuscript/recipes/munin.md @@ -8,11 +8,7 @@ Using Munin you can easily monitor the performance of your computers, networks, Munin uses the excellent ​RRDTool (written by Tobi Oetiker) and the framework is written in Perl, while plugins may be written in any language. Munin has a master/node architecture in which the master connects to all the nodes at regular intervals and asks them for data. It then stores the data in RRD files, and (if needed) updates the graphs. One of the main goals has been ease of creating new plugins (graphs). -## Ingredients - -1. [Docker swarm cluster](/ha-docker-swarm/design/) with [persistent shared storage](/ha-docker-swarm/shared-storage-ceph.md) -2. [Traefik](/ha-docker-swarm/traefik) configured per design -3. DNS entry for the hostname you intend to use, pointed to your [keepalived](/ha-docker-swarm/keepalived/) IP +--8<-- "recipe-standard-ingredients.md" ## Preparation @@ -119,8 +115,7 @@ networks: - subnet: 172.16.24.0/24 ``` -!!! note -Setup unique static subnets for every stack you deploy. This avoids IP/gateway conflicts which can otherwise occur when you're creating/removing stacks a lot. See [my list](/reference/networks/) here. +--8<-- "reference-networks.md" ## Serving diff --git a/manuscript/recipes/nextcloud.md b/manuscript/recipes/nextcloud.md index 7747ab6..ea1ae8c 100644 --- a/manuscript/recipes/nextcloud.md +++ b/manuscript/recipes/nextcloud.md @@ -9,11 +9,7 @@ hero: Backup all your stuff. Share it. Privately. This recipe is based on the official NextCloud docker image, but includes seprate containers ofor the database (_MariaDB_), Redis (_for transactional locking_), Apache Solr (_for full-text searching_), automated database backup, (_you *do* backup the stuff you care about, right?_) and a separate cron container for running NextCloud's 15-min crons. -## Ingredients - -1. [Docker swarm cluster](/ha-docker-swarm/design/) with [persistent shared storage](/ha-docker-swarm/shared-storage-ceph.md) -2. [Traefik](/ha-docker-swarm/traefik) configured per design -3. DNS entry pointing your NextCloud url (_nextcloud.example.com_) to your [keepalived](/ha-docker-swarm/keepalived/) IP +--8<-- "recipe-standard-ingredients.md" ## Preparation @@ -151,10 +147,7 @@ networks: - subnet: 172.16.12.0/24 ``` -!!! note - Setup unique static subnets for every stack you deploy. This avoids IP/gateway conflicts which can otherwise occur when you're creating/removing stacks a lot. See [my list](/reference/networks/) here. - - +--8<-- "reference-networks.md" ## Serving diff --git a/manuscript/recipes/openldap.md b/manuscript/recipes/openldap.md index ec71565..f086f23 100644 --- a/manuscript/recipes/openldap.md +++ b/manuscript/recipes/openldap.md @@ -18,11 +18,7 @@ This recipe combines the raw power of OpenLDAP with the flexibility and features What you'll end up with is a directory structure which will allow integration with popular tools (_[NextCloud](/recipes/nextcloud/), [Kanboard](/recipes/kanboard/), [Gitlab](/recipes/gitlab/), etc_), as well as with KeyCloak (_an upcoming recipe_), for **true** SSO. -## Ingredients - -1. [Docker swarm cluster](/ha-docker-swarm/design/) with [persistent shared storage](/ha-docker-swarm/shared-storage-ceph.md) -2. [Traefik](/ha-docker-swarm/traefik) configured per design -3. DNS entry for the hostname (_i.e. "lam.your-domain.com"_) you intend to use for LDAP Account Manager, pointed to your [keepalived](/ha-docker-swarm/keepalived/) IP +--8<-- "recipe-standard-ingredients.md" ## Preparation diff --git a/manuscript/recipes/owntracks.md b/manuscript/recipes/owntracks.md index 413c38b..39f51e3 100644 --- a/manuscript/recipes/owntracks.md +++ b/manuscript/recipes/owntracks.md @@ -9,11 +9,7 @@ Using a smartphone app, OwnTracks allows you to collect and analyse your own loc * Sharing family locations without relying on Apple Find-My-friends * Performing automated actions in [HomeAssistant](/recipes/homeassistant/) when you arrive/leave home -## Ingredients - -1. [Docker swarm cluster](/ha-docker-swarm/design/) with [persistent shared storage](/ha-docker-swarm/shared-storage-ceph.md) -2. [Traefik](/ha-docker-swarm/traefik) configured per design -3. DNS entry for the hostname you intend to use, pointed to your [keepalived](/ha-docker-swarm/keepalived/) IP +--8<-- "recipe-standard-ingredients.md" ## Preparation @@ -93,10 +89,7 @@ networks: - subnet: 172.16.15.0/24 ``` -!!! note - Setup unique static subnets for every stack you deploy. This avoids IP/gateway conflicts which can otherwise occur when you're creating/removing stacks a lot. See [my list](/reference/networks/) here. - - +--8<-- "reference-networks.md" ## Serving diff --git a/manuscript/recipes/photoprism.md b/manuscript/recipes/photoprism.md index e25059b..0ce6501 100644 --- a/manuscript/recipes/photoprism.md +++ b/manuscript/recipes/photoprism.md @@ -7,11 +7,7 @@ hero: Your own private google photos ![Photoprism Screenshot](../images/photoprism.png) -## Ingredients - -1. [Docker swarm cluster](/ha-docker-swarm/design/) with [persistent shared storage](/ha-docker-swarm/shared-storage-ceph.md) -2. [Traefik](/ha-docker-swarm/traefik) configured per design -3. DNS entry for the hostname you intend to use, pointed to your [keepalived](/ha-docker-swarm/keepalived/) IP +--8<-- "recipe-standard-ingredients.md" ## Preparation @@ -159,10 +155,7 @@ networks: - subnet: 172.16.90.0/24 ``` -!!! note - Setup unique static subnets for every stack you deploy. This avoids IP/gateway conflicts which can otherwise occur when you're creating/removing stacks a lot. See [my list](/reference/networks/) here. - - +--8<-- "reference-networks.md" ## Serving diff --git a/manuscript/recipes/phpipam.md b/manuscript/recipes/phpipam.md index f974de3..2475808 100644 --- a/manuscript/recipes/phpipam.md +++ b/manuscript/recipes/phpipam.md @@ -16,11 +16,7 @@ And that [HomeAssistant](/recipes/homeassistant/) config, which you so carefully Enter phpIPAM. A tool designed to help home keeps as well as large organisations keep track of their IP (_and VLAN, VRF, and AS number_) allocations. -## Ingredients - -1. [Docker swarm cluster](/ha-docker-swarm/design/) with [persistent shared storage](/ha-docker-swarm/shared-storage-ceph.md) -2. [Traefik](/ha-docker-swarm/traefik) configured per design -3. DNS entry for the hostname (_i.e. "phpipam.your-domain.com"_) you intend to use for phpIPAM, pointed to your [keepalived](/ha-docker-swarm/keepalived/) IPIP +--8<-- "recipe-standard-ingredients.md" ## Preparation @@ -190,8 +186,7 @@ networks: - subnet: 172.16.47.0/24 ``` -!!! note -Setup unique static subnets for every stack you deploy. This avoids IP/gateway conflicts which can otherwise occur when you're creating/removing stacks a lot. See [my list](/reference/networks/) here. +--8<-- "reference-networks.md" ## Serving diff --git a/manuscript/recipes/plex.md b/manuscript/recipes/plex.md index 1344d46..eff112b 100644 --- a/manuscript/recipes/plex.md +++ b/manuscript/recipes/plex.md @@ -6,11 +6,7 @@ hero: A recipe to manage your Media 🎥 📺 🎵 ![Plex Screenshot](../images/plex.jpg) -## Ingredients - -1. [Docker swarm cluster](/ha-docker-swarm/design/) with [persistent shared storage](/ha-docker-swarm/shared-storage-ceph.md) -2. [Traefik](/ha-docker-swarm/traefik) configured per design -3. A DNS entry for the hostname you intend to use, pointed to your [keepalived](/ha-docker-swarm/keepalived/) IP +--8<-- "recipe-standard-ingredients.md" ## Preparation @@ -79,10 +75,7 @@ networks: - subnet: 172.16.16.0/24 ``` -!!! note - Setup unique static subnets for every stack you deploy. This avoids IP/gateway conflicts which can otherwise occur when you're creating/removing stacks a lot. See [my list](/reference/networks/) here. - - +--8<-- "reference-networks.md" ## Serving diff --git a/manuscript/recipes/privatebin.md b/manuscript/recipes/privatebin.md index 63ab847..8078f32 100644 --- a/manuscript/recipes/privatebin.md +++ b/manuscript/recipes/privatebin.md @@ -4,11 +4,7 @@ PrivateBin is a minimalist, open source online pastebin where the server (can) h ![PrivateBin Screenshot](../images/privatebin.png) -## Ingredients - -1. [Docker swarm cluster](/ha-docker-swarm/design/) with [persistent shared storage](/ha-docker-swarm/shared-storage-ceph.md) -2. [Traefik](/ha-docker-swarm/traefik) configured per design -3. DNS entry for the hostname you intend to use, pointed to your [keepalived](/ha-docker-swarm/keepalived/) IP +--8<-- "recipe-standard-ingredients.md" ## Preparation diff --git a/manuscript/recipes/realms.md b/manuscript/recipes/realms.md index 0883719..eb87f8d 100644 --- a/manuscript/recipes/realms.md +++ b/manuscript/recipes/realms.md @@ -20,11 +20,7 @@ Features include: Also of note is that the docker image is 1.17GB in size, and the handful of commits to the [source GitHub repo](https://github.com/scragg0x/realms-wiki/commits/master) in the past year has listed TravisCI build failures. This has many of the hallmarks of an abandoned project, to my mind. -## Ingredients - -1. [Docker swarm cluster](/ha-docker-swarm/design/) with [persistent shared storage](/ha-docker-swarm/shared-storage-ceph.md) -2. [Traefik](/ha-docker-swarm/traefik) configured per design -3. DNS entry for the hostname you intend to use, pointed to your [keepalived](/ha-docker-swarm/keepalived/) IP +--8<-- "recipe-standard-ingredients.md" ## Preparation @@ -93,10 +89,7 @@ networks: - subnet: 172.16.35.0/24 ``` -!!! note - Setup unique static subnets for every stack you deploy. This avoids IP/gateway conflicts which can otherwise occur when you're creating/removing stacks a lot. See [my list](/reference/networks/) here. - - +--8<-- "reference-networks.md" ## Serving diff --git a/manuscript/recipes/restic.md b/manuscript/recipes/restic.md index 2864f7c..9610ab7 100644 --- a/manuscript/recipes/restic.md +++ b/manuscript/recipes/restic.md @@ -10,11 +10,7 @@ Restic is one of the more popular open-source backup solutions, and is often [co ## Details -## Ingredients - -!!! summary "Ingredients" - * [X] [Docker swarm cluster](/ha-docker-swarm/design/) with [persistent shared storage](/ha-docker-swarm/shared-storage-ceph.md) - * [X] [Traefik](/ha-docker-swarm/traefik) and [Traefik-Forward-Auth](/ha-docker-swarm/traefik-forward-auth) configured per design +--8<-- "recipe-standard-ingredients.md" * [X] Credentials for one of Restic's [supported repositories](https://restic.readthedocs.io/en/stable/030_preparing_a_new_repo.html) ## Preparation @@ -136,10 +132,7 @@ networks: - subnet: 172.16.56.0/24 ``` -!!! note - Setup unique static subnets for every stack you deploy. This avoids IP/gateway conflicts which can otherwise occur when you're creating/removing stacks a lot. See [my list](/reference/networks/) here. - - +--8<-- "reference-networks.md" ## Serving diff --git a/manuscript/recipes/swarmprom.md b/manuscript/recipes/swarmprom.md index 2a5a65b..7d86267 100644 --- a/manuscript/recipes/swarmprom.md +++ b/manuscript/recipes/swarmprom.md @@ -19,11 +19,7 @@ cAdvisor (Container Advisor) provides container users an understanding of the re I'd encourage you to spend some time reading https://github.com/stefanprodan/swarmprom. Stefan has included detailed explanations about which elements perform which functions, as well as how to customize your stack. (_This is only a starting point, after all_) -## Ingredients - -1. [Docker swarm cluster](/ha-docker-swarm/design/) on **17.09.0 or newer** (_doesn't work with CentOS Atomic, unfortunately_) with [persistent shared storage](/ha-docker-swarm/shared-storage-ceph.md) -2. [Traefik](/ha-docker-swarm/traefik) configured per design -3. DNS entry for the hostnames you intend to use, pointed to your [keepalived](/ha-docker-swarm/keepalived/) IP +--8<-- "recipe-standard-ingredients.md" ## Preparation diff --git a/manuscript/recipes/template.md b/manuscript/recipes/template.md index c0e5bab..4b1703f 100644 --- a/manuscript/recipes/template.md +++ b/manuscript/recipes/template.md @@ -14,16 +14,7 @@ Want to privately share some log output with a password, or a self-destructing c - :white_check_mark: Torrent download of files using web seeding - :white_check_mark: File expiry, deletion key, file access key, and random filename options - -## Ingredients - -!!! summary "Ingredients" - Already deployed: - - * [X] [Docker swarm cluster](/ha-docker-swarm/design/) with [persistent shared storage](/ha-docker-swarm/shared-storage-ceph.md) - * [X] [Traefik](/ha-docker-swarm/traefik) configured per design - * [X] DNS entry for the hostname you intend to use (*or a wildcard*), pointed to your [keepalived](/ha-docker-swarm/keepalived/) IP - +--8<-- "recipe-standard-ingredients.md" ## Preparation diff --git a/manuscript/recipes/tiny-tiny-rss.md b/manuscript/recipes/tiny-tiny-rss.md index e9a797b..f226d7c 100644 --- a/manuscript/recipes/tiny-tiny-rss.md +++ b/manuscript/recipes/tiny-tiny-rss.md @@ -8,10 +8,7 @@ ![Tiny Tiny RSS Screenshot](../images/tiny-tiny-rss.png) -## Ingredients - -1. [Docker swarm cluster](/ha-docker-swarm/design/) with [persistent shared storage](/ha-docker-swarm/shared-storage-ceph.md) -2. [Traefik](/ha-docker-swarm/traefik) configured per design +--8<-- "recipe-standard-ingredients.md" ## Preparation @@ -114,9 +111,7 @@ networks: - subnet: 172.16.5.0/24 ``` -!!! note - Setup unique static subnets for every stack you deploy. This avoids IP/gateway conflicts which can otherwise occur when you're creating/removing stacks a lot. See [my list](/reference/networks/) here. - +--8<-- "reference-networks.md" ## Serving diff --git a/manuscript/recipes/wallabag.md b/manuscript/recipes/wallabag.md index a0cd1bc..c55f177 100644 --- a/manuscript/recipes/wallabag.md +++ b/manuscript/recipes/wallabag.md @@ -12,11 +12,7 @@ There are plugins for [Chrome](https://chrome.google.com/webstore/detail/wallaba [Here's a video](https://player.vimeo.com/video/167435064) which shows off the UI a bit more. -## Ingredients - -1. [Docker swarm cluster](/ha-docker-swarm/design/) with [persistent shared storage](/ha-docker-swarm/shared-storage-ceph.md) -2. [Traefik](/ha-docker-swarm/traefik) configured per design -3. DNS entry for the hostname you intend to use, pointed to your [keepalived](/ha-docker-swarm/keepalived/) IP +--8<-- "recipe-standard-ingredients.md" ## Preparation @@ -172,10 +168,7 @@ networks: - subnet: 172.16.21.0/24 ``` -!!! note - Setup unique static subnets for every stack you deploy. This avoids IP/gateway conflicts which can otherwise occur when you're creating/removing stacks a lot. See [my list](/reference/networks/) here. - - +--8<-- "reference-networks.md" ## Serving diff --git a/manuscript/recipes/wekan.md b/manuscript/recipes/wekan.md index b90d3f0..e855062 100644 --- a/manuscript/recipes/wekan.md +++ b/manuscript/recipes/wekan.md @@ -11,10 +11,7 @@ There's a [video](https://www.youtube.com/watch?v=N3iMLwCNOro) of the developer !!! note For added privacy, this design secures wekan behind an [oauth2 proxy](/reference/oauth_proxy/), so that in order to gain access to the wekan UI at all, oauth2 authentication (_to GitHub, GitLab, Google, etc_) must have already occurred. -## Ingredients - -1. [Docker swarm cluster](/ha-docker-swarm/design/) with [persistent shared storage](/ha-docker-swarm/shared-storage-ceph.md) -2. [Traefik](/ha-docker-swarm/traefik) configured per design +--8<-- "recipe-standard-ingredients.md" ## Preparation @@ -126,10 +123,7 @@ networks: - subnet: 172.16.3.0/24 ``` -!!! note - Setup unique static subnets for every stack you deploy. This avoids IP/gateway conflicts which can otherwise occur when you're creating/removing stacks a lot. See [my list](/reference/networks/) here. - - +--8<-- "reference-networks.md" ## Serving diff --git a/manuscript/recipes/wetty.md b/manuscript/recipes/wetty.md index 2b76e85..5bb64f6 100644 --- a/manuscript/recipes/wetty.md +++ b/manuscript/recipes/wetty.md @@ -16,11 +16,7 @@ Here are some other possible use cases: 2. Access to long-running processes inside a tmux session (_like [irrsi](https://irssi.org/)_) 3. Remote access to a VM / [container running Kali linux](https://github.com/offensive-security/kali-linux-docker), for penetration testing -## Ingredients - -1. [Docker swarm cluster](/ha-docker-swarm/design/) with [persistent shared storage](/ha-docker-swarm/shared-storage-ceph.md) -2. [Traefik](/ha-docker-swarm/traefik) configured per design -3. DNS entry for the hostname you intend to use, pointed to your [keepalived](/ha-docker-swarm/keepalived/) IP +--8<-- "recipe-standard-ingredients.md" ## Preparation @@ -83,10 +79,7 @@ networks: - subnet: 172.16.45.0/24 ``` -!!! note - Setup unique static subnets for every stack you deploy. This avoids IP/gateway conflicts which can otherwise occur when you're creating/removing stacks a lot. See [my list](/reference/networks/) here. - - +--8<-- "reference-networks.md" ## Serving