For exposing stuff publicly? Yeah that's possible in the free tier. Just not for things that use websockets (like headscale as I mentioned) or non-HTTP things (XMPP server, TURN for calls etc)
Tailscale or Netbird is a good approach. They both have a SaaS control plane where you can sign devices up, and you'll connect to your home server via its VPN-internal IP.
Note that headscale or netbird cannot be hosted via Cloudflare Tunnels, as they require websockets support and/or UDP for STUN. You may just wanna rent a VPS for that.
For hosting a website publicly, you may employ reverse proxies on the Tailscale/Netbird nodes like my setup
Matrix, and I recommend selfhosting Continuwuity as it is lightweight and easy to spin up. Your other option could be XMPP with Snikket or proper Prosody.
Though do you have any particular features you wanna bring over from Facebook Messenger?
Pihole would be easy for a RPi 4. I'd also consider AdGuard Home which does the same thing, but has out-of-the-box support for encrypted upstream resolvers. I eventually moved on to Technitium for more advanced use cases (hosting my own domains, native config syncing between nodes), albeit it can use a bit more RAM.
Hi, as someone running their Matrix server on the same ware (using Continuwuity)I have some thoughts:
- The bulk of the load is in federation with other homeservers. If you only run it in non-federated mode the resource usage would be minimal like a simple REST API server.
- If you do enable federation on such a low powered device, consider performance tuning it. DNS tuning is the most essential one, and then you should allow it to use some more RAM than normal (increasing cache capacity)
- Also if you enable federation, expect it to be the software with the most resource impact. I think usually Jellyfin and Navidrome only uses CPU when you're streaming something, but Matrix may do a lot more background work because federation and so on.
- Calls are handled by a separate LiveKit SFU, which uses WebRTC for most of its operations rather than HTTPS. So you cannot expose it using Cloudflare Tunnels, and you may run into issues forwarding/routing a large number of UDP ports as well.
- I usually recommend renting a VPS for Livekit instead for simpler config and networking. But if you somehow get it working on the Pi itself as well it'd be great to know.
- I used mautrix-whatsapp a long time ago for the bridge. It was good enough, but do note that it is just a stopgap solution to prevent social isolation. Its better to eventually move people to free protocols.
I'd also like to rehash what the other commenter say in that you'd get much more juice out of a mini PC or some other non-embedded devices. This is for all your software anyhow.
And yes, Continuwuity can run in docker compose. There's a few example files for it on the site, feel free to check it out and ask in the support room.
I'd prefer Adguard Home. Does the same thing but also supports encrypted DoT/DoQ/DoH upstreams. And the UI looks a bit neater for me
Since nobody mentioned, I recommend https://desec.io/ as the DNS provider. Has a good REST API to update records, also provides a dedyn.io dynamic domain, and runs as a nonprofit. I think ddclient will also support it natively in the next release as well.
The solution of renting a VPS also works but usually incurs some cost. You might also want to look into Cloudflare Tunnels
Hi all, thanks again for the valuable insights, I really appreciate your comments. I realized I've overlooked a few topologies, namely that of having granular accounts for different admining purposes/different services (and using different names for them). Also, my IDP (Kanidm) also has a service accounts feature which can be delegated to real human accounts, so I think I should also be looking into that.
It'd be nice to have something like a "second password" for granting temporary privileged access to other apps' admin commands, but OIDC doesn't work this way sadly. Lastly I'd also need to consider managing SSH and non-app stuff as well.
Use grants rather than ACLs, they're the "new" way of doing access control. Host a full-fledged DNS resolver inside your Tailnet (AdGuard Home, Pi-hole etc) to do adblocking and local zones, the MagicDNS custom records are very rudimentary. If you intend to integrate with a third-party UI, doublecheck which Headscale version they support and ask in the Discord, since they usually lag behind a bit. Prioritize peer relays over DERPs for performance.
Hi, I've been running something similar with Tailscale. Instead of traefik, you can use any other TCP proxy like nginx or caddy-l4, or even use tailscale serve on the edge VPS as well. Do note that all of your listed services except Zola will make outbound requests, so it could be better to also exit node through the VPS (like the article did), as to avoid exposing your residential IP.
As for the linked personas, you may wanna use one domain instead of two. Matrix homeservers can be resource-heavy for example, so maybe consider @persona1:example.com and @persona2:example.com on a single server instead of having two resource hubs that does essentially the same thing. The same applies to GotoSocial and Lemmy. By the way, I recommend Continuwuity for the Matrix server :)
Static sites don't actively take up resources, so they can be on separate domains. But again you may wanna save some money, so maybe consider using persona1/persona2.example.com subdomains, or even pubnix-style example.com/~persona(1|2) paths!
As for the Docker management frontend, I have no idea which one's the best right now 😅 but do make use of Tailscale SSH feature to troubleshoot other parts of your machines as well. And as for updates, I just subscribe to RSS feeds to keep the important software updated. Highly recommend you do that too to check out changelogs yourself.
Thanks for the link to go-sendxmpp. It's nice to have an xmpp-native way to send notifications