From e0196723cb06d75ea5de05c2300c901c4384e95e Mon Sep 17 00:00:00 2001 From: David Young Date: Wed, 6 Jan 2021 22:19:43 +1300 Subject: [PATCH] Use mkdocs snippets to template common content blocks (#135) --- .../on-push-master-notify-discord.yml | 8 +- _snippets/{recipe-cta.md => premix-cta.md} | 0 _snippets/recipe-footer.md | 32 +++++ manuscript/ha-docker-swarm/design.md | 5 +- .../ha-docker-swarm/docker-swarm-mode.md | 7 +- manuscript/ha-docker-swarm/index.md | 0 manuscript/ha-docker-swarm/keepalived.md | 7 +- manuscript/ha-docker-swarm/maintenance.md | 83 ------------ manuscript/ha-docker-swarm/nodes.md | 2 +- manuscript/ha-docker-swarm/registry.md | 2 +- .../ha-docker-swarm/shared-storage-ceph.md | 12 +- .../ha-docker-swarm/shared-storage-gluster.md | 9 +- .../ha-docker-swarm/traefik-forward-auth.md | 13 +- .../traefik-forward-auth/keycloak.md | 7 +- manuscript/ha-docker-swarm/traefik.md | 11 +- manuscript/kubernetes/cluster.md | 4 +- manuscript/kubernetes/design.md | 2 + manuscript/kubernetes/diycluster.md | 4 +- manuscript/kubernetes/helm.md | 5 +- manuscript/kubernetes/loadbalancer.md | 4 +- manuscript/kubernetes/snapshots.md | 7 +- manuscript/kubernetes/start.md | 2 + manuscript/kubernetes/traefik.md | 5 +- manuscript/recipes/autopirate/end.md | 4 +- manuscript/recipes/autopirate/headphones.md | 10 +- manuscript/recipes/autopirate/heimdall.md | 12 +- manuscript/recipes/autopirate/jackett.md | 7 +- .../recipes/autopirate/lazylibrarian.md | 10 +- manuscript/recipes/autopirate/lidarr.md | 10 +- manuscript/recipes/autopirate/mylar.md | 12 +- manuscript/recipes/autopirate/nzbget.md | 8 +- manuscript/recipes/autopirate/nzbhydra.md | 8 +- manuscript/recipes/autopirate/nzbhydra2.md | 9 +- manuscript/recipes/autopirate/ombi.md | 8 +- manuscript/recipes/autopirate/radarr.md | 8 +- manuscript/recipes/autopirate/rtorrent.md | 9 +- manuscript/recipes/autopirate/sabnzbd.md | 8 +- manuscript/recipes/autopirate/sonarr.md | 8 +- manuscript/recipes/bitwarden.md | 12 +- manuscript/recipes/bookstack.md | 8 +- manuscript/recipes/calibre-web.md | 10 +- manuscript/recipes/collabora-online.md | 18 +-- manuscript/recipes/cryptonote-mining-pool.md | 16 --- manuscript/recipes/duplicati.md | 12 +- manuscript/recipes/duplicity.md | 9 +- manuscript/recipes/elkarbackup.md | 20 +-- manuscript/recipes/emby.md | 12 +- manuscript/recipes/flightairmap.md | 60 --------- .../recipes/general/ipad-pro-geeking.md | 1 - manuscript/recipes/general/kid-safe-wifi.md | 1 - manuscript/recipes/general/start.md | 0 manuscript/recipes/ghost.md | 13 +- manuscript/recipes/gitlab-runner.md | 10 +- manuscript/recipes/gitlab.md | 10 +- manuscript/recipes/gollum.md | 8 +- manuscript/recipes/homeassistant.md | 8 +- manuscript/recipes/homeassistant/ibeacon.md | 2 +- manuscript/recipes/huginn.md | 8 +- manuscript/recipes/instapy.md | 8 +- manuscript/recipes/ipfs-cluster.md | 8 +- manuscript/recipes/jellyfin.md | 12 +- manuscript/recipes/kanboard.md | 10 +- manuscript/recipes/keycloak.md | 15 +-- .../keycloak/authenticate-against-openldap.md | 2 +- manuscript/recipes/keycloak/create-user.md | 4 +- .../recipes/keycloak/setup-oidc-provider.md | 2 +- manuscript/recipes/komga.md | 6 +- manuscript/recipes/kubernetes/kanboard.md | 7 +- .../kubernetes/kubernetes-dashboard.md | 4 +- manuscript/recipes/kubernetes/miniflux.md | 7 +- manuscript/recipes/kubernetes/nextcloud.md | 127 ------------------ manuscript/recipes/kubernetes/phpipam.md | 8 +- manuscript/recipes/kubernetes/privatebin.md | 8 +- manuscript/recipes/kubernetes/template-k8s.md | 7 +- manuscript/recipes/mail.md | 9 +- manuscript/recipes/mattermost.md | 10 +- manuscript/recipes/miniflux.md | 7 +- manuscript/recipes/minio.md | 13 +- manuscript/recipes/mqtt.md | 5 +- manuscript/recipes/munin.md | 7 +- manuscript/recipes/nextcloud.md | 20 +-- manuscript/recipes/openldap.md | 19 +-- manuscript/recipes/owntracks.md | 12 +- manuscript/recipes/photoprism.md | 8 +- manuscript/recipes/phpipam.md | 7 +- manuscript/recipes/piwik.md | 93 ------------- manuscript/recipes/plex.md | 10 +- manuscript/recipes/portainer.md | 8 +- manuscript/recipes/privatebin.md | 10 +- manuscript/recipes/realms.md | 10 +- manuscript/recipes/restic.md | 11 +- manuscript/recipes/swarmprom.md | 8 +- manuscript/recipes/template.md | 8 +- manuscript/recipes/tiny-tiny-rss.md | 14 +- manuscript/recipes/wallabag.md | 11 +- manuscript/recipes/wekan.md | 7 +- manuscript/recipes/wetty.md | 10 +- manuscript/recipes/workflow.md | 8 -- mkdocs-material/partials/disqus.html | 12 -- mkdocs.yml | 2 +- overrides/main.html | 15 --- scripts/build.py | 39 +++--- scripts/recipe-footer.md | 6 +- 103 files changed, 337 insertions(+), 897 deletions(-) rename _snippets/{recipe-cta.md => premix-cta.md} (100%) create mode 100644 _snippets/recipe-footer.md delete mode 100644 manuscript/ha-docker-swarm/index.md delete mode 100644 manuscript/ha-docker-swarm/maintenance.md delete mode 100644 manuscript/recipes/cryptonote-mining-pool.md delete mode 100644 manuscript/recipes/flightairmap.md delete mode 100644 manuscript/recipes/general/ipad-pro-geeking.md delete mode 100644 manuscript/recipes/general/kid-safe-wifi.md delete mode 100644 manuscript/recipes/general/start.md delete mode 100644 manuscript/recipes/kubernetes/nextcloud.md delete mode 100644 manuscript/recipes/piwik.md delete mode 100644 manuscript/recipes/workflow.md delete mode 100644 mkdocs-material/partials/disqus.html diff --git a/.github/workflows/on-push-master-notify-discord.yml b/.github/workflows/on-push-master-notify-discord.yml index 8892615..a2bb6b7 100644 --- a/.github/workflows/on-push-master-notify-discord.yml +++ b/.github/workflows/on-push-master-notify-discord.yml @@ -24,6 +24,8 @@ jobs: The [Geek's Cookbook](https://geek-cookbook.funkypenguin.co.nz) has been updated! - Here's what's fresh: - :cupcake: [${{github.event.commits[0].message}}]({{ EVENT_PAYLOAD.compare }}) - + Here's what @{{ GITHUB_ACTOR }} just cooked: + + :partying_face: [${{github.event.commits[0].message}}]({{ EVENT_PAYLOAD.compare }}) + --- + \ No newline at end of file diff --git a/_snippets/recipe-cta.md b/_snippets/premix-cta.md similarity index 100% rename from _snippets/recipe-cta.md rename to _snippets/premix-cta.md diff --git a/_snippets/recipe-footer.md b/_snippets/recipe-footer.md new file mode 100644 index 0000000..f4bddac --- /dev/null +++ b/_snippets/recipe-footer.md @@ -0,0 +1,32 @@ +## Chef's notes 📓 + +///Footnotes Go Here/// + +### Tip your waiter (sponsor) 👏 + +Did you receive excellent service? Want to make your waiter happy? (_..and support development of current and future recipes!_) Sponsor me on [Github][github_sponsor] / [Patreon][patreon], or see the [contribute](/community/support/) page for more (_free or paid)_ ways to say thank you! 👏 + +### Flirt with waiter (subscribe) 💌 + +Want to know now when this recipe gets updated, or when future recipes are added? Subscribe to the [RSS feed](https://mastodon.social/@geekcookbook_changes.atom), or leave your email address below, and we'll keep you updated. (*double-opt-in, no monkey business, no spam) + +

Notify me 🔔

Be the first to know when recipes are added / improved!

    We won't send you spam. Unsubscribe at any time. No monkey-business.

    Powered By ConvertKit
    + +## Your comments? 💬 + +
    + + + + +[patreon]: https://www.patreon.com/bePatron?u=6982506 +[github_sponsor]: https://github.com/sponsors/funkypenguin \ No newline at end of file diff --git a/manuscript/ha-docker-swarm/design.md b/manuscript/ha-docker-swarm/design.md index b11e967..a2aea1f 100644 --- a/manuscript/ha-docker-swarm/design.md +++ b/manuscript/ha-docker-swarm/design.md @@ -87,9 +87,8 @@ A day after writing this, my environment suffered a fault whereby all 3 VMs were Upon restore, docker failed to start on one of the VMs due to local disk space issue[^1]. However, the other two VMs started, established the swarm, mounted their shared storage, and started up all the containers (services) which were managed by the swarm. -In summary, although I suffered an **unplanned power outage to all of my infrastructure**, followed by a **failure of a third of my hosts**... ==all my platforms are 100% available with **absolutely no manual intervention**==. +In summary, although I suffered an **unplanned power outage to all of my infrastructure**, followed by a **failure of a third of my hosts**... ==all my platforms are 100% available[^1] with **absolutely no manual intervention**==. [^1]: Since there's no impact to availability, I can fix (or just reinstall) the failed node whenever convenient. - -## Chef's Notes 📓 \ No newline at end of file +--8<-- "recipe-footer.md" \ No newline at end of file diff --git a/manuscript/ha-docker-swarm/docker-swarm-mode.md b/manuscript/ha-docker-swarm/docker-swarm-mode.md index cfc962c..56513fc 100644 --- a/manuscript/ha-docker-swarm/docker-swarm-mode.md +++ b/manuscript/ha-docker-swarm/docker-swarm-mode.md @@ -167,6 +167,8 @@ Launch shepherd by running ```docker stack deploy shepherd -c /var/data/config/s ## Summary +--8<-- "5-min-install.md" + What have we achieved? !!! summary "Summary" @@ -174,7 +176,4 @@ What have we achieved? * [X] [Docker swarm cluster](/ha-docker-swarm/design/) - ---8<-- "5-min-install.md" - -## Chef's Notes 📓 \ No newline at end of file +--8<-- "recipe-footer.md" \ No newline at end of file diff --git a/manuscript/ha-docker-swarm/index.md b/manuscript/ha-docker-swarm/index.md deleted file mode 100644 index e69de29..0000000 diff --git a/manuscript/ha-docker-swarm/keepalived.md b/manuscript/ha-docker-swarm/keepalived.md index 08ecd42..1046e8d 100644 --- a/manuscript/ha-docker-swarm/keepalived.md +++ b/manuscript/ha-docker-swarm/keepalived.md @@ -81,8 +81,7 @@ What have we achieved? --8<-- "5-min-install.md" - -## Chef's notes 📓 - [^1]: Some hosting platforms (*OpenStack, for one*) won't allow you to simply "claim" a virtual IP. Each node is only able to receive traffic targetted to its unique IP, unless certain security controls are disabled by the cloud administrator. In this case, keepalived is not the right solution, and a platform-specific load-balancing solution should be used. In OpenStack, this is Neutron's "Load Balancer As A Service" (LBAAS) component. AWS, GCP and Azure would likely include similar protections. -[^2]: More than 2 nodes can participate in keepalived. Simply ensure that each node has the appropriate priority set, and the node with the highest priority will become the master. \ No newline at end of file +[^2]: More than 2 nodes can participate in keepalived. Simply ensure that each node has the appropriate priority set, and the node with the highest priority will become the master. + +--8<-- "recipe-footer.md" \ No newline at end of file diff --git a/manuscript/ha-docker-swarm/maintenance.md b/manuscript/ha-docker-swarm/maintenance.md deleted file mode 100644 index 89d98ee..0000000 --- a/manuscript/ha-docker-swarm/maintenance.md +++ /dev/null @@ -1,83 +0,0 @@ -# Introduction - -## Adding a host - -## Adding storage - -gluster volume add-brick VOLNAME NEW_BRICK - -example - -# gluster volume add-brick test-volume server4:/exp4 -Add Brick successful - -# Replacing failed host - -Followed https://access.redhat.com/documentation/en-US/Red_Hat_Storage/3/html/Administration_Guide/sect-Replacing_Hosts.html - - -[root@glusterfs-server /]# gluster peer status -Number of Peers: 1 - -Hostname: ds1 -Uuid: db9c80da-11e4-461d-8ea5-66dd12ca897c -State: Peer in Cluster (Disconnected) -[root@glusterfs-server /]# - -Grab UUID above - -edit /var/lib/glusterd/glusterd.info -change: -UUID=aee45c2c-aa19-4d29-bc94-4833f2b22863 -to -UUID=db9c80da-11e4-461d-8ea5-66dd12ca897c - -My peer's id (ds2): -[root@glusterfs-server /]# gluster system:: uuid get -UUID: 38ca4e8b-8ef5-4165-9f41-5c8b3f0103cc -[root@glusterfs-server /]# - -vi /var/lib/glusterd/peers/38ca4e8b-8ef5-4165-9f41-5c8b3f0103cc - -UUID=38ca4e8b-8ef5-4165-9f41-5c8b3f0103cc -state=3 -hostname=ds3 - - - -Got volume info - - -[root@glusterfs-server /]# gluster volume info - -Volume Name: gv0 -Type: Replicate -Volume ID: 84e1169c-41dc-467a-9ae1-a474efaf789f -Status: Started -Snapshot Count: 0 -Number of Bricks: 1 x 2 = 2 -Transport-type: tcp -Bricks: -Brick1: ds1:/var/no-direct-write-here/brick1/gv0 -Brick2: ds3:/var/no-direct-write-here/brick1/gv0 -Options Reconfigured: -nfs.disable: on -transport.address-family: inet -[root@glusterfs-server /]# - - - ----- -[root@glusterfs-server /]# getfattr -d -m. -ehex /var/no-direct-write-here/brick1/gv0/ -getfattr: Removing leading '/' from absolute path names -# file: var/no-direct-write-here/brick1/gv0/ -security.selinux=0x73797374656d5f753a6f626a6563745f723a756e6c6162656c65645f743a733000 -trusted.gfid=0x00000000000000000000000000000001 -trusted.glusterfs.dht=0x000000010000000000000000ffffffff -trusted.glusterfs.volume-id=0x84e1169c41dc467a9ae1a474efaf789f - -[root@glusterfs-server /]# - - - -setfattr -n trusted.glusterfs.volume-id -v 0x84e1169c41dc467a9ae1a474efaf789f /var/no-direct-write-here/brick1/gv0 diff --git a/manuscript/ha-docker-swarm/nodes.md b/manuscript/ha-docker-swarm/nodes.md index 373045c..3e4608a 100644 --- a/manuscript/ha-docker-swarm/nodes.md +++ b/manuscript/ha-docker-swarm/nodes.md @@ -76,4 +76,4 @@ After completing the above, you should have: * At least 20GB disk space (_but it'll be tight_) * [X] Connectivity to each other within the same subnet, and on a low-latency link (_i.e., no WAN links_) -## Chef's Notes 📓 \ No newline at end of file +--8<-- "recipe-footer.md" \ No newline at end of file diff --git a/manuscript/ha-docker-swarm/registry.md b/manuscript/ha-docker-swarm/registry.md index d57985a..ccfc08c 100644 --- a/manuscript/ha-docker-swarm/registry.md +++ b/manuscript/ha-docker-swarm/registry.md @@ -110,4 +110,4 @@ systemctl restart docker-latest !!! tip "" Note the extra comma required after "false" above -## Chef's notes 📓 +--8<-- "recipe-footer.md" \ No newline at end of file diff --git a/manuscript/ha-docker-swarm/shared-storage-ceph.md b/manuscript/ha-docker-swarm/shared-storage-ceph.md index b3a3b95..a29ba71 100644 --- a/manuscript/ha-docker-swarm/shared-storage-ceph.md +++ b/manuscript/ha-docker-swarm/shared-storage-ceph.md @@ -39,6 +39,8 @@ mkdir -p /etc/ceph The process takes about 30 seconds, after which, you'll have a MVC (*Minimum Viable Cluster*)[^1], encompassing a single monitor and mgr instance on your chosen node. Here's the complete output from a fresh install: +[^1]: Minimum Viable Cluster acronym copyright, trademark, and whatever else, to Funky Penguin for 1,000,000 years. + ??? "Example output from a fresh cephadm bootstrap" ``` root@raphael:~# MYIP=`ip route get 1.1.1.1 | grep -oP 'src \K\S+'` @@ -216,9 +218,7 @@ What have we achieved? * [X] Resiliency in the event of the failure of a single node * [X] Beautiful dashboard -## The easy, 5-minute install - -I share (_with [sponsors][github_sponsor] and [patrons][patreon]_) a private "_premix_" GitHub repository, which includes an ansible playbook for deploying the entire Geek's Cookbook stack, automatically. This means that members can create the entire environment with just a ```git pull``` and an ```ansible-playbook deploy.yml``` 👍 +--8<-- "5-min-install.md" Here's a screencast of the playbook in action. I sped up the boring parts, it actually takes ==5 min== (*you can tell by the timestamps on the prompt*): @@ -226,6 +226,8 @@ Here's a screencast of the playbook in action. I sped up the boring parts, it ac [patreon]: https://www.patreon.com/bePatron?u=6982506 [github_sponsor]: https://github.com/sponsors/funkypenguin -## Chef's Notes 📓 -[^1]: Minimum Viable Cluster acronym copyright, trademark, and whatever else, to Funky Penguin for 1,000,000 years. + + + +--8<-- "recipe-footer.md" \ No newline at end of file diff --git a/manuscript/ha-docker-swarm/shared-storage-gluster.md b/manuscript/ha-docker-swarm/shared-storage-gluster.md index a4c9e32..f72f7b7 100644 --- a/manuscript/ha-docker-swarm/shared-storage-gluster.md +++ b/manuscript/ha-docker-swarm/shared-storage-gluster.md @@ -164,9 +164,8 @@ After completing the above, you should have: * [X] Persistent storage available to every node * [X] Resiliency in the event of the failure of a single (gluster) node -## Chef's Notes 📓 +[^1]: Future enhancements to this recipe include: + 1. Migration of shared storage from GlusterFS to Ceph ()[#2](https://gitlab.funkypenguin.co.nz/funkypenguin/geeks-cookbook/issues/2)) + 2. Correct the fact that volumes don't automount on boot ([#3](https://gitlab.funkypenguin.co.nz/funkypenguin/geeks-cookbook/issues/3)) -Future enhancements to this recipe include: - -1. Migration of shared storage from GlusterFS to Ceph ()[#2](https://gitlab.funkypenguin.co.nz/funkypenguin/geeks-cookbook/issues/2)) -2. Correct the fact that volumes don't automount on boot ([#3](https://gitlab.funkypenguin.co.nz/funkypenguin/geeks-cookbook/issues/3)) \ No newline at end of file +--8<-- "recipe-footer.md" \ No newline at end of file diff --git a/manuscript/ha-docker-swarm/traefik-forward-auth.md b/manuscript/ha-docker-swarm/traefik-forward-auth.md index 88bbe69..dab14c4 100644 --- a/manuscript/ha-docker-swarm/traefik-forward-auth.md +++ b/manuscript/ha-docker-swarm/traefik-forward-auth.md @@ -83,10 +83,7 @@ If you're not confident that forward authentication is working, add a simple "wh - traefik.frontend.auth.forward.trustForwardHeader=true ``` -!!! tip - I share (_with my [sponsors](https://github.com/sponsors/funkypenguin)_) a private "_premix_" git repository, which includes necessary docker-compose and env files for all published recipes. This means that sponsors can launch any recipe with just a ```git pull``` and a ```docker stack deploy``` 👍 - - +--8<-- "premix-cta.md" ## Serving @@ -107,9 +104,7 @@ What have we achieved? By adding an additional three simple labels to any servic * [X] Traefik-forward-auth configured to authenticate against an OIDC provider +[^1]: Traefik forward auth replaces the use of [oauth_proxy containers](/reference/oauth_proxy/) found in some of the existing recipes +[^2]: I reviewed several implementations of forward authenticators for Traefik, but found most to be rather heavy-handed, or specific to a single auth provider. @thomaseddon's go-based docker image is 7MB in size, and can be extended to work with any OIDC provider. - -## Chef's Notes 📓 - -1. Traefik forward auth replaces the use of [oauth_proxy containers](/reference/oauth_proxy/) found in some of the existing recipes -2. I reviewed several implementations of forward authenticators for Traefik, but found most to be rather heavy-handed, or specific to a single auth provider. @thomaseddon's go-based docker image is 7MB in size, and can be extended to work with any OIDC provider. \ No newline at end of file +--8<-- "recipe-footer.md" \ No newline at end of file diff --git a/manuscript/ha-docker-swarm/traefik-forward-auth/keycloak.md b/manuscript/ha-docker-swarm/traefik-forward-auth/keycloak.md index f455ea7..e3d48dc 100644 --- a/manuscript/ha-docker-swarm/traefik-forward-auth/keycloak.md +++ b/manuscript/ha-docker-swarm/traefik-forward-auth/keycloak.md @@ -80,8 +80,7 @@ If you're not confident that forward authentication is working, add a simple "wh - traefik.frontend.auth.forward.trustForwardHeader=true ``` -!!! tip -I share (_with my [sponsors](https://github.com/sponsors/funkypenguin)_) a private "_premix_" git repository, which includes necessary docker-compose and env files for all published recipes. This means that sponsors can launch any recipe with just a `git pull` and a `docker stack deploy` 👍 +--8<-- "premix-cta.md" ## Serving @@ -114,6 +113,6 @@ Created: * [X] Traefik-forward-auth configured to authenticate against KeyCloak -## Chef's Notes 📓 +[^1]: KeyCloak is very powerful. You can add 2FA and all other clever things outside of the scope of this simple recipe ;) -1. KeyCloak is very powerful. You can add 2FA and all other clever things outside of the scope of this simple recipe ;) +--8<-- "recipe-footer.md" \ No newline at end of file diff --git a/manuscript/ha-docker-swarm/traefik.md b/manuscript/ha-docker-swarm/traefik.md index a553faa..9a00c74 100644 --- a/manuscript/ha-docker-swarm/traefik.md +++ b/manuscript/ha-docker-swarm/traefik.md @@ -103,9 +103,7 @@ networks: - subnet: 172.16.200.0/24 ``` -!!! tip - I share (_with my [sponsors](https://github.com/sponsors/funkypenguin)_) a private "_premix_" git repository, which includes necessary docker-compose and env files for all published recipes. This means that sponsors can launch any recipe with just a ```git pull``` and a ```docker stack deploy``` 👍 - +--8<-- "premix-cta.md" Create `/var/data/config/traefik/traefik-app.yml` as follows: @@ -203,7 +201,7 @@ ID NAME IMAGE ### Check Traefik Dashboard -You should now be able to access your traefik instance on http://:8080 - It'll look a little lonely currently (*below*), but we'll populate it as we add recipes :) +You should now be able to access[^1] your traefik instance on http://:8080 - It'll look a little lonely currently (*below*), but we'll populate it as we add recipes :) ![Screenshot of Traefik, post-launch](/images/traefik-post-launch.png) @@ -216,7 +214,6 @@ You should now be able to access your traefik instance on http://:8080 * [X] Frontend proxy which will dynamically configure itself for new backend containers * [X] Automatic SSL support for all proxied resources +[^1]: Did you notice how no authentication was required to view the Traefik dashboard? Eek! We'll tackle that in the next section, regarding [Traefik Forward Authentication](/ha-docker-swarm/traefik-forward-auth/)! -## Chef's Notes 📓 - -1. Did you notice how no authentication was required to view the Traefik dashboard? Eek! We'll tackle that in the next section, regarding [Traefik Forward Authentication](/ha-docker-swarm/traefik-forward-auth/)! +--8<-- "recipe-footer.md" \ No newline at end of file diff --git a/manuscript/kubernetes/cluster.md b/manuscript/kubernetes/cluster.md index 1b1d0c2..7d60ddd 100644 --- a/manuscript/kubernetes/cluster.md +++ b/manuscript/kubernetes/cluster.md @@ -81,6 +81,6 @@ Still with me? Good. Move on to creating your own external load balancer.. * [Traefik](/kubernetes/traefik/) - Traefik Ingress via Helm -## Chef's Notes +[^1]: Ok, yes, there's not much you can do with your cluster _yet_. But stay tuned, more Kubernetes fun to come! -1. Ok, yes, there's not much you can do with your cluster _yet_. But stay tuned, more Kubernetes fun to come! \ No newline at end of file +--8<-- "recipe-footer.md" \ No newline at end of file diff --git a/manuscript/kubernetes/design.md b/manuscript/kubernetes/design.md index f46cb96..539297c 100644 --- a/manuscript/kubernetes/design.md +++ b/manuscript/kubernetes/design.md @@ -128,3 +128,5 @@ Still with me? Good. Move on to creating your cluster! - [Snapshots](/kubernetes/snapshots/) - Automatically backup your persistent data - [Helm](/kubernetes/helm/) - Uber-recipes from fellow geeks - [Traefik](/kubernetes/traefik/) - Traefik Ingress via Helm + +--8<-- "recipe-footer.md" \ No newline at end of file diff --git a/manuscript/kubernetes/diycluster.md b/manuscript/kubernetes/diycluster.md index ad88036..b11a9ae 100644 --- a/manuscript/kubernetes/diycluster.md +++ b/manuscript/kubernetes/diycluster.md @@ -298,7 +298,7 @@ Now that you have wasted half a lifetime on installing your very own cluster, yo * [Helm](/kubernetes/helm/) - Uber-recipes from fellow geeks * [Traefik](/kubernetes/traefik/) - Traefik Ingress via Helm -## About your Chef +## About your guest chef This article, believe it or not, was not diced up by your regular chef (funkypenguin). Instead, today's article was diced up by HexF, a fellow kiwi (hence a lot of kiwi references) who enjoys his sysadmin time. @@ -309,3 +309,5 @@ Feel free to talk to today's chef in the discord, or see one of his many other l + +--8<-- "recipe-footer.md" \ No newline at end of file diff --git a/manuscript/kubernetes/helm.md b/manuscript/kubernetes/helm.md index a4c024a..f3dae8c 100644 --- a/manuscript/kubernetes/helm.md +++ b/manuscript/kubernetes/helm.md @@ -56,7 +56,6 @@ Still with me? Good. Move on to understanding Helm charts... * [Traefik](/kubernetes/traefik/) - Traefik Ingress via Helm +[^1]: Of course, you can have lots of fun deploying all sorts of things via Helm. Check out https://artifacthub.io for some examples. -## Chef's Notes - -1. Of course, you can have lots of fun deploying all sorts of things via Helm. Check out https://github.com/helm/charts for some examples. \ No newline at end of file +--8<-- "recipe-footer.md" \ No newline at end of file diff --git a/manuscript/kubernetes/loadbalancer.md b/manuscript/kubernetes/loadbalancer.md index 6018025..492e142 100644 --- a/manuscript/kubernetes/loadbalancer.md +++ b/manuscript/kubernetes/loadbalancer.md @@ -327,6 +327,6 @@ Still with me? Good. Move on to setting up an ingress SSL terminating proxy with - [Helm](/kubernetes/helm/) - Uber-recipes from fellow geeks - [Traefik](/kubernetes/traefik/) - Traefik Ingress via Helm -## Chef's Notes +[^1]: This is MVP of the load balancer solution. Any suggestions for improvements are welcome 😉 -1. This is MVP of the load balancer solution. Any suggestions for improvements are welcome 😉 +--8<-- "recipe-footer.md" \ No newline at end of file diff --git a/manuscript/kubernetes/snapshots.md b/manuscript/kubernetes/snapshots.md index 4bcf45d..7dce192 100644 --- a/manuscript/kubernetes/snapshots.md +++ b/manuscript/kubernetes/snapshots.md @@ -187,8 +187,7 @@ Still with me? Good. Move on to understanding Helm charts... * [Traefik](/kubernetes/traefik/) - Traefik Ingress via Helm - -## Chef's Notes - -1. I've submitted [2 PRs](https://github.com/miracle2k/k8s-snapshots/pulls/funkypenguin) to the k8s-snapshots repo. The first [updates the README for GKE RBAC requirements](https://github.com/miracle2k/k8s-snapshots/pull/71), and the second [fixes a minor typo](https://github.com/miracle2k/k8s-snapshots/pull/74). +[^1]: I've submitted [2 PRs](https://github.com/miracle2k/k8s-snapshots/pulls/funkypenguin) to the k8s-snapshots repo. The first [updates the README for GKE RBAC requirements](https://github.com/miracle2k/k8s-snapshots/pull/71), and the second [fixes a minor typo](https://github.com/miracle2k/k8s-snapshots/pull/74). ``` + +--8<-- "recipe-footer.md" \ No newline at end of file diff --git a/manuscript/kubernetes/start.md b/manuscript/kubernetes/start.md index 1467657..c97f6cb 100644 --- a/manuscript/kubernetes/start.md +++ b/manuscript/kubernetes/start.md @@ -65,3 +65,5 @@ Still with me? Good. Move on to reviewing the design elements - [Snapshots](/kubernetes/snapshots/) - Automatically backup your persistent data - [Helm](/kubernetes/helm/) - Uber-recipes from fellow geeks - [Traefik](/kubernetes/traefik/) - Traefik Ingress via Helm + +--8<-- "recipe-footer.md" \ No newline at end of file diff --git a/manuscript/kubernetes/traefik.md b/manuscript/kubernetes/traefik.md index 8a7dfd9..24ee73e 100644 --- a/manuscript/kubernetes/traefik.md +++ b/manuscript/kubernetes/traefik.md @@ -208,7 +208,6 @@ Here's a recap: I'll be adding more Kubernetes versions of existing recipes soon. Check out the [MQTT](/recipes/mqtt/) recipe for a start! +[^1]: It's kinda lame to be able to bring up Traefik but not to use it. I'll be adding the oauth_proxy element shortly, which will make this last step a little more conclusive and exciting! -## Chef's Notes - -1. It's kinda lame to be able to bring up Traefik but not to use it. I'll be adding the oauth_proxy element shortly, which will make this last step a little more conclusive and exciting! \ No newline at end of file +--8<-- "recipe-footer.md" \ No newline at end of file diff --git a/manuscript/recipes/autopirate/end.md b/manuscript/recipes/autopirate/end.md index f40b4f8..0adf53b 100644 --- a/manuscript/recipes/autopirate/end.md +++ b/manuscript/recipes/autopirate/end.md @@ -9,6 +9,6 @@ Confirm the container status by running "docker stack ps autopirate", and wait f Log into each of your new tools at its respective HTTPS URL. You'll be prompted to authenticate against your OAuth provider, and upon success, redirected to the tool's UI. -## Chef's Notes 📓 +[^1]: This is a complex stack. Sing out in the comments if you found a flaw or need a hand :) -1. This is a complex stack. Sing out in the comments if you found a flaw or need a hand :) \ No newline at end of file +--8<-- "recipe-footer.md" \ No newline at end of file diff --git a/manuscript/recipes/autopirate/headphones.md b/manuscript/recipes/autopirate/headphones.md index 16ff717..b2a20ca 100644 --- a/manuscript/recipes/autopirate/headphones.md +++ b/manuscript/recipes/autopirate/headphones.md @@ -1,5 +1,3 @@ -hero: AutoPirate - A fully-featured recipe to automate finding, downloading, and organising your media 📺 🎥 🎵 📖 - !!! warning This is not a complete recipe - it's a component of the [autopirate](/recipes/autopirate/) "_uber-recipe_", but has been split into its own page to reduce complexity. @@ -46,8 +44,7 @@ headphones_proxy: -authenticated-emails-file=/authenticated-emails.txt ```` -!!! tip - I share (_with my [sponsors](https://github.com/sponsors/funkypenguin)_) a private "_premix_" git repository, which includes necessary docker-compose and env files for all published recipes. This means that sponsors can launch any recipe with just a ```git pull``` and a ```docker stack deploy``` 👍 +--8<-- "premix-cta.md" ## Assemble more tools.. @@ -69,7 +66,6 @@ Continue through the list of tools below, adding whichever tools your want to us * [Heimdall](/recipes/autopirate/heimdall/) * [End](/recipes/autopirate/end/) (launch the stack) +[^1]: In many cases, tools will integrate with each other. I.e., Radarr needs to talk to SABnzbd and NZBHydra, Ombi needs to talk to Radarr, etc. Since each tool runs within the stack under its own name, just refer to each tool by name (i.e. "radarr"), and docker swarm will resolve the name to the appropriate container. You can identify the tool-specific port by looking at the docker-compose service definition. -## Chef's Notes 📓 - -1. In many cases, tools will integrate with each other. I.e., Radarr needs to talk to SABnzbd and NZBHydra, Ombi needs to talk to Radarr, etc. Since each tool runs within the stack under its own name, just refer to each tool by name (i.e. "radarr"), and docker swarm will resolve the name to the appropriate container. You can identify the tool-specific port by looking at the docker-compose service definition. \ No newline at end of file +--8<-- "recipe-footer.md" \ No newline at end of file diff --git a/manuscript/recipes/autopirate/heimdall.md b/manuscript/recipes/autopirate/heimdall.md index 4d37020..f9e1d60 100644 --- a/manuscript/recipes/autopirate/heimdall.md +++ b/manuscript/recipes/autopirate/heimdall.md @@ -52,8 +52,7 @@ To include Heimdall in your [AutoPirate](/recipes/autopirate/) stack, include th ``` -!!! tip -I share (_with my [sponsors](https://github.com/sponsors/funkypenguin)_) a private "_premix_" git repository, which includes necessary docker-compose and env files for all published recipes. This means that sponsors can launch any recipe with just a `git pull` and a `docker stack deploy` 👍 +--8<-- "premix-cta.md" ## Assemble more tools.. @@ -72,10 +71,11 @@ Continue through the list of tools below, adding whichever tools your want to us - [NZBHydra2](/recipes/autopirate/nzbhydra2/) - [Ombi](/recipes/autopirate/ombi/) - [Jackett](/recipes/autopirate/jackett/) -- Heimdall (this page) +- Heimdall (this page)[^2] - [End](/recipes/autopirate/end/) (launch the stack) -## Chef's Notes 📓 +[^1]: In many cases, tools will integrate with each other. I.e., Radarr needs to talk to SABnzbd and NZBHydra, Ombi needs to talk to Radarr, etc. Since each tool runs within the stack under its own name, just refer to each tool by name (i.e. "radarr"), and docker swarm will resolve the name to the appropriate container. You can identify the tool-specific port by looking at the docker-compose service definition. +[^2:] The inclusion of Heimdall was due to the efforts of @gkoerk in our [Discord server](http://chat.funkypenguin.co.nz). Thanks gkoerk! + +--8<-- "recipe-footer.md" -1. In many cases, tools will integrate with each other. I.e., Radarr needs to talk to SABnzbd and NZBHydra, Ombi needs to talk to Radarr, etc. Since each tool runs within the stack under its own name, just refer to each tool by name (i.e. "radarr"), and docker swarm will resolve the name to the appropriate container. You can identify the tool-specific port by looking at the docker-compose service definition. -2. The inclusion of Heimdall was due to the efforts of @gkoerk in our [Discord server](http://chat.funkypenguin.co.nz). Thanks gkoerk! diff --git a/manuscript/recipes/autopirate/jackett.md b/manuscript/recipes/autopirate/jackett.md index c61dd62..be9d45a 100644 --- a/manuscript/recipes/autopirate/jackett.md +++ b/manuscript/recipes/autopirate/jackett.md @@ -46,8 +46,7 @@ jackett_proxy: ``` -!!! tip -I share (_with my [sponsors](https://github.com/sponsors/funkypenguin)_) a private "_premix_" git repository, which includes necessary docker-compose and env files for all published recipes. This means that sponsors can launch any recipe with just a `git pull` and a `docker stack deploy` 👍 +--8<-- "premix-cta.md" ## Assemble more tools.. @@ -69,6 +68,6 @@ Continue through the list of tools below, adding whichever tools your want to us - [Heimdall](/recipes/autopirate/heimdall/) - [End](/recipes/autopirate/end/) (launch the stack) -## Chef's Notes 📓 +[^1]: In many cases, tools will integrate with each other. I.e., Radarr needs to talk to SABnzbd and NZBHydra, Ombi needs to talk to Radarr, etc. Since each tool runs within the stack under its own name, just refer to each tool by name (i.e. "radarr"), and docker swarm will resolve the name to the appropriate container. You can identify the tool-specific port by looking at the docker-compose service definition. -1. In many cases, tools will integrate with each other. I.e., Radarr needs to talk to SABnzbd and NZBHydra, Ombi needs to talk to Radarr, etc. Since each tool runs within the stack under its own name, just refer to each tool by name (i.e. "radarr"), and docker swarm will resolve the name to the appropriate container. You can identify the tool-specific port by looking at the docker-compose service definition. +--8<-- "recipe-footer.md" \ No newline at end of file diff --git a/manuscript/recipes/autopirate/lazylibrarian.md b/manuscript/recipes/autopirate/lazylibrarian.md index 32b171a..2e2da44 100644 --- a/manuscript/recipes/autopirate/lazylibrarian.md +++ b/manuscript/recipes/autopirate/lazylibrarian.md @@ -58,8 +58,7 @@ calibre-server: ```` -!!! tip - I share (_with my [sponsors](https://github.com/sponsors/funkypenguin)_) a private "_premix_" git repository, which includes necessary docker-compose and env files for all published recipes. This means that sponsors can launch any recipe with just a ```git pull``` and a ```docker stack deploy``` 👍 +--8<-- "premix-cta.md" ## Assemble more tools.. @@ -81,8 +80,7 @@ Continue through the list of tools below, adding whichever tools your want to us * [Heimdall](/recipes/autopirate/heimdall/) * [End](/recipes/autopirate/end/) (launch the stack) +[^1]: In many cases, tools will integrate with each other. I.e., Radarr needs to talk to SABnzbd and NZBHydra, Ombi needs to talk to Radarr, etc. Since each tool runs within the stack under its own name, just refer to each tool by name (i.e. "radarr"), and docker swarm will resolve the name to the appropriate container. You can identify the tool-specific port by looking at the docker-compose service definition. +[^2]: The calibre-server container co-exists within the Lazy Librarian (LL) containers so that LL can automatically add a book to Calibre using the calibre-server interface. The calibre library can then be properly viewed using the [calibre-web](/recipes/calibre-web) recipe. -## Chef's Notes 📓 - -1. The calibre-server container co-exists within the Lazy Librarian (LL) containers so that LL can automatically add a book to Calibre using the calibre-server interface. The calibre library can then be properly viewed using the [calibre-web](/recipes/calibre-web) recipe. -2. In many cases, tools will integrate with each other. I.e., Radarr needs to talk to SABnzbd and NZBHydra, Ombi needs to talk to Radarr, etc. Since each tool runs within the stack under its own name, just refer to each tool by name (i.e. "radarr"), and docker swarm will resolve the name to the appropriate container. You can identify the tool-specific port by looking at the docker-compose service definition. \ No newline at end of file +--8<-- "recipe-footer.md" \ No newline at end of file diff --git a/manuscript/recipes/autopirate/lidarr.md b/manuscript/recipes/autopirate/lidarr.md index 6cb131a..4a1be78 100644 --- a/manuscript/recipes/autopirate/lidarr.md +++ b/manuscript/recipes/autopirate/lidarr.md @@ -46,8 +46,7 @@ lidarr_proxy: -authenticated-emails-file=/authenticated-emails.txt ```` -!!! tip - I share (_with my [sponsors](https://github.com/sponsors/funkypenguin)_) a private "_premix_" git repository, which includes necessary docker-compose and env files for all published recipes. This means that sponsors can launch any recipe with just a ```git pull``` and a ```docker stack deploy``` 👍 +--8<-- "premix-cta.md" ## Assemble more tools.. @@ -70,8 +69,7 @@ Continue through the list of tools below, adding whichever tools your want to us * [Heimdall](/recipes/autopirate/heimdall/) * [End](/recipes/autopirate/end/) (launch the stack) +[^1]: In many cases, tools will integrate with each other. I.e., Radarr needs to talk to SABnzbd and NZBHydra, Ombi needs to talk to Radarr, etc. Since each tool runs within the stack under its own name, just refer to each tool by name (i.e. "radarr"), and docker swarm will resolve the name to the appropriate container. You can identify the tool-specific port by looking at the docker-compose service definition. +[^2]: The addition of the Lidarr recipe was contributed by our very own @gpulido in Discord (http://chat.funkypenguin.co.nz) - Thanks Gabriel! -## Chef's Notes 📓 - -1. In many cases, tools will integrate with each other. I.e., Radarr needs to talk to SABnzbd and NZBHydra, Ombi needs to talk to Radarr, etc. Since each tool runs within the stack under its own name, just refer to each tool by name (i.e. "radarr"), and docker swarm will resolve the name to the appropriate container. You can identify the tool-specific port by looking at the docker-compose service definition. -2. The addition of the Lidarr recipe was contributed by our very own @gpulido in Discord (http://chat.funkypenguin.co.nz) - Thanks Gabriel! \ No newline at end of file +--8<-- "recipe-footer.md" \ No newline at end of file diff --git a/manuscript/recipes/autopirate/mylar.md b/manuscript/recipes/autopirate/mylar.md index ba25b83..8f7baa4 100644 --- a/manuscript/recipes/autopirate/mylar.md +++ b/manuscript/recipes/autopirate/mylar.md @@ -44,8 +44,7 @@ mylar_proxy: -authenticated-emails-file=/authenticated-emails.txt ```` -!!! tip - I share (_with my [sponsors](https://github.com/sponsors/funkypenguin)_) a private "_premix_" git repository, which includes necessary docker-compose and env files for all published recipes. This means that sponsors can launch any recipe with just a ```git pull``` and a ```docker stack deploy``` 👍 +--8<-- "premix-cta.md" ## Assemble more tools.. @@ -67,11 +66,10 @@ Continue through the list of tools below, adding whichever tools your want to us * [Heimdall](/recipes/autopirate/heimdall/) * [End](/recipes/autopirate/end/) (launch the stack) +[^1]: In many cases, tools will integrate with each other. I.e., Radarr needs to talk to SABnzbd and NZBHydra, Ombi needs to talk to Radarr, etc. Since each tool runs within the stack under its own name, just refer to each tool by name (i.e. "radarr"), and docker swarm will resolve the name to the appropriate container. You can identify the tool-specific port by looking at the docker-compose service definition. +[^2]. If you intend to configure Mylar to perform its own NZB searches and push the hits to a downloader such as SABnzbd, then in addition to configuring the connection to SAB with host, port and api key, you will need to set the parameter `host_return` parameter to the fully qualified Mylar address (e.g. `http://mylar:8090`). -## Chef's Notes 📓 + This will provide the link to the downloader necessary to initiate the download. This parameter is not presented in the user interface so the config file (`$MYLAR_HOME/config.ini`) will need to be manually updated. The parameter can be found under the [Interface] section of the file. ([Details](https://github.com/evilhero/mylar/issues/2242)) -1. In many cases, tools will integrate with each other. I.e., Radarr needs to talk to SABnzbd and NZBHydra, Ombi needs to talk to Radarr, etc. Since each tool runs within the stack under its own name, just refer to each tool by name (i.e. "radarr"), and docker swarm will resolve the name to the appropriate container. You can identify the tool-specific port by looking at the docker-compose service definition. -2. If you intend to configure Mylar to perform its own NZB searches and push the hits to a downloader such as SABnzbd, then in addition to configuring the connection to SAB with host, port and api key, you will need to set the parameter `host_return` parameter to the fully qualified Mylar address (e.g. `http://mylar:8090`). - - This will provide the link to the downloader necessary to initiate the download. This parameter is not presented in the user interface so the config file (`$MYLAR_HOME/config.ini`) will need to be manually updated. The parameter can be found under the [Interface] section of the file. ([Details](https://github.com/evilhero/mylar/issues/2242)) \ No newline at end of file +--8<-- "recipe-footer.md" \ No newline at end of file diff --git a/manuscript/recipes/autopirate/nzbget.md b/manuscript/recipes/autopirate/nzbget.md index e921188..ac72ce8 100644 --- a/manuscript/recipes/autopirate/nzbget.md +++ b/manuscript/recipes/autopirate/nzbget.md @@ -14,8 +14,7 @@ NZBGet performs the same function as [SABnzbd](/recipes/autopirate/sabnzbd.md) ( To include NZBGet in your [AutoPirate](/recipes/autopirate/) stack (_The only reason you **wouldn't** use NZBGet, would be if you were using [SABnzbd](/recipes/autopirate/sabnzbd/) instead_), include the following in your autopirate.yml stack definition file: -!!! tip - I share (_with my [sponsors](https://github.com/sponsors/funkypenguin)_) a private "_premix_" git repository, which includes necessary docker-compose and env files for all published recipes. This means that sponsors can launch any recipe with just a ```git pull``` and a ```docker stack deploy``` 👍 +--8<-- "premix-cta.md" ```` nzbget: @@ -74,7 +73,6 @@ Continue through the list of tools below, adding whichever tools your want to us * [Heimdall](/recipes/autopirate/heimdall/) * [End](/recipes/autopirate/end/) (launch the stack) +[^1]: In many cases, tools will integrate with each other. I.e., Radarr needs to talk to SABnzbd and NZBHydra, Ombi needs to talk to Radarr, etc. Since each tool runs within the stack under its own name, just refer to each tool by name (i.e. "radarr"), and docker swarm will resolve the name to the appropriate container. You can identify the tool-specific port by looking at the docker-compose service definition. -## Chef's Notes 📓 - -1. In many cases, tools will integrate with each other. I.e., Radarr needs to talk to SABnzbd and NZBHydra, Ombi needs to talk to Radarr, etc. Since each tool runs within the stack under its own name, just refer to each tool by name (i.e. "radarr"), and docker swarm will resolve the name to the appropriate container. You can identify the tool-specific port by looking at the docker-compose service definition. \ No newline at end of file +--8<-- "recipe-footer.md" \ No newline at end of file diff --git a/manuscript/recipes/autopirate/nzbhydra.md b/manuscript/recipes/autopirate/nzbhydra.md index 3119c72..eb14564 100644 --- a/manuscript/recipes/autopirate/nzbhydra.md +++ b/manuscript/recipes/autopirate/nzbhydra.md @@ -50,8 +50,7 @@ nzbhydra_proxy: -authenticated-emails-file=/authenticated-emails.txt ```` -!!! tip - I share (_with my [sponsors](https://github.com/sponsors/funkypenguin)_) a private "_premix_" git repository, which includes necessary docker-compose and env files for all published recipes. This means that sponsors can launch any recipe with just a ```git pull``` and a ```docker stack deploy``` 👍 +--8<-- "premix-cta.md" ## Assemble more tools.. @@ -73,7 +72,6 @@ Continue through the list of tools below, adding whichever tools your want to us * [Heimdall](/recipes/autopirate/heimdall/) * [End](/recipes/autopirate/end/) (launch the stack) +[^1]: In many cases, tools will integrate with each other. I.e., Radarr needs to talk to SABnzbd and NZBHydra, Ombi needs to talk to Radarr, etc. Since each tool runs within the stack under its own name, just refer to each tool by name (i.e. "radarr"), and docker swarm will resolve the name to the appropriate container. You can identify the tool-specific port by looking at the docker-compose service definition. -## Chef's Notes 📓 - -1. In many cases, tools will integrate with each other. I.e., Radarr needs to talk to SABnzbd and NZBHydra, Ombi needs to talk to Radarr, etc. Since each tool runs within the stack under its own name, just refer to each tool by name (i.e. "radarr"), and docker swarm will resolve the name to the appropriate container. You can identify the tool-specific port by looking at the docker-compose service definition. \ No newline at end of file +--8<-- "recipe-footer.md" \ No newline at end of file diff --git a/manuscript/recipes/autopirate/nzbhydra2.md b/manuscript/recipes/autopirate/nzbhydra2.md index 2a1dadc..5b31630 100644 --- a/manuscript/recipes/autopirate/nzbhydra2.md +++ b/manuscript/recipes/autopirate/nzbhydra2.md @@ -63,8 +63,7 @@ nzbhydra2_proxy: -authenticated-emails-file=/authenticated-emails.txt ``` -!!! tip -I share (_with my [sponsors](https://github.com/sponsors/funkypenguin)_) a private "_premix_" git repository, which includes necessary docker-compose and env files for all published recipes. This means that sponsors can launch any recipe with just a `git pull` and a `docker stack deploy` 👍 +--8<-- "premix-cta.md" ## Assemble more tools.. @@ -86,7 +85,7 @@ Continue through the list of tools below, adding whichever tools your want to us - [Heimdall](/recipes/autopirate/heimdall/) - [End](/recipes/autopirate/end/) (launch the stack) -## Chef's Notes 📓 +[^1]: In many cases, tools will integrate with each other. I.e., Radarr needs to talk to SABnzbd and NZBHydra, Ombi needs to talk to Radarr, etc. Since each tool runs within the stack under its own name, just refer to each tool by name (i.e. "radarr"), and docker swarm will resolve the name to the appropriate container. You can identify the tool-specific port by looking at the docker-compose service definition. +[^2]: Note that NZBHydra2 _can_ co-exist with NZBHydra (1), but if you want your tools (Sonarr, Radarr, etc) to use NZBHydra2, you'll need to change both the target hostname (_to "hydra2"_) and the target port (_to 5076_). -1. In many cases, tools will integrate with each other. I.e., Radarr needs to talk to SABnzbd and NZBHydra2, Ombi needs to talk to Radarr, etc. Since each tool runs within the stack under its own name, just refer to each tool by name (i.e. "radarr"), and docker swarm will resolve the name to the appropriate container. You can identify the tool-specific port by looking at the docker-compose service definition. -2. Note that NZBHydra2 _can_ co-exist with NZBHydra (1), but if you want your tools (Sonarr, Radarr, etc) to use NZBHydra2, you'll need to change both the target hostname (_to "hydra2"_) and the target port (_to 5076_). +--8<-- "recipe-footer.md" diff --git a/manuscript/recipes/autopirate/ombi.md b/manuscript/recipes/autopirate/ombi.md index 75f3296..e9d57c4 100644 --- a/manuscript/recipes/autopirate/ombi.md +++ b/manuscript/recipes/autopirate/ombi.md @@ -51,8 +51,7 @@ ombi_proxy: -authenticated-emails-file=/authenticated-emails.txt ```` -!!! tip - I share (_with my [sponsors](https://github.com/sponsors/funkypenguin)_) a private "_premix_" git repository, which includes necessary docker-compose and env files for all published recipes. This means that sponsors can launch any recipe with just a ```git pull``` and a ```docker stack deploy``` 👍 +--8<-- "premix-cta.md" ## Assemble more tools.. @@ -74,7 +73,6 @@ Continue through the list of tools below, adding whichever tools your want to us * [Heimdall](/recipes/autopirate/heimdall/) * [End](/recipes/autopirate/end/) (launch the stack) +[^1]: In many cases, tools will integrate with each other. I.e., Radarr needs to talk to SABnzbd and NZBHydra, Ombi needs to talk to Radarr, etc. Since each tool runs within the stack under its own name, just refer to each tool by name (i.e. "radarr"), and docker swarm will resolve the name to the appropriate container. You can identify the tool-specific port by looking at the docker-compose service definition. -## Chef's Notes 📓 - -1. In many cases, tools will integrate with each other. I.e., Radarr needs to talk to SABnzbd and NZBHydra, Ombi needs to talk to Radarr, etc. Since each tool runs within the stack under its own name, just refer to each tool by name (i.e. "radarr"), and docker swarm will resolve the name to the appropriate container. You can identify the tool-specific port by looking at the docker-compose service definition. \ No newline at end of file +--8<-- "recipe-footer.md" \ No newline at end of file diff --git a/manuscript/recipes/autopirate/radarr.md b/manuscript/recipes/autopirate/radarr.md index 98dd36b..461deaf 100644 --- a/manuscript/recipes/autopirate/radarr.md +++ b/manuscript/recipes/autopirate/radarr.md @@ -62,8 +62,7 @@ radarr_proxy: -authenticated-emails-file=/authenticated-emails.txt ```` -!!! tip - I share (_with my [sponsors](https://github.com/sponsors/funkypenguin)_) a private "_premix_" git repository, which includes necessary docker-compose and env files for all published recipes. This means that sponsors can launch any recipe with just a ```git pull``` and a ```docker stack deploy``` 👍 +--8<-- "premix-cta.md" ## Assemble more tools.. @@ -85,7 +84,6 @@ Continue through the list of tools below, adding whichever tools your want to us * [Heimdall](/recipes/autopirate/heimdall/) * [End](/recipes/autopirate/end/) (launch the stack) +[^1]: In many cases, tools will integrate with each other. I.e., Radarr needs to talk to SABnzbd and NZBHydra, Ombi needs to talk to Radarr, etc. Since each tool runs within the stack under its own name, just refer to each tool by name (i.e. "radarr"), and docker swarm will resolve the name to the appropriate container. You can identify the tool-specific port by looking at the docker-compose service definition. -## Chef's Notes 📓 - -1. In many cases, tools will integrate with each other. I.e., Radarr needs to talk to SABnzbd and NZBHydra, Ombi needs to talk to Radarr, etc. Since each tool runs within the stack under its own name, just refer to each tool by name (i.e. "radarr"), and docker swarm will resolve the name to the appropriate container. You can identify the tool-specific port by looking at the docker-compose service definition. \ No newline at end of file +--8<-- "recipe-footer.md" \ No newline at end of file diff --git a/manuscript/recipes/autopirate/rtorrent.md b/manuscript/recipes/autopirate/rtorrent.md index 751925f..31f761e 100644 --- a/manuscript/recipes/autopirate/rtorrent.md +++ b/manuscript/recipes/autopirate/rtorrent.md @@ -50,9 +50,7 @@ rtorrent_proxy: -authenticated-emails-file=/authenticated-emails.txt ``` -!!! tip - I share (_with my [sponsors](https://github.com/sponsors/funkypenguin)_) a private "_premix_" git repository, which includes necessary docker-compose and env files for all published recipes. This means that sponsors can launch any recipe with just a ```git pull``` and a ```docker stack deploy``` 👍 - +--8<-- "premix-cta.md" ## Assemble more tools.. @@ -74,7 +72,6 @@ Continue through the list of tools below, adding whichever tools your want to us * [Heimdall](/recipes/autopirate/heimdall/) * [End](/recipes/autopirate/end/) (launch the stack) +[^1]: In many cases, tools will integrate with each other. I.e., Radarr needs to talk to SABnzbd and NZBHydra, Ombi needs to talk to Radarr, etc. Since each tool runs within the stack under its own name, just refer to each tool by name (i.e. "radarr"), and docker swarm will resolve the name to the appropriate container. You can identify the tool-specific port by looking at the docker-compose service definition. -## Chef's Notes 📓 - -1. In many cases, tools will integrate with each other. I.e., Radarr needs to talk to SABnzbd and NZBHydra, Ombi needs to talk to Radarr, etc. Since each tool runs within the stack under its own name, just refer to each tool by name (i.e. "radarr"), and docker swarm will resolve the name to the appropriate container. You can identify the tool-specific port by looking at the docker-compose service definition. \ No newline at end of file +--8<-- "recipe-footer.md" \ No newline at end of file diff --git a/manuscript/recipes/autopirate/sabnzbd.md b/manuscript/recipes/autopirate/sabnzbd.md index 710e9d7..78d4be1 100644 --- a/manuscript/recipes/autopirate/sabnzbd.md +++ b/manuscript/recipes/autopirate/sabnzbd.md @@ -17,8 +17,7 @@ SABnzbd is the workhorse of the stack. It takes .nzb files as input (_manually o To include SABnzbd in your [AutoPirate](/recipes/autopirate/) stack (_The only reason you **wouldn't** use SABnzbd, would be if you were using [NZBGet](/recipes/autopirate/nzbget.md) instead_), include the following in your autopirate.yml stack definition file: -!!! tip - I share (_with my [sponsors](https://github.com/sponsors/funkypenguin)_) a private "_premix_" git repository, which includes necessary docker-compose and env files for all published recipes. This means that sponsors can launch any recipe with just a ```git pull``` and a ```docker stack deploy``` 👍 +--8<-- "premix-cta.md" ```` sabnzbd: @@ -81,7 +80,6 @@ Continue through the list of tools below, adding whichever tools your want to us * [Heimdall](/recipes/autopirate/heimdall/) * [End](/recipes/autopirate/end/) (launch the stack) +[^1]: In many cases, tools will integrate with each other. I.e., Radarr needs to talk to SABnzbd and NZBHydra, Ombi needs to talk to Radarr, etc. Since each tool runs within the stack under its own name, just refer to each tool by name (i.e. "radarr"), and docker swarm will resolve the name to the appropriate container. You can identify the tool-specific port by looking at the docker-compose service definition. -## Chef's Notes 📓 - -1. In many cases, tools will integrate with each other. I.e., Radarr needs to talk to SABnzbd and NZBHydra, Ombi needs to talk to Radarr, etc. Since each tool runs within the stack under its own name, just refer to each tool by name (i.e. "radarr"), and docker swarm will resolve the name to the appropriate container. You can identify the tool-specific port by looking at the docker-compose service definition. \ No newline at end of file +--8<-- "recipe-footer.md" \ No newline at end of file diff --git a/manuscript/recipes/autopirate/sonarr.md b/manuscript/recipes/autopirate/sonarr.md index de01507..5286997 100644 --- a/manuscript/recipes/autopirate/sonarr.md +++ b/manuscript/recipes/autopirate/sonarr.md @@ -48,8 +48,7 @@ sonarr_proxy: -authenticated-emails-file=/authenticated-emails.txt ```` -!!! tip - I share (_with my [sponsors](https://github.com/sponsors/funkypenguin)_) a private "_premix_" git repository, which includes necessary docker-compose and env files for all published recipes. This means that sponsors can launch any recipe with just a ```git pull``` and a ```docker stack deploy``` 👍 +--8<-- "premix-cta.md" ## Assemble more tools.. @@ -71,7 +70,6 @@ Continue through the list of tools below, adding whichever tools your want to us * [Heimdall](/recipes/autopirate/heimdall/) * [End](/recipes/autopirate/end/) (launch the stack) +[^1]: In many cases, tools will integrate with each other. I.e., Radarr needs to talk to SABnzbd and NZBHydra, Ombi needs to talk to Radarr, etc. Since each tool runs within the stack under its own name, just refer to each tool by name (i.e. "radarr"), and docker swarm will resolve the name to the appropriate container. You can identify the tool-specific port by looking at the docker-compose service definition. -## Chef's Notes 📓 - -1. In many cases, tools will integrate with each other. I.e., Radarr needs to talk to SABnzbd and NZBHydra, Ombi needs to talk to Radarr, etc. Since each tool runs within the stack under its own name, just refer to each tool by name (i.e. "radarr"), and docker swarm will resolve the name to the appropriate container. You can identify the tool-specific port by looking at the docker-compose service definition. \ No newline at end of file +--8<-- "recipe-footer.md" \ No newline at end of file diff --git a/manuscript/recipes/bitwarden.md b/manuscript/recipes/bitwarden.md index 516e54e..c4b454e 100644 --- a/manuscript/recipes/bitwarden.md +++ b/manuscript/recipes/bitwarden.md @@ -49,9 +49,7 @@ Create `/var/data/config/bitwarden/bitwarden.env`, and **leave it empty for now* Create a docker swarm config file in docker-compose syntax (v3), something like this: -!!! tip - I share (_with my [sponsors](https://github.com/sponsors/funkypenguin)_) a private "_premix_" git repository, which includes necessary docker-compose and env files for all published recipes. This means that sponsors can launch any recipe with just a ```git pull``` and a ```docker stack deploy``` 👍 - +--8<-- "premix-cta.md" ``` version: "3" @@ -94,8 +92,8 @@ Browse to your new instance at https://**YOUR-FQDN**, and create a new user acco Once you've created your account, jump over to https://bitwarden.com/#download and download the apps for your mobile and browser, and start adding your logins! -## Chef's Notes 📓 +[^1]: You'll notice we're not using the *official* container images (*[all 6 of them required](https://help.bitwarden.com/article/install-on-premise/#install-bitwarden)!)*, but rather a [more lightweight version ideal for self-hosting](https://hub.docker.com/r/bitwardenrs/server). All of the elements are contained within a single container, and SQLite is used for the database backend. +[^2]: As mentioned above, readers should refer to the [dani-garcia/bitwarden_rs wiki](https://github.com/dani-garcia/bitwarden_rs) for details on customizing the behaviour of Bitwarden. +[^3]: The inclusion of Bitwarden was due to the efforts of @gkoerk in our [Discord server](http://chat.funkypenguin.co.nz)- Thanks Gerry! -1. You'll notice we're not using the *official* container images (*[all 6 of them required](https://help.bitwarden.com/article/install-on-premise/#install-bitwarden)!)*, but rather a [more lightweight version ideal for self-hosting](https://hub.docker.com/r/bitwardenrs/server). All of the elements are contained within a single container, and SQLite is used for the database backend. -2. As mentioned above, readers should refer to the [dani-garcia/bitwarden_rs wiki](https://github.com/dani-garcia/bitwarden_rs) for details on customizing the behaviour of Bitwarden. -3. The inclusion of Bitwarden was due to the efforts of @gkoerk in our [Discord server](http://chat.funkypenguin.co.nz)- Thanks Gerry! +--8<-- "recipe-footer.md" \ No newline at end of file diff --git a/manuscript/recipes/bookstack.md b/manuscript/recipes/bookstack.md index 46df244..bbddeaf 100644 --- a/manuscript/recipes/bookstack.md +++ b/manuscript/recipes/bookstack.md @@ -52,9 +52,7 @@ DB_PASSWORD=secret Create a docker swarm config file in docker-compose syntax (v3), something like this: -!!! tip - I share (_with my [sponsors](https://github.com/sponsors/funkypenguin)_) a private "_premix_" git repository, which includes necessary docker-compose and env files for all published recipes. This means that sponsors can launch any recipe with just a ```git pull``` and a ```docker stack deploy``` 👍 - +--8<-- "premix-cta.md" ``` version: '3' @@ -139,6 +137,6 @@ Launch the BookStack stack by running ```docker stack deploy bookstack -c 1 +Always have a backup plan[^1] ![duplicati Screenshot](../images/duplicati.jpg) @@ -57,8 +57,7 @@ CLI_ARGS= #optional Create a docker swarm config file in docker-compose syntax (v3), something like this: -!!! tip - I share (_with my [sponsors](https://github.com/sponsors/funkypenguin)_) a private "_premix_" git repository, which includes necessary docker-compose and env files for all published recipes. This means that sponsors can launch any recipe with just a ```git pull``` and a ```docker stack deploy``` 👍 +--8<-- "premix-cta.md" ``` version: "3" @@ -113,8 +112,7 @@ Once we authenticate through the traefik-forward-auth provider, we can start con !!! tip Backing up files on a regular basis is going to use a continually-increasing amount of disk space. To help with this, Duplicati offers a "Smart Backup Retention" scheme that will intelligently remove certain backups as they age while still maintaining a comprehensive backup history. You can set that configuration on the "Options" tab of the backup configuration. +[^1]: Quote attributed to Mila Kunis +[^2]: The [Duplicati 2 User's Manual](https://duplicati.readthedocs.io/en/latest/) contains all the information you'll need to configure backup endpoints, restore jobs, scheduling and advanced properties for your backup jobs. -## Chef's Notes 📓 - -1. Quote attributed to Mila Kunis -2. The [Duplicati 2 User's Manual](https://duplicati.readthedocs.io/en/latest/) contains all the information you'll need to configure backup endpoints, restore jobs, scheduling and advanced properties for your backup jobs. +--8<-- "recipe-footer.md" \ No newline at end of file diff --git a/manuscript/recipes/duplicity.md b/manuscript/recipes/duplicity.md index da5f80a..a63b041 100644 --- a/manuscript/recipes/duplicity.md +++ b/manuscript/recipes/duplicity.md @@ -117,8 +117,7 @@ Examine the contents of /var/data/duplicity/tmp/traefik-restored.yml to confirm Now that we have confidence in our backup/restore process, let's automate it by creating a docker swarm config file in docker-compose syntax (v3), something like this: -!!! tip -I share (_with my [sponsors](https://github.com/sponsors/funkypenguin)_) a private "_premix_" git repository, which includes necessary docker-compose and env files for all published recipes. This means that sponsors can launch any recipe with just a `git pull` and a `docker stack deploy` 👍 +--8<-- "premix-cta.md" ``` version: "3" @@ -155,7 +154,7 @@ Launch Duplicity stack by running `docker stack deploy duplicity -c -!!! important - Ongoing development of this recipe is sponsored by [The Common Observatory](https://www.observe.global/). Thanks guys! - - [![Common Observatory](../images/common_observatory.png)](https://www.observe.global/) - ElkarBackup is a free open-source backup solution based on RSync/RSnapshot. It's basically a web wrapper around rsync/rsnapshot, which means that your backups are just files on a filesystem, utilising hardlinks for tracking incremental changes. I find this result more reassuring than a blob of compressed, (encrypted?) data that [more sophisticated backup solutions](/recipes/duplicity/) would produce for you. ![ElkarBackup Screenshot](../images/elkarbackup.png) @@ -79,9 +74,7 @@ BACKUP_FREQUENCY=1d Create a docker swarm config file in docker-compose syntax (v3), something like this: -!!! tip - I share (_with my [sponsors](https://github.com/sponsors/funkypenguin)_) a private "_premix_" git repository, which includes necessary docker-compose and env files for all published recipes. This means that sponsors can launch any recipe with just a ```git pull``` and a ```docker stack deploy``` 👍 - +--8<-- "premix-cta.md" ``` version: "3" @@ -238,12 +231,7 @@ To restore files form a job, click on the "Restore" button in the WebUI, while o This takes you to a list of backup names and file paths. You can choose to download the entire contents of the backup from your browser as a .tar.gz, or to restore the backup to the client. If you click on the **name** of the backup, you can also drill down into the file structure, choosing to restore a single file or directory. -!!! important - Ongoing development of this recipe is sponsored by [The Common Observatory](https://www.observe.global/). Thanks guys! +[^1]: If you wanted to expose the ElkarBackup UI directly, you could remove the oauth2_proxy from the design, and move the traefik_public-related labels directly to the app service. You'd also need to add the traefik_public network to the app service. +[^2]: The original inclusion of ElkarBackup was due to the efforts of @gpulido in our [Discord server](http://chat.funkypenguin.co.nz). Thanks Gabriel! - [![Common Observatory](../images/common_observatory.png)](https://www.observe.global/) - -## Chef's Notes 📓 - -1. If you wanted to expose the ElkarBackup UI directly, you could remove the oauth2_proxy from the design, and move the traefik_public-related labels directly to the app service. You'd also need to add the traefik_public network to the app service. -2. The original inclusion of ElkarBackup was due to the efforts of @gpulido in our [Discord server](http://chat.funkypenguin.co.nz). Thanks Gabriel! +--8<-- "recipe-footer.md" \ No newline at end of file diff --git a/manuscript/recipes/emby.md b/manuscript/recipes/emby.md index 471592b..ff3e34c 100644 --- a/manuscript/recipes/emby.md +++ b/manuscript/recipes/emby.md @@ -35,9 +35,7 @@ GUID= Create a docker swarm config file in docker-compose syntax (v3), something like this: -!!! tip - I share (_with my [sponsors](https://github.com/sponsors/funkypenguin)_) a private "_premix_" git repository, which includes necessary docker-compose and env files for all published recipes. This means that sponsors can launch any recipe with just a ```git pull``` and a ```docker stack deploy``` 👍 - +--8<-- "premix-cta.md" ``` version: "3.0" @@ -83,8 +81,8 @@ Launch the stack by running ```docker stack deploy emby -c /dump/dump_\`date +%d-%m-%Y"_"%H_%M_%S\`.sql.gz - (ls -t /dump/dump*.sql.gz|head -n $$BACKUP_NUM_KEEP;ls /dump/dump*.sql.gz)|sort|uniq -u|xargs rm -- {} - sleep $$BACKUP_FREQUENCY - done - EOF' - networks: - - internal - -networks: - traefik_public: - external: true - internal: - driver: overlay - ipam: - config: - - subnet: 172.16.44.0/24 diff --git a/manuscript/recipes/general/ipad-pro-geeking.md b/manuscript/recipes/general/ipad-pro-geeking.md deleted file mode 100644 index 5ab2f8a..0000000 --- a/manuscript/recipes/general/ipad-pro-geeking.md +++ /dev/null @@ -1 +0,0 @@ -Hello \ No newline at end of file diff --git a/manuscript/recipes/general/kid-safe-wifi.md b/manuscript/recipes/general/kid-safe-wifi.md deleted file mode 100644 index 5ab2f8a..0000000 --- a/manuscript/recipes/general/kid-safe-wifi.md +++ /dev/null @@ -1 +0,0 @@ -Hello \ No newline at end of file diff --git a/manuscript/recipes/general/start.md b/manuscript/recipes/general/start.md deleted file mode 100644 index e69de29..0000000 diff --git a/manuscript/recipes/ghost.md b/manuscript/recipes/ghost.md index b336f84..38582a3 100644 --- a/manuscript/recipes/ghost.md +++ b/manuscript/recipes/ghost.md @@ -30,8 +30,7 @@ mkdir -p /var/data/ghost Create a docker swarm config file in docker-compose syntax (v3), something like this: -!!! tip - I share (_with my [sponsors](https://github.com/sponsors/funkypenguin)_) a private "_premix_" git repository, which includes necessary docker-compose and env files for all published recipes. This means that sponsors can launch any recipe with just a ```git pull``` and a ```docker stack deploy``` 👍 +--8<-- "premix-cta.md" ``` version: '3' @@ -64,12 +63,6 @@ Launch the Ghost stack by running ```docker stack deploy ghost -c /var/data/kanboard/deployment.yml @@ -260,6 +259,6 @@ kubectl patch -n kanboard deployment app -p "{\"spec\":{\"template\":{\"metadata To look at the Kanboard pod's logs, run ```kubectl logs -n kanboard -f```. For further troubleshooting hints, see [Troubleshooting](/reference/kubernetes/troubleshooting/). -## Chef's Notes +[^1]: The simplest deployment of Kanboard uses the default SQLite database backend, stored on the persistent volume. You can convert this to a "real" database running MySQL or PostgreSQL, and running an an additional database pod and service. Contact me if you'd like further details ;) -1. The simplest deployment of Kanboard uses the default SQLite database backend, stored on the persistent volume. You can convert this to a "real" database running MySQL or PostgreSQL, and running an an additional database pod and service. Contact me if you'd like further details ;) \ No newline at end of file +--8<-- "recipe-footer.md" \ No newline at end of file diff --git a/manuscript/recipes/kubernetes/kubernetes-dashboard.md b/manuscript/recipes/kubernetes/kubernetes-dashboard.md index 3a3c3b0..07160c8 100644 --- a/manuscript/recipes/kubernetes/kubernetes-dashboard.md +++ b/manuscript/recipes/kubernetes/kubernetes-dashboard.md @@ -30,6 +30,6 @@ Using the dashboard, you can: At this point, you should be able to access your instance on your chosen DNS name (*i.e. https://dashboard.example.com*) -## Chef's Notes +[^1]: The simplest deployment of Kanboard uses the default SQLite database backend, stored on the persistent volume. You can convert this to a "real" database running MySQL or PostgreSQL, and running an an additional database pod and service. Contact me if you'd like further details ;) -1. The simplest deployment of Kanboard uses the default SQLite database backend, stored on the persistent volume. You can convert this to a "real" database running MySQL or PostgreSQL, and running an an additional database pod and service. Contact me if you'd like further details ;) \ No newline at end of file +--8<-- "recipe-footer.md" \ No newline at end of file diff --git a/manuscript/recipes/kubernetes/miniflux.md b/manuscript/recipes/kubernetes/miniflux.md index b6f3627..8f4b860 100644 --- a/manuscript/recipes/kubernetes/miniflux.md +++ b/manuscript/recipes/kubernetes/miniflux.md @@ -117,8 +117,7 @@ Now that we have a [namespace](https://kubernetes.io/docs/concepts/overview/work Deployments tell Kubernetes about the desired state of the pod (*which it will then attempt to maintain*). Create the db deployment by excecuting the following. Note that the deployment refers to the secrets created above. -!!! tip - I share (_with my [sponsors](https://github.com/sponsors/funkypenguin)_) a private "_premix_" git repository, which includes necessary .yml files for all published recipes. This means that sponsors can launch any recipe with just a ```git pull``` and a ```kubectl create -f *.yml``` 👍 +--8<-- "premix-cta.md" ``` cat < /var/data/miniflux/db-deployment.yml @@ -317,4 +316,6 @@ At this point, you should be able to access your instance on your chosen DNS nam ### Troubleshooting -To look at the Miniflux pod's logs, run ```kubectl logs -n miniflux -f```. For further troubleshooting hints, see [Troubleshooting](/reference/kubernetes/troubleshooting/). \ No newline at end of file +To look at the Miniflux pod's logs, run ```kubectl logs -n miniflux -f```. For further troubleshooting hints, see [Troubleshooting](/reference/kubernetes/troubleshooting/). + +--8<-- "recipe-footer.md" \ No newline at end of file diff --git a/manuscript/recipes/kubernetes/nextcloud.md b/manuscript/recipes/kubernetes/nextcloud.md deleted file mode 100644 index de385e3..0000000 --- a/manuscript/recipes/kubernetes/nextcloud.md +++ /dev/null @@ -1,127 +0,0 @@ -hero: Not all heroes wear capes - -!!! danger "This recipe is a work in progress" - This recipe is **incomplete**, and is featured to align the [sponsors](https://github.com/sponsors/funkypenguin)'s "premix" repository with the cookbook. "_premix_" is a private git repository available to [GitHub sponsors](https://github.com/sponsors/funkypenguin), which includes necessary docker-compose and env files for all published recipes. This means that sponsors can launch any recipe with just a ```git pull``` and a ```docker stack deploy``` 👍 - - So... There may be errors and inaccuracies. Jump into [Discord](http://chat.funkypenguin.co.nz) if you're encountering issues 😁 - -# NAME - -Intro - -![NAME Screenshot](../../images/name.jpg) - -Details - -## Ingredients - -1. [Kubernetes cluster](/kubernetes/cluster/) - -## Preparation - -### Create data locations - -``` -mkdir /var/data/config/mqtt -``` - -### Create namespace - -We use Kubernetes namespaces for service discovery and isolation between our stacks, so create a namespace for the mqtt stack by creating the following .yaml: - -``` -cat < /var/data/mqtt/namespace.yaml -apiVersion: v1 -kind: Namespace -metadata: - name: mqtt -EOF -kubectl create -f /var/data/mqtt/namespace.yaml -``` - -### Prepare environment - -Create wekan.env, and populate with the following variables -``` -OAUTH2_PROXY_CLIENT_ID= -OAUTH2_PROXY_CLIENT_SECRET= -OAUTH2_PROXY_COOKIE_SECRET= -MONGO_URL=mongodb://wekandb:27017/wekan -ROOT_URL=https://wekan.example.com -MAIL_URL=smtp://wekan@wekan.example.com:password@mail.example.com:587/ -MAIL_FROM="Wekan " -``` - -### Setup Docker Swarm - -Create a docker swarm config file in docker-compose syntax (v3), something like this: - -!!! tip - I share (_with my [sponsors](https://github.com/sponsors/funkypenguin)_) a private "_premix_" git repository, which includes necessary docker-compose and env files for all published recipes. This means that sponsors can launch any recipe with just a ```git pull``` and a ```docker stack deploy``` 👍 - - -``` -version: '3' - -services: - - wekandb: - image: mongo:3.2.15 - command: mongod --smallfiles --oplogSize 128 - networks: - - internal - volumes: - - /var/data/wekan/wekan-db:/data/db - - /var/data/wekan/wekan-db-dump:/dump - - proxy: - image: a5huynh/oauth2_proxy - env_file: /var/data/wekan/wekan.env - networks: - - traefik_public - - internal - deploy: - labels: - - traefik_public.frontend.rule=Host:wekan.example.com - - traefik_public.docker.network=traefik_public - - traefik_public.port=4180 - command: | - -cookie-secure=false - -upstream=http://wekan:80 - -redirect-url=https://wekan.example.com - -http-address=http://0.0.0.0:4180 - -email-domain=example.com - -provider=github - - wekan: - image: wekanteam/wekan:latest - networks: - - internal - env_file: /var/data/wekan/wekan.env - -networks: - traefik_public: - external: true - internal: - driver: overlay - ipam: - config: - - 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. - - - -## Serving - -### Launch Wekan stack - -Launch the Wekan stack by running ```docker stack deploy wekan -c ``` - -Log into your new instance at https://**YOUR-FQDN**, with user "root" and the password you specified in gitlab.env. - -## Chef's Notes - -1. If you wanted to expose the Wekan UI directly, you could remove the oauth2_proxy from the design, and move the traefik_public-related labels directly to the wekan container. You'd also need to add the traefik_public network to the wekan container. \ No newline at end of file diff --git a/manuscript/recipes/kubernetes/phpipam.md b/manuscript/recipes/kubernetes/phpipam.md index 3c591b3..a20b40c 100644 --- a/manuscript/recipes/kubernetes/phpipam.md +++ b/manuscript/recipes/kubernetes/phpipam.md @@ -49,9 +49,7 @@ MAIL_FROM="Wekan " Create a docker swarm config file in docker-compose syntax (v3), something like this: -!!! tip - I share (_with my [sponsors](https://github.com/sponsors/funkypenguin)_) a private "_premix_" git repository, which includes necessary docker-compose and env files for all published recipes. This means that sponsors can launch any recipe with just a ```git pull``` and a ```docker stack deploy``` 👍 - +--8<-- "premix-cta.md" ``` version: '3' @@ -115,6 +113,4 @@ Launch the Wekan stack by running ```docker stack deploy wekan -c /var/data/kanboard/deployment.yml @@ -260,6 +259,4 @@ kubectl patch -n kanboard deployment app -p "{\"spec\":{\"template\":{\"metadata To look at the Kanboard pod's logs, run ```kubectl logs -n kanboard -f```. For further troubleshooting hints, see [Troubleshooting](/reference/kubernetes/troubleshooting/). -## Chef's Notes - -1. The simplest deployment of Kanboard uses the default SQLite database backend, stored on the persistent volume. You can convert this to a "real" database running MySQL or PostgreSQL, and running an an additional database pod and service. Contact me if you'd like further details ;) \ No newline at end of file +[^1]: The simplest deployment of Kanboard uses the default SQLite database backend, stored on the persistent volume. You can convert this to a "real" database running MySQL or PostgreSQL, and running an an additional database pod and service. Contact me if you'd like further details ;) \ No newline at end of file diff --git a/manuscript/recipes/mail.md b/manuscript/recipes/mail.md index 70311b6..01fde5a 100644 --- a/manuscript/recipes/mail.md +++ b/manuscript/recipes/mail.md @@ -94,8 +94,7 @@ Create the necessary DNS TXT entries for your domain(s). Note that although open Create a docker swarm config file in docker-compose syntax (_v3.2 - because we need to expose mail ports in "host mode"_), something like this: -!!! tip - I share (_with my [sponsors](https://github.com/sponsors/funkypenguin)_) a private "_premix_" git repository, which includes necessary docker-compose and env files for all published recipes. This means that sponsors can launch any recipe with just a ```git pull``` and a ```docker stack deploy``` 👍 +--8<-- "premix-cta.md" ``` version: '3.2' @@ -178,8 +177,8 @@ SSL_TYPE=letsencrypt Launch the mail server stack by running ```docker stack deploy docker-mailserver -c ``` -## Chef's Notes 📓 +[^1]: One of the elements of this design which I didn't appreciate at first is that since the config is entirely file-based, **setup.sh** can be run on any container host, provided it has the shared data mounted. This means that even though docker-mailserver was not designed with docker swarm in mind, it works perfectl with swarm. I.e., from any node, regardless of where the container is actually running, you're able to add/delete email addresses, view logs, etc. -1. One of the elements of this design which I didn't appreciate at first is that since the config is entirely file-based, **setup.sh** can be run on any container host, provided it has the shared data mounted. This means that even though docker-mailserver was not designed with docker swarm in mind, it works perfectl with swarm. I.e., from any node, regardless of where the container is actually running, you're able to add/delete email addresses, view logs, etc. +[^2]: If you're using sieve with Rainloop, take note of the [workaround](https://discourse.geek-kitchen.funkypenguin.co.nz/t/mail-server-funky-penguins-geek-cookbook/70/15) identified by [ggilley](https://discourse.geek-kitchen.funkypenguin.co.nz/u/ggilley) -2. If you're using sieve with Rainloop, take note of the [workaround](https://discourse.geek-kitchen.funkypenguin.co.nz/t/mail-server-funky-penguins-geek-cookbook/70/15) identified by [ggilley](https://discourse.geek-kitchen.funkypenguin.co.nz/u/ggilley) +--8<-- "recipe-footer.md" \ No newline at end of file diff --git a/manuscript/recipes/mattermost.md b/manuscript/recipes/mattermost.md index bae4744..c87623a 100644 --- a/manuscript/recipes/mattermost.md +++ b/manuscript/recipes/mattermost.md @@ -48,9 +48,7 @@ BACKUP_FREQUENCY=1d Create a docker swarm config file in docker-compose syntax (v3), something like this: -!!! tip - I share (_with my [sponsors](https://github.com/sponsors/funkypenguin)_) a private "_premix_" git repository, which includes necessary docker-compose and env files for all published recipes. This means that sponsors can launch any recipe with just a ```git pull``` and a ```docker stack deploy``` 👍 - +--8<-- "premix-cta.md" ``` version: '3' @@ -114,8 +112,6 @@ networks: Launch the MatterMost stack by running ```docker stack deploy mattermost -c ``` -Log into your new instance at https://**YOUR-FQDN**, with user "root" and the password you specified in gitlab.env. +Log into your new instance at https://**YOUR-FQDN**, with user "root" and the password you specified in mattermost.env. -## Chef's Notes 📓 - -1. If you wanted to expose the Wekan UI directly, you could remove the oauth2_proxy from the design, and move the traefik_public-related labels directly to the wekan container. You'd also need to add the traefik_public network to the wekan container. \ No newline at end of file +--8<-- "recipe-footer.md" \ No newline at end of file diff --git a/manuscript/recipes/miniflux.md b/manuscript/recipes/miniflux.md index bb4e186..7e5441c 100644 --- a/manuscript/recipes/miniflux.md +++ b/manuscript/recipes/miniflux.md @@ -71,8 +71,7 @@ The entire application is configured using environment variables, including the Create a docker swarm config file in docker-compose syntax (v3), something like this: -!!! tip - I share (_with my [sponsors](https://github.com/sponsors/funkypenguin)_) a private "_premix_" git repository, which includes necessary docker-compose and env files for all published recipes. This means that sponsors can launch any recipe with just a ```git pull``` and a ```docker stack deploy``` 👍 +--8<-- "premix-cta.md" ``` version: '3' @@ -139,6 +138,6 @@ Launch the Miniflux stack by running ```docker stack deploy miniflux -c Integration** page. -1. Find the bookmarklet under the **Settings -> Integration** page. +--8<-- "recipe-footer.md" \ No newline at end of file diff --git a/manuscript/recipes/minio.md b/manuscript/recipes/minio.md index c4d9aa2..114a212 100644 --- a/manuscript/recipes/minio.md +++ b/manuscript/recipes/minio.md @@ -45,9 +45,7 @@ MINIO_SECRET_KEY= Create a docker swarm config file in docker-compose syntax (v3), something like this: -!!! tip - I share (_with my [sponsors](https://github.com/sponsors/funkypenguin)_) a private "_premix_" git repository, which includes necessary docker-compose and env files for all published recipes. This means that sponsors can launch any recipe with just a ```git pull``` and a ```docker stack deploy``` 👍 - +--8<-- "premix-cta.md" ``` version: '3.1' @@ -170,9 +168,8 @@ To permanently mount an S3 bucket using goofys, I'd add something like this to / goofys#bucket /mnt/mountpoint fuse _netdev,allow_other,--file-mode=0666 0 0 ``` -## Chef's Notes 📓 - -1. There are many S3-filesystem-mounting tools available, I just picked Goofys because it's simple. Google is your friend :) -2. Some applications (_like [NextCloud](/recipes/nextcloud/)_) can natively mount S3 buckets -3. Some backup tools (_like [Duplicity](/recipes/duplicity/)_) can backup directly to S3 buckets +[^1]: There are many S3-filesystem-mounting tools available, I just picked Goofys because it's simple. Google is your friend :) +[^2]: Some applications (_like [NextCloud](/recipes/nextcloud/)_) can natively mount S3 buckets +[^3]: Some backup tools (_like [Duplicity](/recipes/duplicity/)_) can backup directly to S3 buckets +--8<-- "recipe-footer.md" \ No newline at end of file diff --git a/manuscript/recipes/mqtt.md b/manuscript/recipes/mqtt.md index 088e520..3a3498d 100644 --- a/manuscript/recipes/mqtt.md +++ b/manuscript/recipes/mqtt.md @@ -114,8 +114,7 @@ Because. See [my blog post here](https://www.funkypenguin.co.nz/beware-the-hidde Now that we have a volume, a service, and a namespace, we can create a deployment for the mqtt pod. Note below the use of volume mounts, environment variables, as well as the secrets. -!!! tip -I share (_with my [sponsors](https://github.com/sponsors/funkypenguin)_) a private "_premix_" git repository, which includes necessary .yml files for all published recipes. This means that sponsors can launch any recipe with just a `git pull` and a `kubectl create -f *.yml` 👍 +--8<-- "premix-cta.md" ``` cat < /var/data/mqtt/mqtt.yml @@ -205,4 +204,4 @@ mqtt-65f4d96945-bjj44 1/1 Running 0 5m To actually **use** your new MQTT broker, you'll need to connect to any one of your nodes (`kubectl get nodes -o wide`) on port 30883 (_the nodeport service we created earlier_). More info on that, and a loadbalancer design, to follow shortly :) -## Chef's Notes 📓 +--8<-- "recipe-footer.md" \ No newline at end of file diff --git a/manuscript/recipes/munin.md b/manuscript/recipes/munin.md index a0cdf39..768fd52 100644 --- a/manuscript/recipes/munin.md +++ b/manuscript/recipes/munin.md @@ -72,8 +72,7 @@ SNMP_NODES="router1:10.0.0.254:9999" Create a docker swarm config file in docker-compose syntax (v3), something like this: -!!! tip -I share (_with my [sponsors](https://github.com/sponsors/funkypenguin)_) a private "_premix_" git repository, which includes necessary docker-compose and env files for all published recipes. This means that sponsors can launch any recipe with just a `git pull` and a `docker stack deploy` 👍 +--8<-- "premix-cta.md" ``` version: '3' @@ -131,6 +130,6 @@ Launch the Munin stack by running `docker stack deploy munin -c index* and do a complete rescan (it will take a while, depending on your collection size) -1. Once it is running, you probably will want to launch an scan to index the originals photos. Go to *library -> index* and do a complete rescan (it will take a while, depending on your collection size) \ No newline at end of file +--8<-- "recipe-footer.md" \ No newline at end of file diff --git a/manuscript/recipes/phpipam.md b/manuscript/recipes/phpipam.md index de963b3..f974de3 100644 --- a/manuscript/recipes/phpipam.md +++ b/manuscript/recipes/phpipam.md @@ -107,8 +107,7 @@ server { Create a docker swarm config file in docker-compose syntax (v3), something like this: -!!! tip -I share (_with my [sponsors](https://github.com/sponsors/funkypenguin)_) a private "_premix_" git repository, which includes necessary docker-compose and env files for all published recipes. This means that sponsors can launch any recipe with just a `git pull` and a `docker stack deploy` 👍 +--8<-- "premix-cta.md" ``` version: '3' @@ -202,6 +201,6 @@ Launch the phpIPAM stack by running `docker stack deploy phpipam -c ``` - -Log into your new instance at https://**YOUR-FQDN**, and follow the wizard to complete the setup. diff --git a/manuscript/recipes/plex.md b/manuscript/recipes/plex.md index 04978be..1344d46 100644 --- a/manuscript/recipes/plex.md +++ b/manuscript/recipes/plex.md @@ -37,9 +37,7 @@ PGID=42 Create a docker swarm config file in docker-compose syntax (v3), something like this: -!!! tip - I share (_with my [sponsors](https://github.com/sponsors/funkypenguin)_) a private "_premix_" git repository, which includes necessary docker-compose and env files for all published recipes. This means that sponsors can launch any recipe with just a ```git pull``` and a ```docker stack deploy``` 👍 - +--8<-- "premix-cta.md" ``` version: "3.0" @@ -94,7 +92,7 @@ Launch the Plex stack by running ```docker stack deploy plex -c Create a docker swarm config file in docker-compose syntax (v3) in `/var/data/restic/restic.yml` , something like this: -!!! tip - I share (_with my [sponsors](https://github.com/sponsors/funkypenguin)_) a private "_premix_" git repository, which includes necessary docker-compose and env files for all published recipes. This means that sponsors can launch any recipe with just a ```git pull``` and a ```docker stack deploy``` 👍 +--8<-- "premix-cta.md" ``` version: "3.2" @@ -204,8 +203,8 @@ root@raphael:~# The example above restores the **entire** `/var/data` folder (*minus any exclusions*). To restore just a subset of data, add the `-i ` argument, i.e. `-i plex` -## Chef's Notes 📓 +[^1]: The `/var/data/restic/restic.exclude` exists to provide you with a way to exclude data you don't care to backup. +[^2]: A recent benchmark of various backup tools, including Restic, can be found [here](https://forum.duplicati.com/t/big-comparison-borg-vs-restic-vs-arq-5-vs-duplicacy-vs-duplicati/9952). +[^3]: A paid-for UI for Restic can be found [here](https://forum.restic.net/t/web-ui-for-restic/667/26). -1. The `/var/data/restic/restic.exclude` exists to provide you with a way to exclude data you don't care to backup. -2. A recent benchmark of various backup tools, including Restic, can be found [here](https://forum.duplicati.com/t/big-comparison-borg-vs-restic-vs-arq-5-vs-duplicacy-vs-duplicati/9952). -3. A paid-for UI for Restic can be found [here](https://forum.restic.net/t/web-ui-for-restic/667/26). \ No newline at end of file +--8<-- "recipe-footer.md" \ No newline at end of file diff --git a/manuscript/recipes/swarmprom.md b/manuscript/recipes/swarmprom.md index 3097a88..b4e06ba 100644 --- a/manuscript/recipes/swarmprom.md +++ b/manuscript/recipes/swarmprom.md @@ -95,12 +95,10 @@ GF_SECURITY_ADMIN_PASSWORD=ilovemybatmanunderpants Create a docker swarm config file in docker-compose syntax (v3), based on the original swarmprom [docker-compose.yml](https://github.com/stefanprodan/swarmprom/blob/master/docker-compose.yml) file +--8<-- "premix-cta.md" ???+ note "This example is 274 lines long. Click here to collapse it for better readability" - !!! tip - I share (_with my [sponsors](https://github.com/sponsors/funkypenguin)_) a private "_premix_" git repository, which includes necessary docker-compose and env files for all published recipes. This means that sponsors can launch any recipe with just a ```git pull``` and a ```docker stack deploy``` 👍 - ``` version: "3.3" @@ -391,6 +389,6 @@ Launch the Swarm stack by running ```docker stack deploy swarmprom -c " -4. I "git add" my changes, commit, and push the branch -5. I create a merge request in the branch to track merging into produced -6. I set request to merge when pipeline succeeds diff --git a/mkdocs-material/partials/disqus.html b/mkdocs-material/partials/disqus.html deleted file mode 100644 index 12100ae..0000000 --- a/mkdocs-material/partials/disqus.html +++ /dev/null @@ -1,12 +0,0 @@ -
    - - diff --git a/mkdocs.yml b/mkdocs.yml index 4182ba9..1f6fca0 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -190,7 +190,7 @@ nav: theme: name: 'material' custom_dir: 'overrides' - disqus: 'geeks-cookbook' + # disqus: 'geeks-cookbook' logo: 'images/site-logo.svg' favicon: 'images/site-logo.svg' features: diff --git a/overrides/main.html b/overrides/main.html index 1bef24c..401df30 100644 --- a/overrides/main.html +++ b/overrides/main.html @@ -1,20 +1,5 @@ {% extends "base.html" %} -{% block disqus %} -
    - - -{% endblock %} - {% block announce %}
    diff --git a/scripts/build.py b/scripts/build.py index 2fc509f..4f6c45b 100644 --- a/scripts/build.py +++ b/scripts/build.py @@ -87,26 +87,27 @@ class Filters: return content - def footer(self, content, context): - """Appends a footer to the end of every manuscript file""" - if not hasattr(self, "footer_content"): - self.footer_path = os.path.join( - os.path.dirname(__file__), "recipe-footer.md") - footer_file = open(self.footer_path) - self.footer_content = footer_file.read() - self.footer_search = self.footer_content.split("\n")[ - 0].replace("#", "") - footer_file.close() - if "index.md" in context['file_name']: - log(LOG.DEBUG, "footer", - f"ignoring {context['file_name']} as it contains index.md") - return content + # disabled for now because we're using snippets + # def footer(self, content, context): + # """Appends a footer to the end of every manuscript file""" + # if not hasattr(self, "footer_content"): + # self.footer_path = os.path.join( + # os.path.dirname(__file__), "recipe-footer.md") + # footer_file = open(self.footer_path) + # self.footer_content = footer_file.read() + # self.footer_search = self.footer_content.split("\n")[ + # 0].replace("#", "") + # footer_file.close() + # if "index.md" in context['file_name']: + # log(LOG.DEBUG, "footer", + # f"ignoring {context['file_name']} as it contains index.md") + # return content - if self.footer_search in content: - log(LOG.WARN, "footer", - f"Footer is hard-coded in {context['file_name']}") - return content - return content + "\n" + self.footer_content + # if self.footer_search in content: + # log(LOG.WARN, "footer", + # f"Footer is hard-coded in {context['file_name']}") + # return content + # return content + "\n" + self.footer_content def flattern(obj): diff --git a/scripts/recipe-footer.md b/scripts/recipe-footer.md index eae6efe..bad2c50 100644 --- a/scripts/recipe-footer.md +++ b/scripts/recipe-footer.md @@ -1,4 +1,8 @@ -## Tip your waiter (sponsor me) 👏 +///Footnotes Go Here/// + +Updated + +## Tip your waiter (sponsor) 👏 Did you receive excellent service? Want to make your waiter happy? (_..and support development of current and future recipes!_) Sponsor me on [Github][github_sponsor] / [Patreon][patreon], or see the [support](/support/) page for more (_free or paid)_ ways to say thank you! 👏