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 |
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