• Begin Your Homelab Journey: Self-Hosting Apps on a Mini PC with Proxmox

    In this post, I’ll walk you through how to get started on your homelab journey using a mini PC to self-host applications such as Nextcloud (as a Google Drive alternative), Immich App (as a Google Photos replacement), and Jellyfin (for streaming your own movie collection)—all managed by Proxmox, utilizing LXC and Docker containers.

    Why Build a Homelab?

    • Privacy & Control: Host your data at home, your data stays within your home LAN.
    • Customization: Tailor your setup to match your exact storage, app, and streaming needs.
    • Learning Opportunity: Deepen your understanding of networking, security, containers, and virtualization.

    Hardware: The Mini PC – Efficient & Capable

    A mini PC is ideal for beginners in homelab. It’s compact, energy-efficient, and can pack a serious punch. Here are some considerations:

    • Low Power CPU: Mini PCs often come with low TDP (Thermal Design Power) CPUs. This helps keep your power bill low—even while running multiple services 24/7.
    • 16GB RAM Minimum: While some lighter setups might survive on 8GB, you’ll thank yourself for starting with 16GB. It gives you ample headroom to run containers and future-proof as you add services.
    • Dual 2.5G LAN Ports: Not a must, but with dual 2.5G LAN you’ll get better speed when transferring data between Proxmox clusters. You can split the network traffic between the VMs & Containers use and for Proxmox itself to manage backups and migrate VMs/Containers between clusters.

    Some Mini PC I’d recommend:

    Beelink Mini PC EQ14, Intel Twin Lake-N150 Prozessor (up to 3.6GHz), 16GB DDR4 500GB M.2 SSD, 4K Office Mini Computer, Dual 2.5G LAN/Dual HDMI/WiFi 6/BT5.2

    Beelink ME Mini PC, Intel N150 up to 3.6GHz, 12GB LPDDR5, 64GB eMMC, M.2 SSD 2TB, 6 M.2 NVMe Slots, Dual LAN 2.5Gbps, HDMI, WiFi 6, BT 5.2, USB-C

    Getting Started: The Quick Steps

    1. Choose and purchase your Mini PC
    2. Install a reliable NVMe drive.
    3. Flash Proxmox VE onto a USB stick, install on Mini PC.
    4. Login to Proxmox Web UI from any browser.
    5. Deploy LXC containers and Docker for each app:
      • Nextcloud (LXC or Docker)
      • Immich App (Docker)
      • Jellyfin (Docker)
    6. Configure backups, secure your setup, and enjoy private, local control!

    Why Power and RAM Matter

    • Low Power = Lower electricity bills and quieter operation (fanless, often!).
    • 16GB+ RAM = Smooth operation, ability to run multiple apps simultaneously, future service expansion.
    • Dual 2.5G LAN = Next-level networking, ready for link aggregation, VLANs, or even clustering mini PCs as your lab grows!

  • Transactional Outbox Pattern in Microservice Architecture

    Microservices architecture has revolutionized how developers build scalable and resilient systems. However, when services need to communicate seamlessly, challenges arise—especially around data consistency and reliable event delivery. The Transactional Outbox pattern emerges as a powerful solution for handling events within distributed transactions without the pitfalls of synchronous communication or complex two-phase commits.

    What is the Transactional Outbox Pattern?

    The outbox pattern (specifically transactional outbox) ensures that if a service successfully completes its business logic, it guarantees all associated events will be delivered reliably to other services. Here’s how it works:

    1. Event Generation: A microservice stores generated events directly in its own database table as part of the same transaction as its core data updates.
    2. Asynchronous Processing: An external process reads unprocessed events from the outbox and sends them via a message queue (e.g., RabbitMQ) or other transport.

    This decouples event generation from delivery, avoiding tight coupling between services while maintaining strong consistency guarantees within the originating service.

    The Problem Solved

    Microservices often rely on asynchronous communication for loosely coupled interaction. However, direct database writes to trigger inter-service events can lead to issues:

    • Synchronous Replication: Explicitly calling another service’s API during a transaction creates tight coupling and hinders scalability.
    • Event Loss: If an event fails during processing (e.g., due to network issues), it might not be retried or logged properly, leading to data inconsistency across services.

    The Transactional Outbox pattern addresses these by:

    • Using the database as a reliable intermediary for events within the same transaction boundary.
    • Decoupling the sending logic from the business operation via an outboxed log table and a separate consumer process.

    How It Works in Practice

    Key Components

    1. Outboxed Log Table: The service writes events to this table alongside its own data changes.
    2. Consumer Process: A background worker reads unprocessed events and sends them asynchronously through a message queue or other transport layer.
  • Must-Read Software Engineering Books

    Below are a couple of books I’d recommend a Software Engineer to read. Whether you are an aspiring Junior Software Engineer or an experienced Senior Software Engineer, these books could help you in your journey in shaping your career or the software you’re building.

    1. Domain-Driven Design: Tackling Complexity in the Heart of Software
      Author: Eric Evans

      Domain-Driven Design (DDD) helps you tackle complexity by building your software around the real-world business domain. Evans introduces powerful concepts like Ubiquitous Language, Bounded Contexts, and Aggregates to align code with the business.
    2. Software Architecture: The Hard Parts
      Author: Neal Ford, Mark Richards, Pramod Sadalage, Zhamak Dehghani

      Not your typical architecture book. This one dives into the real-world trade-offs architects face when working with distributed systems, microservices, and modern data architectures.
    3. The Pragmatic Programmer
      Author: Andrew Hunt & David Thomas

      First published in 1999 and still relevant today, this book is a must-read for any engineer. It covers the mindset, habits, and practical tips for becoming a better developer, teammate, and problem solver.
    4. The Software Engineer’s Guidebook
      Author: Gergely Orosz

      A behind-the-scenes guide to how software engineers grow their careers at top tech companies. Orosz draws from his time at Uber and Microsoft to explain how engineers can make a real impact.