ilapaj Library
Articles 日本語
6 min read (1,101 words)

Notes on the Current State of My Homelab

This is an English translation of the original Japanese article, translated with the help of AI.
Table of Contents

It started with a search for an RSS reader, I fell down the self-hosting rabbit hole, and before I knew it I had built myself a home server.

So that I can hand it over easily whenever I consult Professor Gemini (the AI), I’m writing down the current state of my homelab.

🤖 Configuration summary for consulting Gemini (click to expand)
# My Homelab Configuration Summary
## Overall Architecture
- Hybrid configuration: OCI (Cloud) + Home Server (On-premises)
- Connected via Tailscale VPN.
## 1. OCI Server (paimon)
- **Instance**: Oracle Cloud Always Free (VM.Standard.E2.1.Micro)
- **Specs**: 1 OCPU (AMD EPYC 7551), 1 GB RAM
- **OS**: Ubuntu 24.04 LTS
- **Services (Docker Compose)**:
- FreshRSS (RSS Reader)
- RSSHub (RSS Generator)
- Uptime Kuma (Monitoring)
- Netdata (Monitoring)
- Nginx Proxy Manager (Reverse Proxy)
## 2. Home Server (Proxmox Host)
- **Hardware**:
- **Mobo**: ASRock B250M Pro4
- **CPU**: Intel Core i3-7100 @ 3.90GHz
- **Memory**: 40GB DDR4-2400
- **Storage**:
- 512GB NVMe SSD (Proxmox OS, VM disks)
- 8TB HDD (Media storage)
- **Virtualization**: Proxmox VE 9.0
- **IP Address**: 192.168.x.200 (Static)
### 2.1. VM: lumine (Main Service VM)
- **Assigned Resources**: 2 Cores, 8GB RAM
- **Services (Single Docker Compose)**:
- memos (Notes)
- jellyfin (Media Server, Intel QSV enabled)
- stash ("Library" management)
- homepage (Dashboard)
- copyparty (File sharing)
- netdata (Monitoring)
- adguard (Ad-blocking DNS)
- glances (Monitoring)
- npm (Internal Reverse Proxy, handles requests to `*.lumine`)
### 2.2. VM: noelle (Home Assistant)
- **Assigned Resources**: 2 Cores, 4GB RAM
- **OS**: Home Assistant Operating System (HAOS)
### 2.3. VM: nahida (Planned)
- **Purpose**: Dedicated for Immich (Photo management)
## 3. Network Configuration
- **Topology**: Fiber Modem -> Router (Bridge) -> Proxmox
- **Subnet**: 192.168.x.0/24
- **DNS**: AdGuard Home on `lumine` is set as the primary DNS for the LAN. It uses DNS rewrites for `*.lumine` to point to the `lumine` VM.
- **Remote Access**: Tailscale for secure access to local IPs.
## 4. Current Issues
- **paimon**: Unable to upgrade OCI account.
- **lumine**: Considering separating AdGuard Home into a dedicated LXC.
- **noelle**: Facing issues connecting a CO2 monitor to Wi-Fi.
- **nahida**: Need to set up Immich.

Overall Architecture#

My current homelab is a hybrid of a cloud server on OCI and a home server.

[Internet]
|
+-- [OCI Cloud] ------------------+
| | |
| +-- [VM] paimon |
| | (Tailscale VPN)
+-- [Home LAN] -------------------+
|
+-- [Fiber Modem] -> [Router (Bridge)] -> [Proxmox Server]
|
+-- [VM] lumine
+-- [VM] noelle

OCI and the home servers are connected over a Tailscale VPN, forming a single private network.

paimon (OCI Server)#

Running on Oracle Cloud’s Always Free tier (VM.Standard.E2.1.Micro). It hosts mainly the services that talk to the outside world, plus the ones I want to keep running even when the home server is down.

Specs#

  • Processor: AMD EPYC™ 7551 (1 OCPU, equivalent to 2 vCPUs)
  • Memory: 1 GB
  • Image: Ubuntu 24.04 LTS

Running Services#

Everything is managed with Docker Compose.

  • FreshRSS: The RSS reader itself
  • RSSHub: Turns sites that have no RSS feed into RSS
  • Uptime Kuma: Monitors the home server and each service from the outside
  • Netdata: Server resource monitoring
  • Nginx Proxy Manager: Reverse proxy to each service

Home Server (Proxmox)#

The main server in the house. I built it out of PC parts I used to have.

Hardware Specs#

  • Motherboard: ASRock B250M Pro4
  • CPU: Intel(R) Core(TM) i3-7100 @ 3.90GHz
  • Memory: 40GB
    • Crucial 4GB DDR4-2400 x2
    • Sanmax 16GB DDR4-2400 x2
  • Storage:
    • 512GB M.2 NVMe SSD (Apacer AS2280P4): For the Proxmox host OS and the system disks of VMs/LXCs
    • 240GB SSD (Sandisk SDSSDHII-240G-J26): (no purpose decided yet)
    • 8TB HDD (Seagate ST8000VN002): For large data such as media files
    • 1TB HDD (TOSHIBA DT01ACA100): (no purpose decided yet)
  • External Storage:
    • 2TB HDD: Planned as the destination for VM backups

OS and Virtualization Platform#

  • OS: Proxmox VE 9.0
  • Network: The physical NIC is bridged to vmbr0, and every VM uses it.
  • IP Address: Fixed at 192.168.x.200.

VM: lumine (the Service Mothership)#

A VM on Proxmox with 8GB of memory and 2 CPU cores assigned. Most of the services that support our digital life run here.

Running Services#

All of them are managed in a single docker-compose.yml.

  • memos: For everyday notes
  • jellyfin: Media server (Intel QSV enabled)
  • stash: “Library” management
  • homepage: A portal page linking to each service
  • copyparty: For file sharing and uploads
  • netdata: VM resource monitoring
  • adguard: An ad-blocking DNS server for the whole LAN
  • glances: A detailed resource monitor
  • npm: Reverse proxy for services inside the LAN

Service Management Policy#

  • Deployment: Everything is managed with Docker Compose.
  • Network: I created a custom bridge network called my-services and connected every container to it.
  • Accessing services:
    • npm (Nginx Proxy Manager) is used as the reverse proxy.
    • Each service is set up to be reachable at an easy-to-remember URL like http://memos.lumine or http://jellyfin.lumine.
  • Data persistence:
    • Each service’s config files are stored in a ./<service name>/ directory.
    • Media data for Jellyfin and the like is read from under /mnt/data/, which is mounted from the Proxmox host.

VM: noelle (Home Assistant)#

A VM on Proxmox with 4GB of memory and 2 CPU cores assigned. It runs Home Assistant Operating System (HAOS) directly.

VM: nahida (Planned)#

A VM on Proxmox. Considering resource consumption, I plan to run the photo management tool Immich on it all by itself.

System Details#

Network Configuration#

  • Physical connection: Fiber modem → my own router (bridge mode) → Proxmox server
  • IP addressing: 192.168.x.0/24 under the router. The Proxmox host is fixed at .200. Each VM gets its IP from the router’s DHCP.
  • DNS: In the router’s DHCP settings, I specify the IP of the AdGuard Home running on lumine as the DNS server. Using AdGuard Home’s DNS rewrite feature to point name resolution for the *.lumine domain at the lumine VM itself, I get the URL access like http://memos.lumine mentioned above.
  • Remote access: As mentioned earlier, I’ve set up Tailscale, so even when I’m out I can safely reach each service via the local IP 192.168.x.x.

Current Issues and Thoughts#

paimon#

I’m willing to pay OCI a bit of money, but the screen stays stuck on “Your account provisioning is in progress…” and I can’t upgrade to a paid account no matter what.

lumine#

I’m running way too many things on this service mothership, but performance-wise there’s still headroom. That said, for a service that sits at the very core of the network like AdGuard Home, it might be more stable to split it out into its own LXC in the future.

noelle#

I barely have any smart devices at home, so for now it only handles turning the desk light on and off. I want to add sensors and move toward a smart home from here. My existing CO2 monitor won’t connect to Wi-Fi for some reason, so I’ve hit the first wall.

nahida#

The whole reason I sorted data off my dying drives and added the 8TB HDD and more memory was to run Immich comfortably. I’m writing up this summary, too, to make setting up Immich go smoothly.

More articles

All articles →
ilapaj
ilapaj

Notes on games, radio and technology, translated from the Japanese blog.

封面
Sample Song
Sample Artist
封面
Sample Song
Sample Artist
0:00 / 0:00