DEV Community

Cover image for HomeLab
MeritonAliu
MeritonAliu

Posted on • Edited on

HomeLab

Introduction

Starting off with a 5-year-old notebook from my apprenticeship that I don’t use anymore since I got the M2 Air, I thought of putting Ubuntu Server on it and seeing where the path leads me. The following few weeks, I have been immersed into the whole Homelab world and enjoying everything. I then took this whole event as a chance to learn more about servers, networking, and containerization to grow my career in a new field.

Setup

I first started off with a Raspberry Pi 3 and 4, a 15-year-old HP notebook, and as said, my Lenovo notebook. I managed to put them into a K3S cluster to compute as one server system. But honestly, after some testing around, I had to find that the old HP was running way too hot, and both Raspberries were not contributing much.

So I removed everything and turned just my Lenovo notebook into a single-node Docker server. Which results into:

Setup

Specs: Ubuntu 24.04.2 LTS, Intel i7-8550U, 16GB DDR4 RAM, 256GB SSD, Intel UHD Graphics 620

Remote Access (VPN)

For accessing my server from outside and anywhere, I use Tailscale. This service creates a VPN between all your desired devices. It offers much better security and less risk than using port forwarding or exposing ports/services to the whole internet. Runs fantastic — and even for free!

Server and Containerization

Since I'm not using Kubernetes/K3S to manage the orchestration, I simply use Docker Compose files, organized in folders and track with Git. Secrets and credentials are stored securely using .env files so nothing is hardcoded.

For maintenance, I use Portainer. The whole Docker management and Ubuntu itself run on the internal SSD for the fastest speed possible, ensuring no other services interfere.

For updates, I’m using a container called Watchtower that updates my Docker images automatically, together with unattended-upgrades to update system security packages.

The current architecture:
Server Architecture

Media Server

The core reason for my server: the media server. For that I'm using the *arr stack, which includes multiple containers handling everything. In the end it's a fully automated workflow where i only search stuff up on Jellyseerr and have them after 5 Minutes, ready to watch on my TV in the Jellyfin app.

I recommend checking out Trash Guides for more details about the *arr stack.

For the whole media server setup, I've dedicated a 3TB HDD, which is enough for now. Later, I can upgrade using JBOD bays

Media GUI

Cloud Server

With my remaining 1TB HDD, I thought of making a locally hosted cloud for all my devices to sync school and private documents, as well as images if needed. For that, I'm currently using Nextcloud, which runs well as long as there are no issues.

Cloud GUI

Meanwhile, I came across some problems and errors. I heard that using ownCloud, a simpler alternative, might be better — so I’ll try that in the near future before moving all my files over.

Networking

I'm paying for a 10Gbit down / 100Mbit up connection. However, the download is currently limited to 2.5Gbit because I don't have fiber yet — just HFC. Of those 2.5Gbit, I can only use 1Gbit, which is limited by the router. I'm currently looking for a new router so I can fully utilize the 2.5Gbit down.

An average movie with 5–15GB takes under 1 minute to download — perfect for fast availability.

Development

I still haven’t had the time to set up my DevOps & CI/CD pipeline environment for my codebases.

Currently, I’m running a simple dev stack in Docker:

Monitoring

I like keeping an eye on everything — both what’s running and what’s not.

  • Scrutiny monitors my HDD/SSD for temperatures, errors, and more, with a clean web UI.
  • Uptime Kuma pings my most important services (where possible via /health endpoints). If something is down, I immediately get a mobile notification.
  • NetAlertX is something fun I’m experimenting with — it provides network alerts when a device connects to the network for the first time. Whether it’s expected or possibly an intruder, I get a full notification with hostname and device info. Feels like a "network intruder alert".

Notifications on Discord:
Discord Notifications

AI & Automation

n8n

I've recently added a new stack to my server for AI and automation. First, I set up a self-hosted n8n container. With it, I can build various automated workflows.

To test things out, I followed an example workflow to try some basic automation:

n8n

Ollama

Out of curiosity, I wondered how much I could achieve with the computing power I have. So I tried hosting a local AI model using Ollama.

I pulled the Mistral model and added the Open WebUI container for a ChatGPT-like interface.

It's working, though the model is a bit slow and limited due to my hardware. But for basic private questions or integrating into my n8n workflows, it's perfect.

Here’s a screenshot where I asked it to review this blog:

Ollama

Conclusion and Learnings

In this relatively short time, I’ve learned a lot: setting up an Ubuntu server, managing drives and partitions, using Kubernetes and Docker for containers, writing Docker Compose files, Docker networking, volumes, exposing ports with internal:external mappings, and building a media server with the *arr stack that runs seamlessly across all my devices.

I also created my own cloud, set up a VPN system, and built a monitoring system with mobile alerts. Networking basics and troubleshooting permissions and path mappings between drives and containers were the most challenging.

My most-used resources: the official documentation of the tools I used, ChatGPT (came in clutch many times), and YouTube — especially when setting up Profilarr.

Future upgrades

After my university exams, I plan to:

  • Integrate AdGuard DNS
  • Add reverse proxies for better URL handling
  • Use dynv6 for dynamic DNS
  • Expand storage with more HDDs/SSDs in a JBOD bay
  • Upgrade my network gear to support 2.5Gbit
  • Set up full DevOps workflows and pipelines
  • Add password management
  • Host my personal web services and websites

If you have questions, feedback, or ideas for improvement, feel free to leave a comment! I’m always happy to chat and learn from others.

Top comments (0)