I am interested in tech and would say I have more knowledge about networking than the average person, but there’s still a lot that’s way above my head. I’ve played around with Pis a little and have set up things like home assistant and foundry VTT before.
I got my hands on an old machine from work and want to upgrade it with some of my spare hardware, and ideally have it set up as my single home server. I would like to host plex, a few foundry servers, home assistant, and use it as a NAS. Basically combine everything I have right now into one more powerful machine.
Thing is… It feels really overwhelming to try and start. I’m not sure really sure how to go about the whole endeavor. What OS do I use? Do I use VMs, docker containers, is there pro or cons one way or the other? How can I make sure they’re all accessible from the web securely?
Is there anything you guys can tell me to get me started? Some resources to walk me along setting a multipurpose home server?
Oh and by the way, it’s easy to feel overwhelmed starting out in this. My advice is to set yourself small, achievable goals to help break it up. Start by doing your hardware upgrade, then work out what your host OS will be and install it. Then work out how you want to use it, what you want to containerise, what you want to run in VMs.
be prepared to knock it all over and start again. Everyone rebuilds their environment, usually after learning how they could do it better. And most of all, have fun!
be prepared to knock it all over and start again.
Definitely used to this already just messing around with my few Pis lol.
Personally, after I graduated from pis I went to proxmox, for the simple reason of if I wanted to experiment with anything I could just spin up a new VM and test it out. Everything I have running in my lab is a VM. The only thing I run bare metal is opnsense, truenas and one pi.
Don’t be afraid to nuke everything and start again. Also make sure you take notes on what you do, what sites you visit, code you copy and paste. Obsidian and SilverBullet have been a godsend when it come to learning from my own mistakes.
Using obsidian for snippets is a really good idea, cheers.
You could use a complete solution like TrueNAS or https://www.openmediavault.org/ but IMHO if learning is equally a goal you could also start with a standard Debian or Fedora Server Edition. Personally I use the latter and it is very nice to use with the Cockpit web-console and the good integration with Podman for running Docker containers.
I was on the same boat few months ago. Went for Debian OS and then docker containers for almost all services. Portainer is awesome web UI to manage all containers so thats what I install first. Starting up new services is about copy paste docker-compose with slight modifications for your needs. My server is accessible through wireguard connection and that should be one of the most secure ways and probably the easiest to setup afaik (downside of wireguard is that you have to setup each device to allow connection - AKA scanning qr code)
Just saying what I did, most people here are more experienced and Im still learning.
GL and HF
This depends on the machine you have.
I would choose a hypervisor, if I had plenty of RAM (32 GB+) and CPU and wanted to have everything properly separated with the option to easily redo things, backup VMs and container, experiment with different setups and also wanted to learn new things. There are plenty of options. Proxmox might be the easiest to get started with and also to get help from the selfhosted community.
If I had limited resources, I would just use docker/docker-compose directly. It is more commonly used than lxc and doesn’t have the overhead of a VM.
Regarding safe and secure access: This is a rabbit hole.
I personally don’t use cloudflare, a lot of people do. Use a reverse proxy and generate a ssl certificate for all domains used. (Traefik, caddy, npm et cetera). Try to keep services up to date. Separate networks from each other. Think about which services you really have to expose publicly.
I can’t point to any decent resources, but in your shoes I’d probably download a Debian based distro that’s similar to what you used on your pi’s (Ubuntu server or Debian itself), learn how to use docker (see the other post where a user is asking about containerisation today for community responses) and set up a reverse proxy like Caddy to safely host your content on your lan and once you’ve got it working on there then think about internet access and whether you want to go down the VPS/Cloudfront route for public access to your goodies.
Given how Plex is trying to diversify away from self hosted content, give Jellyfin a spin - it’s surprisingly good and supported by anything with a browser, iOS, android, firestick, kodi or whatever!
Proxmox might be what you’re looking for, it’s very popular among homelab users and allows you to run VMs and Containers natively so you have the best of both worlds.
As to which you should use (Docker or VMs), neither is a silver bullet. I’m going to oversimplify it a bit, but in a nutshell:
Containers lend very well to microservices like web apps and processes you want to run isolated but don’t need a whole VM for. I can go into this in more depth if it helps you.
VMs are better suited when you have a disproportionately more resource hungry service (like database servers). They also allow easier deployment of things alongside the application, for example if you have monitoring agents. The downside is VMs add a maintenance overhead for the underlying OS (this is true of containers too but less so as you’ll often run many containers on one host).
In my environment I use VMware ESX for the hypervisors, manage it with vCenter and run mostly Linux machines with a mix of traditionally installed services and Docker standalone. There are some highly resource intensive services that even get their own physical host, like my NVR (for CCTV cameras) and backup server.
Hope I’ve answered more questions than I’ve created!
Just from personal experience, but here are a few thingd that worked for me:
Get familiar with linux.
You can do a lot with windows, but from an unattended/automation standpoint, getting to know Linux, especially command-line (bash) will be beneficial for many reasons, too many to name here, but a few is, Linux (usually) is a lot less resource hungry and it’s a lot more flexible than windows.
The flavor (or distribution/distro) of Linux isn’t really all that important outside of stability and support. With that being said, I’m inclined to say the best flavor is the one you’re most comfortable with. You said you’ve played with raspberry pi’s, I believe their “default” Linux flavor is Raspbian which is based on the Debian distro. You can consider using Debian, or even Ubuntu Server. I would recommend the latter over the former simply because of its popularity, you’ll find many support articles/discussions online for things you’ll run into.
Learn about containerization
This isn’t mandatory, and may be over your head, but this will make installing (deploying) all your apps much easier with less of a headache, and with all the benefits of sandboxing/isolating your apps. You can find container images for just about any self-hosted services you want to install. The most popular form of containerization right now is called Docker.
Keep things local until you are comfortable with exposing your server online.
There are a lot of risks when opening your server and services beyond your Local Area Network. You can invite bad actors into your network, which can lead to irreparable harm to more than just your PCs. I would suggest keeping things local until you understand what you’re opening up to the internet and how.
This isn’t the only way to jump in. Just the path I took. Albeit containerization happened much later, but i refuse to go back to hosting on bare metal once using docker and/or kubernetes.
Hope this helps
I feel you. I was where you are 2 years ago and it was really hard to start off.
I’d suggest starting installing Debian as an OS. Then, go for Docker.
If you feel lost, you can take a look at some videos from DBTech on YouTube. Look at his playlists to sort what you need.
Remember to document everything you do, because you’ll forget what you did to make things work your way.
Have fun !
I would just start somewhere. Maybe try setting up a NAS with TrueNAS for example. From there you could venture out, starting with getting it running in your local network to eventually encorporating a VPN tunnel to securly access your files from outside.
I’m kinda in the same boat. Super into tech and computers and know my way around Windows, Mac, and a fair understanding of Debian based Linux… But self hosting still holds many questions to me.
Today, i just discovered that you can use CloudFlare VPN tunneling to basically “convert” a local ISP provided IP directly to a public IP without the need for a dedicated IP. I’m still at work but I’ll probably start tinkering with it once I get home. Would love to host Mastodon and Lemmy at home instead of paying a monthly fee just for some light to moderate social media use.
I also want to run some home automation stuff as well as a few static html websites. I know currently what is possible and the basic understanding of how it works, I just need more time to practice!
Feel free to hit me up in DMs if you have any questions or want to exchange notes. Seems like we’re both in a similar place rn.
I’ll keep that in mind, cheers.
The best thing you can do is experiment, so it’s worth trying to optimize for ease of experimentation. So maybe favor making a VM host over installing a task-specific OS on the bare metal.
Personally, I’d set up Debian and get it so you can administer VMs with virt-manager.
I don’t have a tech job or anything I’m just a regular computer dork so maybe we have similar backgrounds? I’m running Ubuntu server with my services running on Docker. Sometimes I get stuck and make chatGPT edit my docker-compose files but other than that it’s been pretty easy to use Ubuntu + Docker.
Start working towards networking and Linux certs. They will teach you things in a straightforward, structured way that will take years if you try to figure it out yourself.