This repository contains the complete configuration and documentation for my personal homelab infrastructure. The setup demonstrates practical knowledge of various technologies including virtualization, containerization, networking, and self-hosted services. All of this achieved with bypassing the lack of the public IP from the ISP.
┌──────────────┐ ┌───────────┐
│ │ │ │
│ Public │ │ Private │
│ Entrypoint │ │ Devices │
│ │ │ │
└───────┬──────┘ └──┬────────┘
│ │ ▲
▼ │ │
┌────────────────┐ │
│ │ │ │
│ Oracle VPS │ │ │
│ (HAProxy) │ │
│ │ │ │
└────────┬───────┘ │ │
│ │
▼ ▼ │
┌────────────────┐ │
DNS (AdGuard Home) │ Tailscale Mesh │
┌── ── ── ── ── ── ── ── ── ───┤ Network ├─── ──┘
└────────┬───────┘
▼ ┌────────────────┐ │
┌───────────────┐ │ │ │
│ Docker │ │ Home Server │ │
│ Containers │◄───┤ (Proxmox) │◄────────┘
└───────────────┘ │ │
└────────────────┘
- Virtualization: Proxmox VE
- Networking: Tailscale, HAProxy, Traefik
- Containerization: Docker, Docker Compose
- Security: CrowdSec, Authentik, Firewall
- Automation: GitHub Actions, Renovate
- Infrastructure as Code: All configurations stored in this repository
| Component | Specification | Proxy VPS |
|---|---|---|
| CPU | Intel Core i5-12600K (6 p-cores, 4 e-cores, 16 threads) | Ampere A1 Flex (4 cores) |
| RAM | 32GB DDR4 (2x16GB) | 20 GB |
| Storage | 1TB Dahua NVMe SSD + 5x 3TB Refurbished Segate HDD | 10 GB Block Storage |
| GPU | Intel UHD Graphics 770 | N/A |
| Network | 1Gbps Ethernet + Tailscale VPN | 4Gbps Ethernet + Tailscale |
| OS | Proxmox VE 8 | Ubuntu 24.04 Minimal |
The primary server runs Proxmox VE with VM containing various docker containers:
| Service | Description |
|---|---|
| Jellyfin | Media streaming server |
| Sonarr | TV show management |
| Radarr | Movie management |
| Bazarr | Subtitle management |
| Jellyseerr | Media request management |
| qBittorrent | Download client |
| Prowlarr | Indexer management |
| Recyclarr | Radarr/Sonarr configuration manager |
| Decluttarr | Media organization |
| Renamer | Custom media renaming service |
| Byparr | Cloudflare Turnstile bypass |
| Service | Description |
|---|---|
| Authentik Server | Identity provider and SSO |
| Authentik Worker | Background task processing |
| Authentik LDAP | LDAP provider outpost |
| PostgreSQL | Database for Authentik |
| Redis | Caching for Authentik |
| AdGuard Home | DNS-based ad blocking |
| CrowdSec | Security automation and threat detection |
| Postfix | Reverse mail service for containers |
| Service | Description |
|---|---|
| Traefik | Internal reverse proxy |
| HomeAssistant | Home automation |
| Homepage | Dashboard for services |
| ScanServJS | Scanner web interface |
| MSSQL | Microsoft SQL Server |
| HTTPD | Web server |
| Whoami | Testing service |
A VPS running on Oracle's free ARM tier with:
- HAProxy configured for reverse proxy with Proxy Protocol enabled to bypass CGNat
- Docker & Docker Compose
- Firewall rules:
- Allow HTTP/HTTPS from any source
- Allow SSH only from Tailscale network
Tailscale is utilized for:
- Secure VPN mesh connecting all infrastructure
- SSH authentication
- Automatic DNS configuration with AdGuard Home
- Game server sharing
- Zero-trust network architecture
- Self hosted proxy (Oracle VPS running as an exit node)
- GitHub Actions workflow for automated testing and deployment
- Renovate bot configured for:
- Automatic updates for minor releases
- Pull requests for major version updates
- Ensures infrastructure stays current and secure
Interstellar/
├─ .github/ # GitHub Actions workflows
├─ .vscode/ # VS Code configuration files
├─ .devcontainer/ # Testing environment
├─ Config/ # Template config files for services
├─ Scripts/ # Deploy scripts
├─ compose.*.yaml # Docker Compose files
├─ renovate.json # Renovate configuration
└─ README.md # The file that you're reading
- Domain
- Cloudflare Account
- SMTP Account
- Public IP address
- Start Tailscale with `` for docker IP resolving (may break Tailscale subnet routing)
- Clone this repository
- Rename
*.env.examplefiles to*.env - Update the values in the
.envfiles - Run
docker compose up -d - Set up *arr and fill out API keys in .env file
- Setup Authentik with Traefik
- Configure LDAP Authentik with Jellyfin (use manual outpost and set outpost token in
.envfile) - Run
docker compose up -dagain to apply new variables
- Implement proper backup solution
- Expand monitoring capabilities