This is not a step-by-step tutorial — it’s my learning path: the story of teaching myself home servers and self-hosting from absolute zero. If you’re just getting started and wondering “what should I learn first?”, I hope this can be your roadmap. It’s just my opinion and personal experience, not gospel.
If you don’t even know what a home server is yet, read my previous article first so the context makes sense:
🖥️ Phase 0 — A 2GB STB with CasaOS: Getting Your Feet Wet #
It all started with a used HG680P set-top box with only 2GB of RAM. I installed CasaOS on it and… honestly, I had no idea what I was doing. No idea what Docker was, no idea how file sharing (NAS) worked, nothing. I just clicked around the web dashboard installing apps.
Here’s the funny part: without realizing it, those apps were actually running inside Docker. I learned how to install apps through a UI without understanding what was happening under the hood. For storage, I had a 32GB flash drive — good enough for small files.
What I learned in this phase:
- How a CasaOS-style app store works (turns out it’s a wrapper around Docker)
- Basic storage concepts: plug in a drive, share it, use it
- That even cheap hardware can become a server
💡 Phase 0 tips #
- Don’t wait for good hardware. A used STB or an old flash drive is enough to start. What matters is starting.
- STBs running Armbian have plenty of fun stories: turn one into a printer server (CUPS) or set up automatic reboots to keep it from slowing down.
- If the CasaOS-style UI feels heavy, there’s a minimal alternative: Portainer. It’s also a great bridge to the next phase.
💻 Phase 1 — A Potato Laptop Running Debian: The Real Learning Starts #
Turns out there was an old Intel Celeron N4000 laptop with 4GB of RAM lying around. It’s a total potato, so I decided to install a very light, bloatware-free OS: Debian. This is where everything started to click.
In this phase I focused on the two pillars — Linux basics and Docker — because I believe these are the fundamentals of everything in home servers and self-hosting. Once these stick, everything else follows.
🐧 Linux Basics: The Foundation of Everything #
This is the most important part. You don’t need to be an expert, just understand these things:
1. SSH — accessing the server without a GUI
A server has no screen, so you connect over the command line from your laptop:
sudo apt install openssh-server
sudo systemctl enable --now sshThen from your laptop: ssh youruser@server-ip. Once you can do this, a whole new world opens up. If you really can’t stand staring at a terminal, install Cockpit to get a GUI dashboard in your browser.
2. Users & permissions — who gets to do what
Linux is strict about this. Learn the basics:
adduser username— create a new userusermod -aG sudo username— grant admin (sudo) accessls -l— inspect file permissions (rwxr-xr-x, etc.)chmod 755 file— change permissionschown user:group file— change ownership
sudo. This habit will save you later — on Proxmox, on production servers, everywhere.
3. Networking — making the server reachable
ip addr— check the server’s IPip link— list interfaces (eth0, wlan0, etc.)- Set a static IP so the server’s address never changes after a reboot (crucial if you plan remote access or a reverse proxy)
- Want to measure your real LAN speed? Try iperf3
4. Storage — handling disks and fstab
lsblk— list detected disksmount /dev/sdb1 /mnt/data— mount manually- fstab — so drives mount automatically at boot. I wrote a full guide: Mount drives manually & auto-mount via fstab
5. File management — cd, ls, cp, mv, rm, and an editor: nano (most beginner-friendly) or vim (if you’re feeling brave).
💡 Linux basics tips #
- Get comfortable with
man—man ls,man chmod, etc. The documentation lives right on your server. - Create aliases for frequent commands:
alias up="sudo apt update && sudo apt upgrade". - Write down every change you make. Trust me, a month from now you won’t remember why your
nginx.conflooks different from the default.
📁 SMB — Home-Grown NAS #
Once I could SSH and understand files, the next step was SMB for file sharing/NAS. Why SMB? It’s lightweight, native on Windows, and accessible from smartphones too. No need to pay for Google Drive when your data lives at home.
There’s a great post that fits this phase perfectly — a budget NAS approach:
Short version: sometimes the simplest solution outlasts the feature-packed one.
🐳 Docker & Docker Compose — The Game Changer #
This made life dramatically easier. The concept: apps are packaged into containers that include everything they need (the app plus its dependencies), so you just run them — no more installing dependencies one by one on the host.
Essential commands to memorize:
docker ps # list running containers
docker ps -a # list all containers, including stopped ones
docker stop containername # stop a container
docker start containername # start it again
docker logs -f containername # view logs (a lifesaver)
docker exec -it containername bash # get a shell inside the containerBut the real game changer is Docker Compose: all configuration goes into a single docker-compose.yml file, and docker compose up -d brings the app up. Moving servers? Just copy the file. This is what made me confident enough to run a dozen apps.
Some apps I’ve written about using Compose + Portainer: JDownloader2 and FileFlows.
💡 Docker tips #
- Always name your containers (
--nameorcontainer_name:) so they’re easy to manage. - Use volumes for data — never store data inside the container. Containers are “temporary”; volumes are “permanent”.
- Set a restart policy:
restart: unless-stoppedso apps come back up automatically after a server reboot. - Never expose
docker.sockto a container you don’t trust 100%. That’s equivalent to giving it root access to your server.
🌐 VPN — Access From Outside Your Network #
Interesting part of my journey: my ISP uses CGNAT and blocks Tailscale. WireGuard was out of the question too, since I don’t have a public IP. My solution? Netbird — free, plenty of features, and it punches through CGNAT smoothly.
🌐 Phase 2 — Reverse Proxy: Traefik #
As the number of apps grew, access got messy: every app on a different port, no SSL, separate logins for every dashboard. The fix is a reverse proxy — one entry point, routing by subdomain, plus automatic SSL.
I use Traefik, and I wrote about it in detail here:
What this phase gave me:
- Free SSL (Let’s Encrypt) that renews automatically — even without opening port 80 (Cloudflare DNS-01) — perfect for CGNAT users like me
- One entry point:
app1.yourdomain.com,app2.yourdomain.com, etc. — no more memorizing ports - A cool bonus: scale-to-zero with Sablier + Traefik to automatically stop rarely-used containers and save RAM
🧩 Phase 3 — Hardware Upgrade & the Move to Proxmox #
After almost a year, the apps kept piling up and the old hardware (4GB RAM) was struggling. Time to upgrade: a new machine with an Intel Core i3-6100 and 16GB of RAM. Still only 2 cores, but plenty capable for many apps.
At the same time, I migrated both machines to Proxmox VE. Why? Two main reasons:
- Community scripts — installing apps/LXCs/VMs became much easier: grab a script from community-scripts.org, run it, done.
- Proxmox Backup Server (PBS) — backups became much easier and centralized.
Because I’d already learned Debian (CLI, users, networking, fstab) and Docker (containerization concepts), Proxmox — which has a GUI and helper scripts — felt much easier. I just had to learn the new settings and terminology.
🧠 Key concepts to understand in Proxmox #
| Concept | Short explanation |
|---|---|
| VM (Virtual Machine) | Full virtualization — its own kernel. Heavier, but strongest isolation. |
| LXC (Container) | Like Docker, shares the host kernel. Lightweight, great for homelab apps. |
| Storage pool | Where disks/ISOs live (local, local-lvm, NFS, etc.). |
| Template/ISO | Base images for creating new VMs/LXCs. |
| Snapshot | A point-in-time photo of a VM/LXC — roll back if something breaks. |
| Backup (PBS) | Scheduled backups to a separate backup server. |
💡 Proxmox tips #
- Don’t jump straight to Proxmox without learning Linux first. Many people tell beginners to go straight to Proxmox, but in my experience that just confuses you — you’d be learning two things at once (virtualization + Linux). Take it one at a time.
- Put PBS on separate hardware if you can. A backup stored on the same server is only half a backup.
- Use snapshots before updates — if an update breaks something, roll back in seconds.
- Set up a clean naming convention for your VMs/LXCs (
lxc-arr,vm-gaming, etc.) before the numbers grow.
💡 General Tips for Learning Self-Taught #
These are the most valuable takeaways from all the phases above:
- Learn by building. Don’t just read docs — install, break, fix. Errors are the best teachers.
- Document everything. Keep notes on configs, commands you used, and decisions you made. This blog was born from that habit.
- Back up configs before tinkering. Config files are small but precious.
cp file file.bakis enough to start. - A 24/7 server shows up on your power bill. To save power, check out PowerTOP & hd-idle.
- Don’t expose everything to the internet. VPN for personal access, reverse proxy + SSL for what really needs to be public.
- Use
.envfiles for secrets (API keys, passwords) — never hardcode them in compose files or configs. - One problem, one search. Getting confused while learning self-taught is normal, but don’t give up at the first error — check the logs first (
docker logs,journalctl -xe), then search.
❓ FAQ #
Do I need to learn Linux before Proxmox? Not strictly, but it helps a lot. In my experience, because I already understood the CLI, users/permissions, and container concepts from Docker, learning Proxmox was much faster. Starting Proxmox from zero means learning two things at once, and that’s heavy.
What’s the minimum hardware to start? A used 2GB STB is enough to start (see Phase 0 😄). Prefer something roomier? An old 4GB laptop with Debian is already very capable. Don’t buy an expensive server before you need one.
My ISP uses CGNAT. How do I access my server from outside? Use a mesh VPN like Netbird or Tailscale, or Cloudflare Tunnel. Avoid direct port forwarding — it won’t punch through CGNAT and is a security risk anyway.
What’s the difference between Docker, LXC, and a VM? Docker = application containers (lightest, runs on top of an OS). LXC = system containers (own user-space, shares the host kernel). VM = full virtualization (own kernel, heaviest but most isolated). Use what fits the need.
When should I upgrade to Proxmox? When your hardware starts feeling full, you have more than one server, or you need proper isolation and organized backups. If you have one happy server, there’s no obligation to move.
Where do I start as a self-taught learner? Start with what you use daily: build a NAS first, install your favorite apps, then branch out. Official docs (Debian, Docker, the Proxmox wiki) plus YouTube and blogs like this one are enough to get you going.
🛠️ Quick Troubleshooting #
| Symptom | Likely cause | Fix |
|---|---|---|
| SSH connection refused | sshd not running or a different port |
sudo systemctl status ssh, check ss -tlnp |
| Permission denied when accessing files | Wrong permissions/ownership | ls -l, then fix with chmod/chown |
| Mount disappears after reboot | Not in fstab | Add an entry to /etc/fstab, test with mount -a |
| Container keeps restarting | Bad config (port, env, image) | docker logs containername, read the error |
| Can’t reach the server from outside | CGNAT / bad port forwarding | Use a mesh VPN (Netbird/Tailscale) or Cloudflare Tunnel |
| VM/LXC fails to start on Proxmox | Storage full / not enough resources | pvesm status, check disks, prune old snapshots |
| Traefik 502 Bad Gateway | Containers on different Docker networks | Put the app and Traefik on the same Docker network |
Wrapping Up #
To summarize, my learning path looks like this: CasaOS on an STB (getting started) → Debian on a potato laptop (Linux basics + SMB + Docker + VPN) → Traefik (reverse proxy & SSL) → Proxmox (virtualization & backups). Each phase builds on the one before it.
What matters most isn’t the hardware — it’s consistently learning by building. No need to rush, no need to buy expensive gear, and no need to be embarrassed about starting small. Your first server doesn’t have to be perfect — it just has to exist.
Got your own experiences, questions, or a different learning path? Drop them in the comments. Who knows, it might become the next article 🚀
Happy homelabbing!