🐋 Ansible playbook which helps you host various FOSS services as Docker containers on your own server
  • Python 42.8%
  • Just 39.3%
  • Shell 17.1%
  • Dockerfile 0.8%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Suguru Hirahara f08d30cc0c
Update headscale.md: get the documentation transferred to the role's repository
Signed-off-by: Suguru Hirahara <did🔑z6MkvVZk1A3KBApWJXv2Ju4H14ErDfRGxh8zxdXSZ4vACDg5>
2026-09-30 08:10:50 -04:00
.github Update renovate.json 2026-09-30 03:40:13 -04:00
bin Restore Renovate runner and test runtime before upgrades 2026-09-12 10:33:03 +03:00
docs Update headscale.md: get the documentation transferred to the role's repository 2026-09-30 08:10:50 -04:00
examples Adjust empty lines on example vars.yml files 2026-04-13 22:16:53 +09:00
group_vars Initial work on optimization commands 2023-11-20 16:29:06 +02:00
LICENSES Add REUSE licensing metadata 2026-03-23 08:07:56 +02:00
roles/mash Catch the apisix_gateway_* -> apisix_* rename in playbook_migration 2026-08-25 15:42:58 +03:00
run Initial work on optimization commands 2023-11-20 16:29:06 +02:00
templates Update dependency sqlpage to v0.46.3-0 (#3466) 2026-09-30 06:55:25 +00:00
.ansible-lint Update pre-commit hook ansible/ansible-lint to v26.6.0 (#2940) 2026-07-01 14:26:06 +03:00
.codespellrc Enable pre-commit 2025-06-03 14:16:53 +03:00
.dockerignore add Dockerfile and CI config 2024-09-15 20:17:46 +03:00
.editorconfig Initial work on optimization commands 2023-11-20 16:29:06 +02:00
.gitignore Update .gitignore: add .ansible 2026-03-23 12:23:58 +09:00
.pre-commit-config.yaml Update pre-commit hook renovatebot/pre-commit-hooks to v44.116.0 2026-09-28 12:18:33 +00:00
.yamllint Enable ansible-lint in prek 2026-03-22 21:02:10 +02:00
AGENTS.md Focus changelog entries on playbook operator actions 2026-09-30 13:33:23 +03:00
ansible.cfg stdout_callback = yaml -> result_format = yaml 2025-03-15 08:08:41 +02:00
CHANGELOG.md Update Jellyfin role to 12.1 and document upgrade preparation (#3431) 2026-09-28 13:14:15 +00:00
CHANGELOG.md.license Add REUSE licensing metadata 2026-03-23 08:07:56 +02:00
Dockerfile Update alpine Docker tag to v3.24.2 2026-09-18 00:25:42 +00:00
Dockerfile.license Add REUSE licensing metadata 2026-03-23 08:07:56 +02:00
justfile justfile: set agru roles path explicitly 2026-09-25 10:30:17 +01:00
LICENSE Initial commit 2023-03-15 10:58:12 +02:00
mise.toml Update dependency prek to v0.5.4 2026-09-28 06:59:43 +00:00
README.md Update docs: replace "see" with "refer to" 2026-09-22 08:23:38 -04:00
README.md.license Add REUSE licensing metadata 2026-03-23 08:07:56 +02:00
releases.opml Update releases.opml: replace link to PdfDing project 2026-09-16 01:20:04 -04:00
REUSE.toml Add .ansible-lint 2026-04-18 15:20:14 +09:00
VERSIONS.md Replace "Docker Registry" with "Distribution Registry" 2026-08-26 03:12:18 -04:00

Support room on Matrix donate

Mother-of-All-Self-Hosting Ansible playbook

MASH (Mother-of-All-Self-Hosting) is an Ansible playbook that helps you self-host services as Docker containers on your own server.

By running services in containers, we can have a predictable and up-to-date setup, across multiple supported distros and CPU architectures.

This project allows self-hosting of a large number of services and will continue to grow by adding support for FOSS.

Installation (upgrades) and some maintenance tasks are automated using Ansible (refer to our Ansible guide).

Supported services

See the full list of supported services here.

Installation

To configure and install services on your own server, follow the README in the docs/ directory.

Changes

This playbook evolves over time, sometimes with backward-incompatible changes.

When updating the playbook, refer to the changelog to catch up with what's new.

Support

Why create such a mega playbook?

We used to maintain separate playbooks for various services (Matrix, Nextcloud, Gitea, Gitlab, Vaultwarden, PeerTube, ..). They re-used Ansible roles (for Postgres, Traefik, etc.), but were still hard to maintain due to the large duplication of effort.

Most of these playbooks hosted services which require a Postgres database, a Traefik reverse-proxy, a backup solution, etc. All of them needed to come with documentation, etc. All these things need to be created and kept up-to-date in each and every playbook.

Having to use a dedicated Ansible playbook for each and every piece of software means that you have to juggle many playbooks and make sure they don't conflict with one another when installing services on the same server. All these related playbooks interoperated nicely, but still required at least a bit of manual configuration to achieve this interoperability.

Using specialized Ansible playbooks also means that trying out new software is difficult. Despite the playbooks being similar (which eases the learning curve), each one is still a new git repository you need to clone and maintain, etc.

Furthermore, not all pieces of software are large enough to justify having their own dedicated Ansible playbook. They have no home, so no one uses them.

We're finding the need for a playbook which combines all of this into one, so that:

  • you don't need to juggle multiple Ansible playbooks
  • you can try out various services easily - a few lines of extra configuration and you're ready to go
  • small pieces of software (like Miniflux, powered by the miniflux Ansible role) which don't have their own playbook can finally find a home
  • you can use a single playbook with the quality you know and trust
  • shared services (like Postgres) are maintained in one single place
  • backups are made easy, because everything lives together (same base data path, same Postgres instance)

Having one large playbook with all services does not necessarily mean you need to host everything on the same server though. Feel free to use as many servers as you see fit. While containers provide some level of isolation, it's still better to not put all your eggs in one basket and create a single point of failure.

All of the aforementioned playbooks have been absorbed into this one. See the full list of supported services here. The Matrix playbook will remain separate, because it contains a huge number of components and will likely grow even more. It deserves to stand on its own.

What's with the name?

Our goal is to create a large Ansible playbook which can be your all-in-one-toolkit for self-hosting services in a clean and reliable way.

We like the MASH acronym, and mashing is popular in the alcohol brewing industry. The result of all that mash is an enjoyable (at least by some) product.

Then, there's mixing and mashing stuff, which is also what this Ansible playbook is all about - you can mix and mash various pieces of software to create the self-hosted stack of your dreams!