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.
Start small. The hard part isn’t installing a lot of software and getting it running. The hard part is keeping everything updated over time. So install one interesting service, and then figure out how the update process goes before installing another. Hopefully the worst thing that happens is you install services and use them only to have the computer fail in a few years after you depend on them and you can’t figure out how to get the data into the new version. There is also the very real possibility that your service is compromised by an attacker.
I will go even ONE step further than others - if you are scared to start a software like Truenas scale that has a GUI has helped me. A lot of the options offered by others are great but can require a lot of command line stuff. There are a few OS’s out there that are more point and click that I had a lot of success with. Truenas scale runs the docker containers that others are recommending.
I’m curious where you are from and what hardware for self hosting you have. I also want to know what you are interested in self-hosting or learning.
For me, my home lab started with networking. Yours doesn’t have to. For me, I had already achieved a standing time and was working to become a network engineer. Where are you on your path? In truth, starting with the network is not the best, mine required dedicated equipment: a firewall(UDM), switching(ubiquiti), and access points. This is expensive, so perhaps not the best place to stay.
I would say that a good place to stay is with virtualization and a hypervisor. A hypervisor is intended to run virtual machines. I think starting with a hypervisor is a good idea because once you have a hypervisor, you can experiment with just about anything you want. Windows, Linux, docker, wherever your exploration takes you.
Now, I would say the cheapest way to do this kinda depends on you. Do you have a .edu email address? If so, you should be able to receive free licensing for Windows Server through Microsoft imagine (previously called dreamspark). If not, do you have Windows 10/11 pro edition? I would say that Windows server may require dedicated hardware, but if you are already running Windows pro, then your daily driver pc will be capable of running hyper-v.
If you have an old spare computer, you can make it a dedicated hypervisor with either the Windows Server option, or in my opinion the preferable Proxmox. Proxmox may take a little time to get acclimated to since it is Linux command line, but you already have experience with that on the pihole.
Those are my recommended next steps to take. Though, there is plenty more that you can do. As others have said docker is a cool way to make some of this happen. I personally hate docker on Windows(it’s weird and I just want the command line not a UI). But you should easily be able to spin up Windows Subsystem for Linux, install docker and docker compose and get started there without needing any additional hardware. You could also do the same using hyper-v if you prefer and have a pro license.
Regardless of what direction you choose to go, you can go far, you can succeed, and you can thrive. And if you run into any issues, post them here. Selfhosted has your back, and we are all rooting for you.
Side Note: Hyper-v used to only be available on Windows Pro, but if someone knows for sure that it is available on home please let me know and I will update my post.
To start small setup a static website behind nginx. This requires you to create a basic website or copy a template, it goes somewhere in your filesystem, in linux /var/www is common. Once you have that, setup the nginx service and point it to that location. You can do this locally then expose it to the net or put on a VPS. Here is a dead simple guide presuming you have a remote server: https://dev.to/starcc/how-to-deploy-a-simple-website-with-nginx-a-comically-easy-guide-202g
Once you have that covered, ensure you know how to setup ssh keys and such, then install, configure, and run services. From there, most things are easy outside of overly complicated configurations.
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. Tailscale is also an option.
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:
This is really helpful. I’ve been wanting to get started, like OP, but knowing how to do it feels overwhelming.
Thanks!
No worries. Enjoy!
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?
KitchenOwl and Pastes are probably the easiest to setup. Paperless is the most useful for me. Nextcloud can be a bitch to setup once you want to include Office functionality. I recommend the Nextcloud All-In-One to make it a bit easier.
In addition to the ones listed above, I can also recommend Home Assistant if you don’t know it yet. If you like home automation you’re in for a treat.
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.
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/
If you want an easy way to host, yunohost can be a good place to start.
Learn how to use Docker. That’s gonna be a big help.
You can set up Bookstack and then use it to document everything you’re going to set up later!
Hosting Bookstack seems a bit much for someone who’s just getting started.
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.
Get Unraid for your server OS. Its nuts how good it is at being beginner friendly, while being robust when needed. It has a docker app “store”, as well as plugins, and a virtual machine manager as well. It also has a very, very nice Web GUI: you manage the server from another PC you use in your house.
I can not overstate how much I learned by starting with Unraid.
No one has said it but trash guides is a pretty decent resource.
Trash guides did not show me anything when I tried to look them up. What exactly is that?
It’s how to use radarr and sonarr https://trash-guides.info/
I assumed you were self hosting media downloaders
Perhaps you aren’t
Louis Rossman, a strong advocate for the right to self-repair, has an extensive, bottom to top guide on self hosting your own services. It starts from introducing what a modem is and what role it plays, and it ends with an entirely self hosted cloud. It comes in article as well as 13 hour video form. I would highly recommend this to anyone looking to get started self hosting - it doesn’t just introduce software you should learn, but it also shows you how to configure it.
If you look up “Dr. Frankenstein Discord” you’ll find the community that helped me get familiar with Docker. As in, several people held my hands for about 2 weeks non-stop. I can’t tell you enough how much I love that group. But containers aren’t the only way to go.
I hear people talking about Proxmox a lot, and it seems (as far as I can tell) to be one of the easiest platforms for hosting many services one a machine. Next computer I set up, I’ll be going that route.
Regardless of how you do it, the knowledge base and skills mostly transfer like a Venn diagram. The most important pieces to get started are hardware and patience. Everything else can be solved with online teamwork
I will check out that community. Seems incredibly friendly and supporting!
Proxmox is something in my distant future but regardless. I will hopefully get there eventually
Having an environment like proxmox is very handy for learning and testing. When you find something to test, spin up a clean machine and you have a safe environment to learn that can be removed after. You can also try out different distros that way.
I’d recommend setting up Incus instead however, it works fine on a desktop/laptop if you’re running a linux distro they support and don’t have a dedicated machine to use.
They also have a very good tutorial/demo that shows the basics: https://linuxcontainers.org/incus/try-it/
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.
Start with a VM on your computer and see what you want to do/need from there.
Leaving a laptop on is (almost) free.