Hi! I wanted to share a project I’ve been working on that lets you set up a huge variety of applications really quickly and painlessly. For example, instead of setting up and configuring a large docker compose for a complicated application like Immich, this playbook lets you simply write:

immich_enabled: true

And it will orchestrate all the containers, networks, directories, etc for you with reasonable defaults. All of which can be overwritten, for example to enable extra features like hardware acceleration:

immich_hardware_acceleration: "-cuda"

Or to automatically get a letsencrypt cert and expose the application on a subdomain to the outside world:

immich_available_externally: true

Included in the playbook is a ton of complicated applications, like Paperless, Meelo, TTRSS, Dawarich, as well as common self-hosted apps like Jellyfin, Home Assistant, Syncthing, Navidrome, Grafana, and a whole lot more (totaling 116 right now!).

It also comes with scripts and tests to help add your own applications (ansible roles) and ensure they work properly

I’ve been using this project myself for awhile, including to assist with moving from one homelab computer to another (point the playbook to the new address, run it to install everything, and restore a backup from the previous computer for data), and I hope it can help someone else build up their homelab without sinking too much time into setting things up

Here’s the repository: https://github.com/Dylancyclone/ansible-homelab-orchestration

And the documentation (that I’m really proud of :D): https://dylancyclone.github.io/ansible-homelab-orchestration/

  • exu@feditown.com
    link
    fedilink
    English
    arrow-up
    8
    ·
    1 day ago

    You can use host_vars to set different variables per host. You’d still run the same playbook against both hosts, but each has different services activated.

    1. Make the folder host_vars in the repo root
    2. Make subfolders for every host with their hostname
    3. Enable services you want by writing the variables into a yaml file for your host (any file name as long as it ends with .yml
    4. Write an Ansible inventory for your hosts
    5. Run the playbook with your inventory

    Slightly fancier would be using group_vars instead, you can add a host to multiple groups. Then deploying the same services on a new hosts would simply be adding it to the group