Mario Merlo
← Blog
24 June 2026

Start self-hosting today

self-hosting, privacy, subscriptions

I hate subscription services. I know most people on the Internet agree with me, given how many new subscription-based services sprout each day. Nowadays it is normal to pay for three or more video streaming services (which generally offer nothing interesting or new), a music streaming service, gaming services such as Nintendo Switch Online or PlayStation Plus (the prices of which have become unthinkable relative to the exclusive games Sony provides), cloud storage, and the privilege to edit Word documents (I’m looking at you, Microslop).

Most of these services are easily avoided through the magic of self-hosting. Self-hosting is the practice of setting up services on your own server in order to control both your data and the infrastructure supporting it. Not only is this solution more privacy-oriented, but it also frees you from subscription hell: the only things you’ll have to be paying to self-host will be the hardware and your electricity bill—and the best part is that you don’t even have to pay for the hardware if you can repurpose an old PC.

So if you’re interested in how to get rid of Microslop Office, stop paying so much for Netflix, Disney+, and so on, and gain a tidbit more control on where your data ends up, do read this post: it will not be very technical, as I strongly believe anyone is capable of self-hosting (especially if you can get some help from Claude or other Large Language Models).

Why I begun self-hosting services

I am somewhat of a data hoarder (someone who never deletes anything off of their hard drives because “what if I’ll need it again?”) and I enjoy big tech not snooping into what I do with my life. Thus, for at least two years, I hosted most (if not all) my data on MEGA: it’s an end-to-end encrypted cloud storage service which offers great pricing for large amounts of space (they recently upped their Pro I tier to 3 TB from 2 TB, for just 9,99€/month).

I really like the service: it is simple to use, it does not have weird, half-baked, useless AI features built in, the desktop apps they provide are good and cross-platform. It really is great. I just dislike having to rent storage space.

I’ve always wanted to set up a NAS to store my old family pictures and my university docs, so I pulled the trigger and decided to try. For once, I’d be using my server as something more than a way to play Minecraft with my friends.

Step one: acquiring hardware

I have built my first PC in 2016, and have since upgraded it multiple times in multiple ways. My original specs boasted an Intel Core i7-6700 and an NVIDIA GeForce GTX 960 (such graphics power). While this became old fairly quickly for a personal gaming computer, it’s still perfectly usable as a Linux-based server running Docker containers (we will get into more detail about this soon enough).

Why Linux? Well because we want this to be free, right? And Windows Server is definitely a paid piece of proprietary software, compared to Linux, which is free and open source. I also wouldn’t trust Microslop with my data, ever.

Earlier this year, I “inherited” an old Lenovo System x3100 M5, a now discontinued tower server, which had better specs than my old PC, and so I decided to upgrade.

All this is to say that you really don’t need powerful and expensive hardware to start self-hosting. Even an old, beat-up laptop can be your server! After all, always remember that a server is just somebody else’s computer.

Step two: operating systems

We have already talked about this briefly in the last step, but it’s worth elaborating more on it, especially if you’re not a big computer person.

People generally use two operating systems in their lifetimes: Windows and macOS (or OS X, if you’re old-school). The former is made by Microsoft, while the latter is developed by Apple, two of the biggest and wealthiest companies on Earth.

Windows is a proprietary, paid piece of software made by a company I trust less each day. macOS is great in many aspects, but not so much for a server OS. Your best bet is something made for servers: this gives you greater stability and features such as an SSH server generally out-of-the-box. I would personally recommend Debian because it is very lightweight, so performance will be no issue, even on older hardware, and very stable. Packages might be a little older on Debian, but that’s a fair tradeoff to ensure that your server encounters few to no issues during its uptime.

As far as I’m concerned, I used Arch because that’s the OS I’m used to and I like the flexibility it provides, especially thanks to its package manager. A fair warning though: while I am used to it and can troubleshoot most things on my own or through the wiki, you really should not use Arch if you’re not ready to learn it. This is not a way to gatekeep you from the distribution: I think everyone who wants to learn how a PC really works should try Arch; however, using an OS as “difficult” as Arch as a novice in the Linux space creates, more often than not, frustration, which would send you flying back to other proprietary operating systems.

Step three: simple data storage

MEGA was great because it worked both as a “portable hard drive” I could access from anywhere, and as a synchronisation tool I could use to keep stuff like my Obsidian vault up to date on all my devices. Now that I wouldn’t be using anymore, I needed an alternative.

The first, and probably most popular, alternative to cloud storage services for self-hosting is Nextcloud: it basically works just like MEGA, but you have complete control on how it works: you can install various apps on it to enable online document collaboration, video-conferencing, secure messaging, and more.

The only issue I had with it is that it really does work best by exposing it to the Internet through a domain on HTTPS. I really disliked the idea that it would be even just visible from people I do not authorise (yes, I am a bit paranoid, in case you didn’t know). Thus, I looked for another solution.

I thought: if the only thing I need is basically a shared network folder, why not just use Samba? So I mounted a nice 2 TB SATA SSD onto my server and created a Samba share on it. Enabling it is only a matter of starting a systemd service. Now I had a 2 TB drive always accessible from my local network.

I was only missing file synchronisation, for which I turned to Syncthing, a synchronisation software which works through peer-to-peer (P2P) connections. This too is a simple systemd unit you can enable. It has a clean web UI to create and share folders with other computers in your P2P network and has many niceties such as file version history.

Step four: connecting when away

This was all great, but now I could only connect to my stuff from within my home. That’s not very practical: if I wanted to substitute MEGA with my own solution, it had to be accessible from anywhere in the world.

Incidentally, I recently moved, and bought some new network gear, among which is a FRITZ!Box 5690 Pro as my modem and main router. In its settings, it is possible to set up a WireGuard VPN with a single click and download its configuration to any device. And so I did: I created four tunnels, one for each of my devices, and now I could access the entirety of my local network from any other network in the world—granted that they did not block Wireguard ports.

I only had a little issue: I had to change my subnet addresses to something non-standard to avoid conflicts with other local networks, but that was very easy to do and did not have any consequences.

Of course, there are other ways to set up a VPN for your home network: you could easily host a WireGuard server on your server and only touch your router for port forwarding, or you could use a service such as Tailscale to make the process even simpler. Tailscale is what I’m using now: after finding out about it, I was flabbergasted as to how this was a free service for up to six users and for an unlimited number of devices. I very much suggest you use this for remote access, as it basically works as a one-liner you type into your terminal.

Step five: containers

One of the things I wanted to try with self-hosting was Pi-Hole, a DNS sinkhole which blocks ads and malicious websites on your entire network. You only have to use it as your DNS server in your local network for it to work, and it comes preloaded with a solid blocklist.

The easiest way to install new services on a server is generally through a container, which is essentially a very light Virtual Machine (VM): the developers and maintainers of the service usually provide images, which are preconfigured virtual machines with all the components needed to run their service. This is incredibly convenient, because thanks to Docker and Docker Compose you can have (almost) any service up and running in minutes.

You only need to install Docker and enable it through systemd for it to run your containers. I will not post commands to do that here, since installation methods may change with time. You can easily find an installation guide on Docker’s documentation.

Docker Compose allows you to write files called docker-compose.yml to specify which services you want to run, their restart policy, how many resources they can use, which ports they expose, and much more. Generally, self-hosted services also provide templates for these files in their documentations or repositories. For instance, I went looking for Pi-Hole’s docker-compose.yml file on Pi-Hole’s Documentation.

This opens up a world of possibilities, since so many services are basically two clicks a way. I encourage you to look around for useful services and check their documentation to find Docker installation instructions, because it really feels like magic.

Step six: more services

Now that my server was up and running, I wanted to check out more cool services to add to my roster. So after a couple LLM queries and some research, here are some more services I find useful in my day to day life.

ServiceDescriptionWhat it replaces
JellyfinYour own streaming service with your own mediaNetflix, Disney+, Prime Video…
NavidromeA music streaming service for your high-quality filesApple Music, Spotify…
ImmichYour personal cloud photo library, with cool features like memories and face recognition (all on-device)iCloud Photos, Google Photos
Ollama + Open WebUIChatGPT and Claude, but with your own open-source modelsChatGPT, Claude, Gemini
MemosA microblog-like note-taking app which you can share with your friendsiCloud Notes, Google Keep
FreshRSSAn RSS feed aggregator to get news directly from various sourcesFeedly
ForgejoA self-hosted Git remote with optional CI integrationGitHub, GitLab
Stirling PDFA PDF editing suiteAdobe Acrobat

Conclusions

I am very satisfied with my current set up: I substituted a lot of services that either I did not want to pay for or did not trust for something that I mostly control myself, and I am never looking back. And while I am a bit of a computer nerd (and have a degree in Computer Engineering), this is really easy to do for just about anyone: looking online, there are thousands of guides on how to self-host services. Plus, through LLMs you can just ask someone that is always available to help you set up your server. Do keep in mind, however, that by hosting your own server you are the only person responsible for your data, so you have to take into account security measures. If you expose nothing to the Internet and only use Tailscale, your attack surface is minimal; but you have to keep in mind that updates, maintenance, and uptime all depend on you now: that’s the tradeoff you have to pay for privacy.