Skip to content

Hetzner VPS Overview

Server Details

Property Value
Provider Hetzner Cloud
Model CPX42
Location Falkenstein, Germany (FSN1)
OS Ubuntu 24.04 LTS
CPU 8 cores (AMD EPYC)
RAM 16 GB
Disk 301 GB NVMe
Public IP 46.224.146.107
Tailscale IP 100.80.53.55
SSH User kavi

SSH Access

# Via Tailscale (recommended)
ssh kavi@100.80.53.55
ssh kavi@cpx42-kavi-hetzner

# Via Public IP
ssh kavi@46.224.146.107

Running Services

Service Container Internal Port Purpose
Caddy caddy 80, 443 Reverse proxy + HTTPS
PostgreSQL postgres 5432 Database
Redis redis 6379 Cache
n8n n8n 5678 Workflow automation
imgproxy imgproxy 8080 Image transformations
KaviCloud kavicloud 5000 Image upload API
Portainer portainer 9000 Docker management

Directory Structure

/opt/docker/
├── docker-compose.yml      # Main compose file
├── .env                    # Secrets (chmod 600)
├── caddy/
│   ├── Caddyfile          # Reverse proxy config
│   └── data/              # Certificates
├── postgres/
│   └── data/              # Database files
├── redis/
│   └── data/              # Redis persistence
├── n8n/
│   └── data/              # Workflows & settings
├── imgproxy/              # No persistent data
├── kavicloud/
│   ├── app.py
│   ├── Dockerfile
│   └── data/              # Presets & queue
├── portainer/
│   └── data/
└── apps/                  # Future app deployments

Quick Commands

# SSH to server
ssh kavi@cpx42-kavi-hetzner

# View all containers
docker ps

# View logs
docker logs kavicloud --tail 50
docker logs n8n --tail 50

# Restart a service
cd /opt/docker && docker compose restart kavicloud

# Rebuild and restart
cd /opt/docker && docker compose up -d --build kavicloud

# View all logs
cd /opt/docker && docker compose logs -f --tail 50

# Check disk
df -h

Domain Routing

Domain Service Purpose
cdn.kua.cl imgproxy Image serving
media.kua.cl KaviCloud Upload API
n8n.kua.cl n8n Automation

Security

Feature Status
SSH Password Auth ❌ Disabled
SSH Key Auth ✅ Required
UFW Firewall ✅ Active
Fail2Ban ✅ Active
Auto Updates ✅ Enabled
Tailscale ✅ Connected

Database Access

Credentials in .env

All database credentials are stored in /opt/docker/.env. Never commit this file to git.

# Connect to PostgreSQL
docker exec -it postgres psql -U kavi -d main

# Connect to Redis
docker exec -it redis redis-cli -a $REDIS_PASSWORD