Running my own infrastructure

Hi, I'm Reese Wells
I build and maintain self-hosted systems

A systems-focused developer passionate about self-hosting, infrastructure automation, and building reliable services that just work. From container orchestration to local AI, I manage a full homelab stack from DNS to deployment.

Infrastructure, automation, and self-hosting

I'm a systems developer who thrives on building and maintaining self-hosted infrastructure. My work spans the full stack of homelab operations: from OS image building with osbuild and Ansible-driven deployments, to container orchestration with Podman quadlets and Kubernetes, to local AI inference and observability.

I maintain two main repositories: one for documentation, notes, and tutorials on self-hosted services, and another for the automation layer that deploys and manages services across a fleet of servers. Every service runs as a rootless container with dedicated systemd user sessions, backed by centralized BorgBackup.

80+
Services
2
Domains
100%
Self-Hosted

What I work with

A broad toolkit focused on infrastructure, automation, and self-hosted services.

Container Orchestration

Rootless containers managed via Podman quadlets, Docker Compose, and Kubernetes clusters with Helm charts.

Podman Docker Kubernetes k3s

Infrastructure Automation

Ansible playbooks drive deployments across a multi-server fleet with strict SOP ordering and centralized configuration.

Ansible osbuild systemd BorgBackup

Networking & DNS

AWS Route53 powers all DNS management with DDNS auto-updating, Caddy reverse proxy with Route53 DNS-validated TLS, and dual-domain strategy.

Route53 Caddy Nginx WireGuard
🤖

Local AI & ML

Full local AI stack: Ollama, LiteLLM, LocalAI for inference, Langfuse for observability, with CUDA and ROCm support.

Ollama LocalAI Langfuse ROCm

Python

Python is the backbone of the homelab: DDNS updates, fleet-wide deployment scripts, AWS integration, and automation tooling with boto3, rich, and uv.

Python boto3 uv mypy

Featured Projects

What I've built

A selection of projects from my homelab and deployment infrastructure.

version: '3.8'
services:
  caddy:
    image: caddy:2-alpine
    networks:
      - default
    labels:
      - "caddy.*.reeseapps.com"

Reverse Proxy Infrastructure

Caddy and Nginx reverse proxies serving all *.reeseapps.com domains with AWS Route53 DNS-validated TLS. DDNS auto-updates IPv4/IPv6 records across the fleet.

Caddy Nginx Route53 Podman
def update_record(domain):
  ipv4 = get_public_ip()
  record = route53.find(domain)
  if record.value != ipv4:
    route53.update(record, ipv4)
    log(f"Updated {domain}")
 
# Run every 5 minutes

Dynamic DNS Service

Automated DDNS keeping AWS Route53 records updated for all servers. Manages dual-domain strategy: reeseapps.com for public services and reeselink.com for internal machine-to-machine connections.

Python AWS CLI Route53 Podman
from ollama import Client
 
client = Client("http://localhost:11434")
response = client.chat(
  model="llama3",
  messages=[...]
)
 
# LiteLLM proxy for unified API

Local AI Stack

Complete local AI infrastructure: Ollama and LocalAI for inference, LiteLLM as a unified API proxy, Bifrost for model routing, and Langfuse for observability. Supports both CUDA and ROCm.

Ollama LocalAI LiteLLM Langfuse
# Ansible playbook
- name: Deploy Gitea
  hosts: gitea
  tasks:
  - docker_compose_v2:
    project_src: /opt/gitea
    state: present

Deployment Automation

Ansible-driven deployment pipeline with strict SOP ordering (osbuild -> ddns -> caddy -> nginx -> ntfy -> gitea). Each service runs as a rootless container with dedicated systemd user sessions and centralized BorgBackup.

Ansible Podman systemd Borg
# Self-hosted services
- Immich # Photo/video management
- Jellyfin # Media streaming
- Nextcloud # Cloud storage & sync
- Gitea # Git service
- Matrix # Chat protocol
- Home Assistant # Smart home
- Pi-hole # DNS ad blocking

Self-Hosted Services

A diverse fleet of self-hosted services: Immich for photos, Jellyfin for media, Nextcloud for storage, Matrix for chat, Home Assistant for IoT, and more. Each running as rootless Podman containers with SELinux awareness.

Immich Jellyfin Nextcloud Matrix
# Kubernetes with k3s
- metallb # L2 load balancer
- longhorn # Distributed storage
- traefik # Ingress gateway
- external-dns # Route53 integration
- grafana # Metrics dashboards
- minecraft # Game server

Kubernetes Cluster

k3s and k0s Kubernetes clusters with MetalLB for L2 failover, Longhorn for distributed storage, Traefik/Nginx ingress, cert-manager with Route53 DNS challenge, and Helm charts for service deployment.

k3s Kubernetes Helm MetalLB

Get In Touch

Let's connect

Always open to discussing self-hosting, infrastructure, open source, or just sharing homelab stories.