Overall, I am thinking about self-hosting, but I am very very confused on the procedure. How does one run a physical server at home, and then open it to the internet? And even them, what are the pros and cons of self-hosting your own services?

  • To run a server at home, at a high level it’s a simple as picking a machine, installing an OS, and connecting it to your network. That machine could be a Raspberry Pi or other Single Board Computer, a laptop, a desktop in any formfactor, or a sever in a rack in your basement/closet. I ran my services at home on a Raspberry Pi for a while, but needed some more power so switched to an HP Elitedesk G Mini with an i5-7500t CPU with Ubuntu Server installed. I decided on that based on a combination of price, CPU architecture, power consumption (primarily the TDP of the CPU and any graphics card), and form factor size. It sits happily under my TV stand, with more than enough compute power to do what I do and my want in the future. Even with that extra compute power, it’s usually not far from idle and consumes 35W at high performance moments.

    The networking part is a bit more complicated. There are a few options for making it available to the Internet. You could likely open a port on your router and point that to your server. There are services that scan all IPs out there and publish results, like Shodan. There are also bots that will try common login methods wherever possible. Open ports open your server up to those, just like it opens your server up to your own connections. Alternatively, you could install a Mesh VPN like Tailscale. Things like phones and computers with that Mesh VPN installed and connected will be able to communicate without opening ports to the wild internet.

    Another option is to rent a server. I rent a Virtual Private Server (VPS) from Hetzner for ~$5/mo, and run services I want to be able to access over the internet on that by pointing a domain I own to it. This compartmentalizes some of the risk of the wild internet, if anything happens to that server then my home network and all devices on it are still fine. I use both to separate different kinds of data. Things I want to access from anywhere are on my Hetzner VPS, other data I want only accessible on my home network are on my HP Elitedesk.

    Pros: All of my data regarding these machines is mine, and collected/managed by programs of my choosing. I’ve learned so much about networking, containers, virtualization, organizing data, while setting up and managing these two servers. I get so much satisfaction from having that data in my control and accessible to me. If I want to stop using a service, I can just stop and get rid of it thanks to containerization like Docker, bind mounts means that data is available on my filesystem.

    Cons: Anything that goes wrong is my problem, and I have to fix it. If there’s a software bug, a botched upgrade, hardware failure, or a Natural disaster, mitigating that and recovering from it is on me unlike if I just throw everything of mine into a cloud service like Googles. This is amplified if you have users other than yourself as well, their problems become your problem to fix and they may or may not be as patient as you are with your services. I keep my services to myself outside of tv/movie streaming within my local network. There is also the cost, like any hobby. The upfront cost of machines and/or hardware replacements, the monthly cost of a rental and electricity, the yearly cost of a domain. It does add up, but because I enjoy it and use it while keeping those costs low, I think it’s worth it for me.

    No matter what you choose, don’t forget to have backups. 3-2-1 backups, 3 copies on 2 mediums and 1 is off-site and keep up with that. Nowhere is safe from a surprise natural disaster, which could destroy your data.

    Edit: hit post too early while previewing, completed my post.