Back in the day it was nice, apt get update && apt get upgrade and you were done.

But today every tool/service has it’s own way to being installed and updated:

  • docker:latest
  • docker:v1.2.3
  • custom script
  • git checkout v1.2.3
  • same but with custom migration commands afterwards
  • custom commands change from release to release
  • expect to do update as a specific user
  • update nginx config
  • update own default config and service has dependencies on the config changes
  • expect new versions of tools
  • etc.

I selfhost around 20 services like PieFed, Mastodon, PeerTube, Paperless-ngx, Immich, open-webui, Grafana, etc. And all of them have some dependencies which need to be updated too.

And nowadays you can’t really keep running on an older version especially when it’s internet facing.

So anyway, what are your strategies how to keep sanity while keeping all your self hosted services up to date?

  • ThunderComplex@lemmy.today
    link
    fedilink
    English
    arrow-up
    2
    ·
    10 hours ago

    Since all my services are dockerized I just pull new images sporadically. But I think I should invest some time into finding automatic update reminders, especially when I have to hear about critical security updates from some random person on mastodon.

  • corsicanguppy@lemmy.ca
    link
    fedilink
    English
    arrow-up
    2
    ·
    18 hours ago
    1. Avoid anything with bad supply chains that fail iso27002
    2. Yum via cron
    3. Huh. That’s all of it.
  • totoro@slrpnk.net
    link
    fedilink
    English
    arrow-up
    14
    ·
    1 day ago

    Wow, that sounds like a nightmare. Here’s my workflow:

    nix flake update
    nixos-rebuild switch
    

    That gives me an atomic, rollbackable update of every service running on the machine.

  • FlowerFan@piefed.blahaj.zone
    link
    fedilink
    English
    arrow-up
    2
    ·
    18 hours ago

    Arcane docker server checks for updates, notifies me when they’re available

    for security relevant stuff I just get notifications of new github releases

  • Fedegenerate@fedinsfw.app
    link
    fedilink
    English
    arrow-up
    3
    ·
    edit-2
    21 hours ago

    Fine, I’ll be the low bar.

    Proxmox, I just use the GUI to update

    I use community-scripts almost exclusively. Community-scripts cron lxc updater does the heavy lifting. pct enter [lxc]

    update

    does a bunch of work too.

    For Docker, I use a couple lxcs with Dockge on it, the “update” button takes me most of the rest of the way.

    Finally, I have a couple remote machines [diet-pi]. I haven’t figured out updating over tailscale yet, so I just go round semi frequently for the apt update && apt upgrade -y

    VMs get the apt update && apt upgrade -y too. I keep a bare bones mint VM as a virtual laptop, as I don’t have one. I’ll do what I need to do and if I had to install software I’ll just nuke the VM and go again from the bare bones template.

  • mlfh@lm.mlfh.org
    link
    fedilink
    English
    arrow-up
    25
    ·
    1 day ago

    Everything I run, I deploy and manage with ansible.

    When I’m building out the role/playbook for a new service, I make sure to build in any special upgrade tasks it might have and tag them. When it’s time to run infrastructure-wide updates, I can run my single upgrade playbook and pull in the upgrade tasks for everything everywhere - new packages, container images, git releases, and all the service restart steps to load them.

    It’s more work at the beginning to set the role/playbook up properly, but it makes maintaining everything so much nicer (which I think is vital to keep it all fun and manageable).

    • Jeena@piefed.jeena.netOP
      link
      fedilink
      English
      arrow-up
      7
      ·
      1 day ago

      Yeah, For some reason I didn’t think of ansible even though I use it at work regularly. Thanks for pointing it out!

      • SayCyberOnceMore@feddit.uk
        link
        fedilink
        English
        arrow-up
        5
        ·
        1 day ago

        Just a word of caution…

        I try to upgrade 1 (of a similar group) manually first to check it’a not foobarred after the update, then crack on with the rest. Testing a restore is 1 thing, but restoring the whole system…?

  • vegetaaaaaaa@lemmy.world
    link
    fedilink
    English
    arrow-up
    4
    ·
    edit-2
    1 day ago
    • use APT repositories when possible -> then unattended-upgrades
    • For OCI images that do not provide tagged releases (looking at you searxng…), podman auto-update
    • for everything else, subscribe to releases RSS feed, read release notes when they come out, check for breaking changes and possibly interesting stuff, update version in ansible playbook, deploy ansible playbook
  • quick_snail@feddit.nl
    link
    fedilink
    English
    arrow-up
    1
    ·
    edit-2
    18 hours ago

    Unattended upgrades 11 months out of the year.

    Very attended apt upgrades 2 weeks out of the year.

    • BlackEco@lemmy.blackeco.com
      link
      fedilink
      English
      arrow-up
      2
      ·
      1 day ago

      I guess auto merge isn’t enabled, since there’s no way to check if an update doesn’t break your deployment beforehand, am I right?

        • BlackEco@lemmy.blackeco.com
          link
          fedilink
          English
          arrow-up
          2
          ·
          1 day ago

          Yes, but usually when you use automerge you should have set up a CI to make sure new versions don’t break your software or deployment. How are you supposed to do that in a self-hosting environment?

          • tofu@lemmy.nocturnal.garden
            link
            fedilink
            English
            arrow-up
            1
            ·
            1 day ago

            Ideally, you have at least two systems, test updates in the dev system and only then allow it in prod. So no auto merge in prod in this case or somehow have it check if dev worked.

            Seeing which services are usually fine to update without intervening and tuning your renovate config to it should be sufficient for homelab imho.

            Given that most people are running :latest and just yolo the updates with watchtower or not automated at all, some granular control with renovate is already a big improvement.

  • Eldaroth@lemmy.world
    link
    fedilink
    English
    arrow-up
    2
    ·
    23 hours ago

    I run most of my services in containers with Podman Quadlets. One of them is Forgejo on which I have repos for all my quadlet (systemd) files and use renovate to update the image tags. Renovate creates PRs and can also show you release notes for the image it wants you to update to.

    I currently check the PRs manually as well as pulling the latest git commits on my server. But this could also be further automated to one’s liking.

  • conrad82@lemmy.world
    link
    fedilink
    English
    arrow-up
    6
    ·
    1 day ago

    I do it manually. update the container version and docker pull and run

    I have reduced the number of containers to ones i actually use, so it is manageable.

    i use v2 instead of v2.1.0 docker container tags if the provider don’t make too many bleeding edge changes between updates

    • Jeena@piefed.jeena.netOP
      link
      fedilink
      English
      arrow-up
      5
      ·
      edit-2
      1 day ago

      Because you point to :latest and everything is dockerized and on one machine? How does it know when it’s time to upgrade?

      • Overspark@piefed.social
        link
        fedilink
        English
        arrow-up
        6
        ·
        1 day ago

        Yeah only for :latest containers, that’s true. It automatically runs a daily service to check whether there are newer images available. You can turn it off per container if you don’t want it.

        One of the nice things about it is that I have containers running under several different users (for security reasons) so that saves me a lot of effort switching to all these users all the time.

          • prenatal_confusion@feddit.org
            link
            fedilink
            English
            arrow-up
            8
            ·
            edit-2
            1 day ago

            Depends on what you want to do. For production with sensitive data, yes it is. For my ytdl and jellyfin? Perfectly fine.

          • Overspark@piefed.social
            link
            fedilink
            English
            arrow-up
            5
            ·
            1 day ago

            Depends. There are a few things I update by hand, but as long as you have proper backups it’s generally safer to run the latest versions of things automatically if you don’t mind the possibility of breakage (which is very rare in my experience). This is in the context of self-hosting of course, not a business environment.