Skip to content

Hetzner VPS Overview

Current Server Inventory

Server IP Type Role Managed By Status
bruno 188.34.198.57 CPX32 Production Terraform ✅ Active
development-vps 46.224.125.1 CX32 Development Manual ✅ Active

Decommissioned Servers

The following servers have been decommissioned and should be deleted:

- production-vps (116.203.109.220) - Legacy, replaced by Bruno
- prod-vps-2026 (195.201.98.132) - Failed provisioning attempt
- CPX42-Kavi-Hetzner (46.224.146.107) - Old Coolify monolith

Production Server: Bruno

Property Value
Name bruno
Provider Hetzner Cloud
Model CPX32
Location Nuremberg, Germany (NBG1)
OS Ubuntu 24.04 LTS
CPU 4 cores (AMD EPYC)
RAM 8 GB
Disk 160 GB NVMe
Public IP 188.34.198.57
SSH User root
Managed By Terraform + Ansible

SSH Access

# Direct SSH
ssh root@188.34.198.57

# Via SSH config alias (if configured)
ssh bruno

Running Services

Service Container URL Purpose
Traefik traefik *.kua.cl Reverse Proxy (v3.6+)
Infisical infisical secrets.kua.cl Secret management
Kuanary kuanary media.kua.cl Media CDN API
imgproxy imgproxy cdn.kua.cl Image transformations
Obsidian obsidian notes.kua.cl Note taking
Forgejo forgejo git.kua.cl Self-hosted Git
infra-docs infra-docs docs.kua.cl This documentation
PostgreSQL postgres Internal Database (Shared)
Redis redis Internal Cache (Shared)
Watchtower watchtower - Auto-updates

Development Server

Property Value
Name development-vps
Provider Hetzner Cloud
Model CX32
Location Nuremberg, Germany (NBG1)
OS Ubuntu 24.04 LTS
CPU 4 cores
RAM 8 GB
Disk 80 GB NVMe
Public IP 46.224.125.1
SSH User root
Managed By Manual (not in Terraform)

Running Services

Service Container Purpose
Open WebUI open-webui AI Chat Interface
Ollama ollama Local LLM Runtime

Directory Structure (Bruno)

/root/coder-core/
├── services/
│   └── production/
│       ├── docker-compose.yml    # Main stack definition
│       ├── .env                  # Secrets (from Infisical)
│       ├── postgres/data/        # PostgreSQL data
│       ├── redis/data/           # Redis data
│       ├── letsencrypt/          # SSL certificates
│       └── forgejo/data/         # Git repositories
├── kuanary/                      # Kuanary source (for builds)
└── docs/                         # infra-docs source (for builds)

/mnt/
├── storagebox/                   # Hetzner Storage Box (5TB SFTP)
│   ├── obsidian/vaults/          # Obsidian notes
│   ├── git/                      # Forgejo git repos
│   └── backups/                  # Database backups
└── s3/                           # Hetzner Object Storage

Domain Routing (Traefik)

Domain Service Port Notes
secrets.kua.cl Infisical 8080 Proxied via Cloudflare
git.kua.cl Forgejo 3000 DNS Only (no proxy)
media.kua.cl Kuanary 5000 Upload API
cdn.kua.cl imgproxy 8080 Image serving
notes.kua.cl Obsidian 3000 Note taking
docs.kua.cl infra-docs 8000 This documentation

Quick Commands

# Check all containers on Bruno
ssh root@188.34.198.57 "docker ps --format 'table {{.Names}}\t{{.Status}}'"

# View Traefik logs
ssh root@188.34.198.57 "docker logs --tail 50 traefik"

# Restart a service
ssh root@188.34.198.57 "docker restart <container_name>"

# Check storage mounts
ssh root@188.34.198.57 "df -h | grep mnt"

# Deploy updates
cd ~/coder-core/ansible
ansible-playbook playbooks/deploy-services.yml --limit bruno \
  -e "infisical_client_id=YOUR_ID" \
  -e "infisical_client_secret=YOUR_SECRET"


Last updated: January 2026 - Bruno is the active production server