This is not strictly self-hosted but another approach I which is similar in philosophy, and which I actually prefer in many cases: hosted services.
--
So about 5 years ago I got fed up with having to update nextcould (or was it owncloud? I don't recall) so I was looking for a hosting service.
Initially I expected this to be a bit of a burden on my budget (especially if one scales with users), but to my surprise, I found OwnCube (owncube.de), where the price was about EUR 18 per year. Great deal. So I went ahead, set it up, tested for a while and eventually ended up configuring my parents' phones to use it for storing contacts & photos instead of Google.
To be clear, I did not use nextcloud myself directly. I had been already paying for fastmail, and it's perfect, except it's single-user, so for myself I kept using fastmail, just synchronizing fastmail (using vdirsyncer) and owncube nextcloud just to have a backup and also alternate interface.
This was working perfectly, until one day, it broke. It just stopped working (throwing some errors on sync). When I opened my web interface there was just this message, saying the nextcloud intrerface is not compatible with PHP 8.0+.
Seemed understandable: they updated the underlying server to PHP 8.0 but not the Nextcloud instance. Not superb, but fine, I'll just open a support ticket.
However, the ticket went nowhere. The support engineer kept repeating something that amounted to,
they needed to update PHP for security reasons,
the plan I subscribed to does not "come with auto-updates",
so --- I am responsible for updating the Nextclould instance, not them.
That does not make sense. I don't have access neither to the instance nor to the updater. All I can do now is stare at the message. Their admin UI did not provide anything, either (some "magic" button, URL or SSH access).
I pointed it out but they kept repeating themselves and eventually explained that I can either cancel the service and start it again (pay again!) -- which will give me updated NC but my data will be erased, or I can "book auto-updater" which meant I should pay one time fee about 70 EUR (more than double my yearly plan).
That does not make sense. I understand that I chose the basic mini plan, I can't expect anyone to jump over hoops. I also perfectly understand that any software can break because of version mismatch (after all, I'm a software engineer myself). But nobody knows how many times per year that can happen, so if I have to pay extra every time then my plan is unpredictable.
Sadly the ticket went nowhere, the support sounded like a broken record, with "pay X amount of EUR here" link. Seems like a definition of holding my data hostage.
Eventually I decided to cancel the service.
--
So the morale, I guess..?
Be careful to whom you entrust your data
Don't get too tempted with great prices. Make sure you understand what is (NOT) included.
DO keep your backups.
For me, vdirsyncer worked great; it is a bit pain to configure and troubleshoot but the architecture is great and it gives you opportunity to sync between independent accounts and even plain text files, which can be a life-saver. (Even sync with google worked.)
Consider having more instances.
Eg. you could pay one and self-host one, use the paid one as a primary access point (public internet, usually much easier), and the self-hosted one as a backup.
Alternatively, one could even share a pool of instances with friends, split the bill and sync both ways.
(You will still need an almost-always-running cronjob somewhere to sync the data, if you're going with vdirsyncer approach.)
For various reasons, I bought a TB storage for backups there for extremely little money. It never worked properly and there were always files that could no longer be accessed, even though they were displayed. I have therefore quickly canceled again and no longer paid. Yesterday evening I tested the login again (4 years after cancellation) and it still works and I can upload files. They seem to have neither technology nor their customer accounting under control. I would never buy/host anything there again.