Post

My Wife Started Calling My Desk The Server Room It Began With One Geekom A5 Pro

My Wife Started Calling My Desk The Server Room It Began With One Geekom A5 Pro

My Wife Started Calling My Desk The Server Room It Began With One Geekom A5 Pro

INTRODUCTION

When my wife first walked into my home office and declared, “Honey, this is now the server room,” I realized that the hobbyist’s corner I’d built around a single Geekom A5 Pro had silently transformed into a full‑blown production‑grade environment. What started as a modest experiment with a compact mini‑PC quickly evolved into a self‑hosted ecosystem that supports everything from personal blogs to CI/CD pipelines.

For seasoned sysadmins and DevOps engineers, the shift from a single‑board hobby box to a reliable infrastructure node is more than a novelty — it’s a case study in scaling, automation, and operational discipline within a homelab. This guide dissects the journey, the tools, and the best practices that turned my desk into a server room, focusing on the specific challenges and solutions that arise when a Geekom A5 Pro becomes the foundation of a self‑hosted stack.

Readers will learn:

  • How to evaluate and prepare a compact hardware platform for long‑term service.
  • The step‑by‑step process of installing and configuring Docker, Kubernetes (k3s), and complementary services.
  • Strategies for secure, performant, and maintainable operations in a homelab context. - Practical troubleshooting techniques and monitoring frameworks that keep the desk‑room humming.

By the end of this comprehensive article, you’ll have a clear roadmap to replicate a similar transformation, whether you’re running a single‑node homelab or planning to expand into a multi‑node self‑hosted cluster.

UNDERSTANDING THE TOPIC

What is a Geekom A5 Pro?

The Geekom A5 Pro is a mini‑PC powered by an Intel Core i5‑1240P processor, 8 GB (expandable to 32 GB) of DDR4 RAM, and dual‑M.2 NVMe slots. Its compact footprint (≈ 13 × 13 × 4 cm) and low power draw (≈ 15 W idle) make it ideal for dense homelab deployments where space and electricity cost matter. Unlike traditional rack servers, the A5 Pro operates silently in a desk environment, yet it supports full‑featured virtualization and container orchestration.

Historical Context

Early homelab enthusiasts relied on repurposed laptops or outdated workstations. The advent of low‑cost, energy‑efficient mini‑PCs like the Intel NUC, ASUS PN series, and the Geekom A5 Pro democratized access to reliable hardware. This shift enabled developers to run local clusters without the overhead of large servers, fostering experimentation with Kubernetes, Docker Swarm, and other orchestration tools.

Core Features and Capabilities

  • CPU Architecture: 12th‑gen Intel Core with 12 threads, supporting hardware‑assisted virtualization (VT‑x/AMD‑V).
  • Storage Flexibility: Two M.2 2280 slots allow for NVMe SSD RAID or separate OS/data drives.
  • Networking: Dual‑band Wi‑Fi 6 and 2.5 GbE Ethernet provide high‑throughput connectivity.
  • Power Management: Adaptive power scaling reduces idle consumption, crucial for 24/7 operation.

Pros and Cons

AdvantagesLimitations
Small footprint, quiet operationLimited expandability beyond M.2 slots
Low power consumptionSingle‑node constraint without external chassis
Affordable price point (~ $300‑$400)Integrated graphics may not suit GPU workloads
Supports full‑featured Linux distrosThermal throttling under sustained heavy load

Use Cases

  • Personal CI/CD Runner: Host GitLab Runner or Jenkins for private repository builds.
  • Self‑Hosted Git Services: Deploy Gitea or Forgejo for code collaboration.
  • Edge‑Compute Gateway: Run IoT device aggregators or MQTT brokers.
  • Development Sandbox: Provide isolated environments for Unity, game development, or graphic design workflows.

The mini‑PC market continues to evolve, with newer generations offering higher core counts and better thermal solutions. Expect tighter integration with ARM‑based devices, enabling cross‑architecture testing. Moreover, the rise of “edge‑first” architectures will push homelab operators to adopt more robust networking (e.g., 10 GbE) and storage (NVMe over Fabrics) solutions, even within compact form factors.

Comparison with Alternatives

PlatformCPURAM SlotsExpansionTypical Cost
Geekom A5 ProIntel i5‑1240P2 × SO‑DIMM (up to 32 GB)2 × M.2$350
Intel NUC 13Intel i7‑1360P2 × SO‑DIMM (up to 64 GB)2 × M.2$600
Raspberry Pi 5ARM Cortex‑A768 GB LPDDR4Xmicro‑SD only$75
Mini‑ITX BuildVarious4 × DIMM (up to 128 GB)PCIe slots$500+

The A5 Pro strikes a balance between cost, performance, and compactness, making it a sweet spot for hobbyists who need more than a single‑board computer can provide.

PREREQUISITES

|———–|———————-|—————————| | CPU | Intel Core i5‑1240P (or equivalent) | Intel Core i7‑1260P for heavier workloads | | RAM | 8 GB DDR4 | 16 GB DDR4 (for Kubernetes control plane) | | Storage | 256 GB NVMe SSD | 1 TB NVMe SSD (OS + data) | | Network | 1 GbE | 2.5 GbE or 10 GbE for high‑throughput services | | Power | 65 W adapter | Redundant 100 W PSU for stability |

Software Dependencies

  • Operating System: Ubuntu Server 22.04 LTS or Debian 12 (bookworm).
  • Container Engine: Docker Engine 24.0+ (CE).
  • Orchestration: k3s v1.29+ (lightweight Kubernetes).
  • Version Control: Git 2.40+.
  • Monitoring: Prometheus 2.50+ and Grafana 10+.

Network and Security Considerations

  • Assign a static IP (e.g., 192.168.1.10) via DHCP reservation.
  • Configure a dedicated VLAN for management traffic if integrating with home networking.
  • Harden SSH (disable root login, use key‑based auth).
  • Enable UFW with a minimal rule set: 22/tcp, 80/tcp, 443/tcp.

User Permissions - Create a dedicated devops group for sudo‑enabled operations.

  • Add your user to the group: sudo usermod -aG devops $USER. - Ensure Docker socket access: sudo usermod -aG docker $USER. ### Pre‑Installation Checklist
  1. Verify BIOS settings: enable VT‑x, disable Secure Boot.
  2. Update firmware: sudo fwupdmgr get-devices && sudo fwupdmgr update. 3. Install base OS and perform full system upgrade.
  3. Confirm hardware detection: lshw -class memory,network,cpu.
  4. Set hostname and DNS: /etc/hostname and /etc/hosts.

INSTALLATION & SETUP

Step 1: Install Docker Engine

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# Update package index
sudo apt-get update && sudo apt-get upgrade -y

# Install prerequisite packages
sudo apt-get install -y ca-certificates curl gnupg lsb-release

# Add Docker’s official GPG key
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

# Set up the stable repository
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] \
  https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# Refresh apt and install Docker
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io

# Verify installation
docker version

# Add current user to docker group
sudo usermod -aG docker $USER
newgrp docker

Step 2: Install k3s (Lightweight Kubernetes)

1
2
3
4
5
6
7
8
9
10
11
# Download the latest stable k3s binary
curl -sfL https://get.k3s.io | sh -s - --install-mode=single-node

# Verify k3s status
sudo systemctl status k3s# Check kubeconfig file
export KUBECONFIG=/etc/rancher/k3s/k3s.yaml
kubectl get nodes

# Optional: Enable containerd metrics for Prometheus
sudo mkdir -p /etc/rancher/k3s/extra-config
echo -e "[[plugins.\"io.rancher.k3s\\\"\\\"\\\"\"\n  \"containerd\" = {\n    \"default_runtime\" = \"runc\"\n    \"runtime_namespace\" = \"containerd\"\n  }\n]" | sudo tee /etc/rancher/k3s/extra-config/containerd.toml

Step 3: Deploy a Sample Application (e.g., Gitea)

```yaml# gitea-deployment.yaml apiVersion: apps/v1 kind: Deployment metadata: name: gitea labels: app: gitea spec: replicas: 1 selector: matchLabels: app: gitea template: metadata: labels: app: gitea spec: containers: - name: gitea image: gitea/gitea:latest ports: - containerPort: 3000 - containerPort: 22 env: - name: DB_TYPE value: “sqlite3” - name: DB_PATH value: “/data/gitea.db” - name: APP_NAME value: “My Homelab” - name: DB_HOST value: “localhost” - name: DB_PORT value: “3306” - name: DB_USER value: “gitea” - name: DB_PASSWORD value: “password” - name: DIRECT_URL value: “http://gitea.local” volumeMounts: - name: data mountPath: /data volumes: - name: data emptyDir: {} — apiVersion: v1kind: Service metadata: name: gitea spec: selector: app: gitea ports:

  • protocol: TCP port: 80 targetPort: 3000 type: LoadBalancer ```
1
2
3
4
5
# Apply the manifest
kubectl apply -f gitea-deployment.yaml

# Verify deployment
kubectl get pods,svc -l app=gitea

Step 4: Configure Persistent Storage ```yaml

persistent-volume.yaml

apiVersion: v1 kind: PersistentVolumemetadata: name: gitea-pv spec: capacity: storage: 10Gi accessModes: - ReadWriteOnce persistentVolumeReclaimPolicy: Retain storageClassName: standard hostPath: path: /mnt/gitea type: DirectoryOrCreate — apiVersion: v1 kind: PersistentVolumeClaim metadata: name: gitea-pvc spec: accessModes: - ReadWriteOnce resources: requests: storage: 10Gi storageClassName: standard

1
2
3
4
5
6
7
8
9
```bash
# Create the storage directory on the host
sudo mkdir -p /mnt/gitea
sudo chown $(whoami):$(whoami) /mnt/gitea

# Apply the PV and PVC manifests
kubectl apply -f persistent-volume.yaml
kubectl apply -f persistent-volume-claim.yaml

Step 5: Verify End‑to‑End Connectivity

1
2
# Access Gitea via the external IP (if LoadBalancer is supported)
curl -I http://$(kubectl get svc gitea -o jsonpath='{.status.loadBalancer.ingress[0].ip}'):80

If the LoadBalancer type is not supported by your home router, you can expose the service via NodePort and forward the port on your router.

CONFIGURATION & OPTIMIZATION

Security Hardening

  1. Docker Daemon TLS – Generate certificates and configure /etc/docker/daemon.json to enable TLS. 2. Network Policies
This post is licensed under CC BY 4.0 by the author.