← Back to Articles

Beginner Homelab Setup


I’ve always been curious about how servers and hosting actually work, so I decided to stop just reading and start building something myself. I didn’t want to spend much, so I started with a small machine I already had. Also, this blog is actually hosted on my own homelab 🙂. Topology of my setup :

flowchart TB

%% ===================== %% EXTERNAL %% ===================== Internet["🌐 Internet"] VPN["🔒 VPN Provider"]

Internet <-->|Traffic| VPN

%% ===================== %% NETWORK LAYER %% ===================== subgraph NET["🏠 Home Network (192.168.50.0/24)"] R["Router (VPN client)"] PC["Workstation"] PVE["Proxmox Host\n192.168.50.200"] end

VPN <-->|Encrypted tunnel| R R --> PC R --> PVE

%% ===================== %% COMPUTE LAYER %% ===================== subgraph COMPUTE["🖥️ Proxmox Guests"] CT101["CT101\nAdGuard"] CT102["CT102\nJellyfin + Samba\n192.168.50.76"] VM100["VM100\nUbuntu + Nginx\n192.168.50.146"] end

PVE --> CT101 PVE --> CT102 PVE --> VM100

%% ===================== %% SERVICES LAYER %% ===================== subgraph SERVICES["⚙️ Services"] DNS["DNS"] JF["Jellyfin :8096"] SMB["Samba :445"] NG["Nginx :80"] end

CT101 --> DNS CT102 --> JF CT102 --> SMB VM100 --> NG

%% ===================== %% STORAGE LAYER %% ===================== subgraph STORAGE["💾 Storage"] SSD["SSD (Proxmox OS)"] HDD1["4TB HDD (/mnt/hdd)"] HDD2["4TB HDD (/mnt/hdd2)"] end

SSD --> PVE HDD1 --> PVE HDD2 --> PVE

%% ===================== %% DATA FLOW %% ===================== subgraph DATA["📂 Data Usage"] D1["HDD → Media"] D2["HDD2 → Media"] end

HDD1 --> D1 --> CT102 HDD2 --> D2 --> CT102

%% ===================== %% MONITORING %% ===================== subgraph MON["📊 Monitoring"] SCR["Scrutiny :8080"] TEL["Telegram Health Script"] end

PVE --> SCR PVE --> TEL


Hardware used is Dell Wyse 7040 (mini PC). Decent spec for RM300.

  • Intel i5-6500TE
  • 8GB RAM
  • 500GB SSD

Nothing powerful, but it gets the job done. Everything runs on Proxmox, which lets me split services cleanly. Right now, I’m running:

  • AdGuard for DNS filtering
  • Jellyfin as a media server
  • Samba for file sharing
  • Ubuntu VM with Nginx (this blog is hosted here)

For networking, I enabled a VPN on the router. That way, all outbound traffic goes through it without needing to configure each service individually. Storage is still a bit messy. I’m using the SSD for the system and a couple of external HDDs for media storage, currently formatted as NTFS and exFAT. It’s not the best setup for Linux, but it works for now and I’ll improve it later. The goal is to slowly turn this into a proper NAS. I plan to add a drive enclosure, expand the number of disks, and move to a better filesystem like ZFS or ext4. I didn’t go for a prebuilt NAS since it’s expensive, and I prefer building things myself. I’m planning to set up Immich as a self-hosted alternative to Google Photos. The idea is to keep my photos locally while still having a backup in the cloud, so I’m not relying on a single storage location.

It’s not perfect, but it works, and I understand it.

Izat Emir

Izat Emir

I’m a self-taught programmer with no formal work experience as a developer, currently working toward a fresh start as a .NET developer. I spend my time learning, building small projects, and understanding how real-world applications are designed and maintained. This blog is a place where I document what I learn, share my progress, mistakes, and experiments, and track my journey as I grow from a self-learner into a professional software developer.

Comments

💬 Comments are powered by Utterances, a lightweight comments widget built on GitHub issues. To comment, you'll need a GitHub account.