Please bear with me as I don’t know where else to ask.
I want to start to self host but do not know where to start. I would like to start small. Just something that might not be beneficial but to get my feet wet. It does not even have to be practical.
I am not tech illiterate and have my fair share of technology around me hut self hosting has always been a daunting task.
I am scared to start.
I am already using a PiHole at home but that was kind of plug and play and just worked.
I would be incredibly grateful if someone could guide me to some resource or tell me what an easy first step would be.
An FAQ or self hosting for dummies.
Most resources I found assumed some previous knowledge.
The easiest way to get started is using Docker. You can self-host most software using Docker straight from their Github with one command or copy-paste config.
Do NOT expose (Port forward/NAT) your services to the internet if you don’t know what you’re doing. Use it locally using IP:port. If you want to use your services remotely, use a VPN tunnel like Wireguard (Available on Android and iOS too). Modern routers already support it out of the box. Tailscale is also an option.
Later down the road when you start exposing services, I can recommend NPM as your proxy for easy host and certificate management. Expose as little as possible! For added security when exposing applications to the internet, expose your port using a VPS or Cloudflare and tunnel to your home using Tailscale or Wireguard.
To not get overwhelmed you should start small and improve as you go. You don’t need to start with a datacenter in your garage right away. The most important thing is that you have fun along the way :)
Great projects to get started:
To add to that, to effectively use docker and basically anything important for self-hosting is to learn the basics of Linux.
A good resource for that is https://learnlinux.tv/
Docker seems the way to go for me now! Thank you for the nice write up.
I definitely do not now what I am doing so the word of caution is greatly appreciated!
The whole thing about remotely accessing is probably something I put on my ToDo list as soon as I get a service up and running. Nevertheless reading it and just knowing about Wireguard and Tailscale is a huge benefit to me.
Is there a personal recommendation which of your listed projects to get started with?
Here are a few of my favorites, some of which are exposed, some are not:
- Mealie - Recipe management. Import recipes by URL is my favorite feature, then I tweak and try it out (I have to be gluten free, so this makes it easy to track what worked for us).
- Homepage - a homepage to put quick links to all of my stuff, neat and clean.
- Grafana - for visualization of current data of my systems, paired with Prometheus.
- Technitium DNS - for all of my DNS needs.
- Jellyfin - for all my media, let’s me pick out what my kids can see/watch without me having to look over their shoulder, along with being a great looking solution for me.
- Immich - photo and video management
All of these (and more, this is just a dsmple of favorites) run on Proxmox. I mostly use LXC over docker, personal preference.
Home Assistant is probably the single most useful for me, already mentioned, just about everything at home is automated/controlled through there.
As a homelabber and systems admin, I would start with learning how to use Linux on the command line.
It’s all well and good looking at docker, but if you don’t know how to move about or edit on the command line. Your going to get stuck real quick.
Once your happy doing simple tasks on the command line, I would actually look at running something like wordpress on a pi or VPS. That will help you understand how to connect services together, and cement your basic command line knowledge.
Jim’s Garage just did a video on this. He made a docker stack for beginners with directions to his actual videos containing the more in-depth about each service being deployed.
A lot of people recommend Docker, but I will go further and say to specifically use Docker compose.
That way all the configuration is in a file that you can backup/restore. Updating is really easy, and you will never forget one of the random flags you need to set.
- PiHole - you can use the custom DNS to route domain names to you npm
- npm (Nginx proxy manager) - allows easy access to all your services hosted on one box
I agree, but want to add Portainer. Compose in Portainer takes away the scary SLI/Terminal part.
At least for me, hosting stuff went from «I have no idea what I’m doing» to «This sort of makes sense».
You could try something like YunoHost to get started! It’s kind of a one-click deployment platform for self-hosting, ready to use with user management, reverse proxy with SSL, somewhat preconfigured services to choose from, etc.
Ideally you can also learn the tools needed like Docker, Ansible, etc, but with yunohost and a SBC (e.g. RaspberryPi), or a €5/month VPS (easier if you want to access your services publicly), you will have a ready-to-use boilerplate that you can start building on.
Learning all the individual technologies at the same time might be overwhelming at the beginning, but something like yunohost will allow you over time to learn all the stuff around the deployment itself, e.g. how domains and DNS records work, how the SSL certificates are generated, which services you would like to set up and use, the configuration needed for these services individually, etc. And at the same time you can start using a few useful services!
Then, as you start learning, you could start setting up services one-by-one manually with e.g. Docker, either at the same server or a new one.
Don’t forget to look for the admin documentation for each software you’re setting up (e.g. Nextcloud etc). And look at awesome-selfhosted, it’s a list of more resources and software to use and deploy!
Good luck and have fun!
(Edit: There are some yunohost alternatives you might want to look into, but most of what I found either had a very small selection of software, or had a subscription service etc that they want to sell you, while limiting what you can do on your own server)