All of these run on the same i7-8750H machine alongside Hyper-V and VirtualBox. Docker Desktop uses the WSL2 backend so the overhead is lower than running Docker in a full Linux VM. Dockge manages the compose files.

This Site — Grav CMS

The blog you're reading runs in a linuxserver/grav container. Pages live in a bind-mounted volume so the content survives container updates. The whole thing sits behind Nginx Proxy Manager (in a second container not listed here) and serves over HTTPS with an auto-renewed Let's Encrypt certificate.

Open WebUI

A ChatGPT-style interface for local AI models. Connects to Ollama running outside Docker (direct GPU access works better that way) and to the Anthropic and OpenAI APIs for tasks that need more reasoning depth. Every conversation stays on my machine.

n8n with MCP

n8n handles workflow automation. The MCP variant integrates with Model Context Protocol servers so AI agents in n8n can call external tools directly. I use it for alert processing, data pipeline automation and scheduled tasks that would otherwise need a cron job and a Python script.

Trilium Notes

Hierarchical note-taking with a tree structure. Every piece of knowledge I accumulate about a client's infrastructure, a tech I'm testing, or a config I want to remember lives here. Survives container rebuilds via a bind-mounted data directory.

PostgreSQL + pgAdmin

PostgreSQL 16 for application databases and personal projects. pgAdmin runs alongside it for query work and schema browsing. Both use named volumes so data persists across upgrades. I already had a write-up on PostgreSQL setup and tuning if you want the configuration details.

MinIO

S3-compatible object storage running on the local network. Anything that needs blob storage — backups, file uploads from applications, large binary assets — goes here instead of a cloud bucket. The API is identical to AWS S3 so switching between them requires no code changes.

MeTube

A web frontend for yt-dlp. Drop a URL into the UI and it downloads video or audio to a local folder. Clean interface, runs completely offline once installed. The downloaded files land in a bind-mounted directory accessible from the host.

DIUN — Docker Image Update Notifier

Polls container registries for new image versions and sends a notification when something has an update available. I get a Telegram message rather than discovering a container is six months behind when something breaks.

NCA Toolkit

The No-Code Architects Toolkit — a self-hosted AI workflow and file processing toolkit. Handles document conversion, AI-assisted data extraction and file transformation tasks without sending files to an external service.

Dockge

Visual Docker Compose manager. Every stack in my setup has its own compose file managed through Dockge's UI. Starting, stopping, editing and updating stacks takes seconds. Far cleaner than keeping track of compose files scattered across directories.

Apartments Web

A .NET ASP.NET application I'm building. Runs in a mcr.microsoft.com/dotnet/aspnet:10.0.5 container, exposed on port 8080. Having it containerised means the development and deployment environments match exactly.

The Full Stack at a Glance

Container Image Purpose
Grav linuxserver/grav This blog
Open WebUI open-webui/open-webui Local AI interface
n8n MCP n8n with MCP Workflow automation
Trilium zadam/trilium Personal knowledge base
PostgreSQL postgres:16 Databases
pgAdmin dpage/pgadmin4 DB management
MinIO minio/minio Object storage
MeTube alexta69/metube Video downloader
DIUN crazymax/diun Image update alerts
NCA Toolkit nca-toolkit AI file processing
Dockge louislam/dockge Compose manager
Apartments Web dotnet/aspnet Personal .NET app

Total RAM consumption at idle sits around 6GB. The machine handles all of this alongside active VMs because 64GB gives you room to run a homelab that would cost a lot more to host anywhere else.

Previous Post