Okay, let me start by saying that I really do love Home Assistant. I believe that it is a fantastic piece of software, with very dedicated developers that are far more talented than I. Although, that being said, I strongly disagree with a number of their design choices.
My most recent problem has been trying to put Home Assistant behind a reverse proxy with a subpath. The Home Assistant developers flat out refuse any contribution that adds support for this. Supposedly, the frontend has hard-coded paths for some views, to me this doesn’t sound like a good practice to begin with – that being said, I mostly program in Go these days (so I’m unsure if this is something that is pretty common in some frameworks or languages). The official solution is to use a subdomain, which I can’t do – I’m trying to route all services through a Tailscale Funnel (which only provides a single domain; I doubt that Tailscale Funnels where ever designed for this purpose, but I’m trying to completely remove Cloudflare Tunnels for my selfhosted services).
The other major problem I’ve ran into, is that HAOS assumes that you would have no need to run any other Docker services other than those that are add-ons or Home Assistant itself. Which, I’m sorry (not really), Home Assistant add-ons are an absolute pain to deal with! Sure, when they work, they’re supper simple, but having to write an add-on for whenever I just want to spin up a single Docker container is not going to work for me.
Now, some smaller issues I’ve had:
- There’s no way to change the default authentication providers. I host for my (non-techie) family, they’re not going to know what the difference between local authentication and command-line authentication is, just that one works and the other doesn’t.
- Everything that is “advanced” requires a workaround. Like mounting external hard drives and sharing it with containers in HAOS requires you to setup the Samba add-on, add the network drive, and then you can use it within containers.
Again, I still really love Home Assistant, it’s just getting to a point where things are starting to feel hacky or not thought out all the way. I’ve considered other self-hosted automation software, but there really isn’t any other good alternative (unless you want to be using HomeKit). Also, I’m a programmer first, and far away from being a self-hosting pro (so let me know if I’ve missed any crucial details that completely flip my perspective on it’s head).
If you got to the end of this thanks for reading my rant, you’re awesome.
Have you considered not using the Home Assistant OS? You don’t need to run it to use Home Assistant. You can instead set your host up with some other OS, like Debian, and then run Home Assistant in a docker container (or containers, plural) and run any other containers you want.
I’m not doing this myself so can’t speak to its limitations, but from what I’ve heard, if you’re familiar with Docker then it’s pretty straightforward.
A lot of apps use hard coded paths, so using a subdomain per app makes it much easier to use them all. Traefik has middleware, including stripPrefix, which allow you to strip a path prefix before forwarding the path to the app, though - have you tried that approach?
Strip prefix won’t work if the frontend expects to find paths at absolute locations. You would need to patch the html, css and js on the fly, which is somewhere between ugly and (almost) impossible.
I would also suggest to simply use custom (sub) domains. Especially in your intranet you can have whatever domains you want.
Strip prefix won’t work if the frontend expects to find paths at absolute locations. You would need to patch the html, css and js on the fly, which is somewhere between ugly and (almost) impossible.
This is what I’ve seen would be the only “feasible” way of getting HA to work behind a subpath, in my opinion this only works for very small application though (not something as complex as Home Assistant).
I’m (currently) on Raspberry Pi OS (as I need something that “just works”). Home Assistant is running in Docker like everything else.
A lot of apps use hard coded paths, so using a subdomain per app makes it much easier to use them all. Traefik has middleware, including stripPrefix, which allow you to strip a path prefix before forwarding the path to the app, though - have you tried that approach?
I should’ve mentioned this, but I’m using Nginx (I really enjoy the simplicity of just having to add a section to a file whenever I want to add something). Before running HAOS I was running RPIOS again and used Traefik, it worked (but felt like a lot more work to setup than just a plain Nginx setup).
Edit: I forgot to mention, but there are things like stripPrefix
for Nginx, I’m going to look into them. Although, this is what I meant, when you start to do things that are “advanced” with Home Assistant they turn into “hacks,” and the barrier for advanced things feels a lot lower than with other self-hosted services (and I get that Home Assistant is very complex under the hood, it’s just frustrating).
This was going to be my suggestion. Just run home assistant as a Docker container, problem solved!
You can’t use add-ons when running HA as a docker container, which basically lobotomizes it.
You don’t get the direct integration then though, as far as I’m aware there’s no way to manually setup an addon
-
No backup solutions besides manual backing up and then setting up baremetal backing up
-
no configuration editor
-
HACS works, but no custom addons
-
manual configuration of esphome/nodered/mosquitto (I prefer this though)
I prefer docker because it is comfortable for me and I run all my services on one server, but it is indeed a bit less easy.
Yes and no. If you want a really simple setup HAOS add-ons are amazing, but as soon as you want to run something someone else hasn’t created a container for you’re stuck doing extra work than just writing a Dockerfile
or docker-compose
. Plus, you can’t setup networks between them and (as mentioned in the original post) sharing drives can be hackish as well.
The (grim) reason had I tried HAOS was because of the promise of something really simple that my family could figure out if something ever happened to me.
I think your missing the point of HAOS, it’s an appliance. You don’t manage it like a normal self host system.
Once you treat it as an appliance, it’s great. Also there is a portainer agent you can run that will connect to a portainer instance.
As for your tunnel issues, maybe the tunnel thing is your biggest issue. I run all my self host stuff on its own subdomain, if I want to route something home I use the site to site VPN I have. Even a cheap ovh vps could be a way to run stuff on subdomains
Require a subdinain should not be mandatory in 2024.
Sub paths should be such a basic feature that’s ridiculous devs don’t even take that into consideration.
Why? Because a software requiring absolute paths is as old and obsolete as an msdos program, and the only real reason it happens today is… Bad design choices or limited frameworks.
Requiring a full URL will be more of security thing I would guess, as some users put HA on the internet and it could have access to open doors.
Also I have tried things on sub paths and it got very complicated to know where a service was, a domain keeps things easy to setup and manage. As I run internet facing services for my day job, I have to look at both security and easy of maintenance when setting things up.
I would say that if you need a path over domain, its a skill issue and you need to find a better way of working.
Not really… Your attitude is the problem.
Sub paths are simpler to deploy: need only one certificate, need only one subdomain.
In any case you need reverse proxy so security is not the matter here.
Your use cases are not mine and both ways should always be possible.
You never need a subpath over a subdomain, nor viceversa, it is (or should) always be a choice.
The other major problem I’ve ran into, is that HAOS assumes that you would have no need to run any other Docker services other than those that are add-ons or Home Assistant itself.
With the caveat that I can tell just from your post that I certainly know way less about this stuff than you do, HAOS’ assumption seems pretty reasonable to me. Isn’t the point of using HAOS (as opposed to installing HA some other way) that you’d be either (a) using it by itself on bare-metal hardware, or (b) using it in a VM? I’m running HAOS and Docker in two different VMs on Proxmox, and it’s working fine for me so far.
(The first complaint you mentioned, about reverse proxies and subpaths, sounds a lot more legitimate. In fact, that’s something I’d like to learn more about because I haven’t yet figured out how to make my HA install – or anything, for that matter – accessible outside my LAN and “Tailscale Funnel” sounds intriguing.)
I’m running HAOS and Docker in two different VMs on Proxmox, and it’s working fine for me so far.
So, I think I’ve mentioned this in another reply, but, I have a very minimal setup. It’s a RPi4 as the main device, Starlink as the ISP (CGNAT; no port-forwarding), and now Tailscale as the only way to access outside of my LAN. I agree that HAOS meets it’s primary job of running Home Assistant. Although, I don’t have the option to run Proxmox (at least I’ve never seen anyone run Proxmox on an RPi) and also have a massive music library (and soon a large movie and TV show collection, once I rip all of those DVDs) so I really only need to run a few things:
- A dashboard to make accessing the services easier for the family.
- A reverse proxy to handle subpaths (this used to be Cloudflare Tunnels with subdomains and NPM with subpaths, now it’s just Nginx).
- Tailscale (to expose services and run a VPN to get past the CGNAT).
- Jellyfin (for TV shows and movies).
- A forked version of Goinc (I have a fork with LDAP support, there’s an open pull request for it, but it needs a little extra work; this wasn’t ran on HA).
- Something to run LDAP authentication.
- Some Home Automation software (was Home Assistant, I migth switch to something else).
Edit: I also run Vaultwarden.
I’ve really scaled things back since previous self-hosting journeys, and when I first started with HAOS there was even less going on, and really I need things to just work. I’m learning now that my mistake was assuming that HAOS add-ons are supposed to behave just like a Docker container, they’re not. I’ve learned the hard way, but, I still don’t love HA’s attitude towards something that are deemed “complex,” such as sub-paths and alternative authentication providers.
I’m on RPi OS now.
I can’t grasp your use case I feel, pretty much all your complaints seem… odd. To me at least.
First subdomain. I think HA is completely right that proxy with a subpath is basically an anti-pattern that just makes things worse for you and is always a bad idea (with very few exceptions).
As for your tunnel I don’t know how you’ve set it up and I haven’t used tailscale but them only allowing one domain sounds like a very arbitrary limit, is it something that costs money to add? I use NetBird which I selfhost on my VPS and from there tunnel into my much beefier home setup.
Then docker in HAOS. The proper way I feel of running HA is for sure HAOS, and also running it in its own VM / or on dedicated hardware. This because you will likely need to couple additional hardware like a stick providing support for more protocols like ZigBee or Matter. It really isn’t a good solution for running all your self hosted stuff, and wasn’t ever intended to be. Running Plex in HA for instance is just a plain bad idea, even if it can be done. As such the need for an external drive seems strange as well. If you need to interact with storage you should set up a NAS and share over SAMBA. All this to say that HA should be one VM/Device, your docker environment another VM.
As for authentication there are 10k plus contributors to Home Assistant yearly but very few bother to make authentication more streamlined. I would’ve loved OpenID/OAuth2 support natively but there are ways to do so with custom components and in the end I quite strongly feel that if the end-users of your smarthome setup (i.e. the wife and kids) need to login to Home Assistant then you’ve probably got more work to do. Remote controls which interact with HA handle the vast majority of manual interaction and I’ve dabbled with self-hosted voice interfaces for the more complex operations.
Sorry if this came across as writing you on the nose, that’s not my intention. I just suspect you’re making things harder for yourself and maybe have a strange idea around how to selfhost in general?
You make some good points, I’ve said a few times now that I mistook Home Assistant add-ons as traditional Docker containers (which I’ve learned the hard way is flat out wrong, you know what they say about assumptions).
First subdomain. I think HA is completely right that proxy with a subpath is basically an anti-pattern that just makes things worse for you and is always a bad idea (with very few exceptions).
I don’t agree with the comment replying about how developers are lazy. That being said, I also wouldn’t call a subpath an anti-pattern, it’s not uncommon and I wouldn’t say that it is always a bad idea (they have some pros and cons on subdomains and it’s what my setup calls for).
As for your tunnel I don’t know how you’ve set it up and I haven’t used tailscale but them only allowing one domain sounds like a very arbitrary limit, is it something that costs money to add? I use NetBird which I selfhost on my VPS and from there tunnel into my much beefier home setup.
There’s an open feature request for subdomains, but it hasn’t really gone anywhere. I’m assuming that it must be how they handle SSL certificates.
As for authentication there are 10k plus contributors to Home Assistant yearly but very few bother to make authentication more streamlined. I would’ve loved OpenID/OAuth2 support natively but there are ways to do so with custom components and in the end I quite strongly feel that if the end-users of your smarthome setup (i.e. the wife and kids) need to login to Home Assistant then you’ve probably got more work to do. Remote controls which interact with HA handle the vast majority of manual interaction and I’ve dabbled with self-hosted voice interfaces for the more complex operations.
Yeah, I’ve seen the idea that Home Assistant shouldn’t be the part you interact with several times, but I don’t really know of any better things to handle this. None of us really love voice controls and I’ve toyed around with Google Home (but I think it’s absolute garbage and self-host to get away from companies like Google).
I just suspect you’re making things harder for yourself and maybe have a strange idea around how to selfhost in general?
Not my ideas that are strange, I’d love to have a traditional setup. I’ve mentioned it a few times in other replies, I just don’t want to be the “just look at my other replies” person, so here’s whats going on: Starlink is my ISP (CGNAT; I can’t port-forward), Tailscale is now my only way of accessing things off of my LAN (I didn’t mind Cloudflare Tunnels, but Cloudflare scares me and Jellyfin is a pretty important thing and supposedly if you want to stream video you’re not allowed/supposed to use Tunnels), my only device is an RPi4 (I’ve tried other devices, but I really love the simplicity of the Pi – and also don’t have many other devices that would work that good for self-hosting).
Again, I’d love to have a “normal” ISP (we live in the middle of no where) that lets me port-forward and is nice and something other than a Pi to host on, but this is what I’m stuck with.
Sorry if this came across as writing you on the nose, that’s not my intention.
It’s all good I get where you’re coming from, and I’m sure you understand what’s going on for me.
I think a VPS and moving to NetBird self hosted would be the simplest solution for you. $5 per month gives you a range of options and you can go even lower with things like yearly subscriptions. That way you get around the subdomain issue, you get a proper tunnel and can proxy whatever traffic you want into your home.
As for control scheme for your home automation you’ll need to come up with something that fits you but I strongly advise against letting users into Home Assistant. You could build a simple web interface that interacts via API with HA, through Node-Red is super simple if it seems daunting to build the API.
If a RPi 4 is what you’ve got and that’s it then I guess you’re kinda stuck for the time being. Home Assistant is often quite lightweight if you’re not doing something crazy so it runs well on even a RPi 3, same with NAS software for home use, it too works fine on a 3. If SBC is your style my recommendation is to setup an alert on whatever second hand sites operate in your area and pick up a cheap one to allow you to separate things and make the setup simpler.
First subdomain. I think HA is completely right that proxy with a subpath is basically an anti-pattern that just makes things worse for you and is always a bad idea (with very few exceptions).
It’s only an “anti pattern” because app developers are, on the whole, lazy bastards that start out hard coding stuff and then get discouraged at the amount of work needed to fix things after the fact.
I should know: I am one of these people.
It’s crap, it’s best to roll with the punches and use a sub domain.
That’s one part of it, but the other is that there’s no proper way to ensure you won’t cause issues down the line and it makes the configuration unclean and harder to maintain.
It also makes your setup dependent on seemingly unrelated things. Like the certificate for the domain which is some completely different applications problem but will break your Home Assistant setup all the same. That dependency issue can be a nightmare to troubleshoot in some instances, especially when it comes to stuff like authentication. Try doing SSO towards two different applications running on different subpaths on the same domain…
I second the complaint about subpaths. I have all my services on a single domain, except for HA. It’s for security by obscurity, when you issue a certificate for a subdomain you start getting malicious traffic probing for vulnerabilities almost immediately. I don’t have this problems for services with non-obvious subpaths.
I can’t understand the stubbornness of developers to accept patches for fixing this problem.
LetsEncrypt can hand out wildcard certs if you are able to add TXT records to your domain, if that helps any.
I realised this was a stupid comment that doesn’t help any.