# Hetzner VPS

## Description

This page documents facts received from the Codex session running on the Hetzner VPS / homelab server.

The relationship between this VPS and the Raspberry Pi 5 homelab is not yet clarified.

## Current configuration

- Hostname: `ubuntu-4gb-hel1-1`
- Public IPv4: `135.181.153.108`
- Public IPv6: `2a01:4f9:c014:98f0::1`
- Tailscale IP: `100.95.58.48`
- Incorrect Tailscale IP explicitly ruled out: `100.108.208.3`

Network interfaces reported:

- `docker0`: `172.17.0.1/16`, `DOWN`
- `br-b467702c0f28`: `172.18.0.1/16`, `DOWN`
- `br-40cc27c6ea24`: `172.19.0.1/16`, `DOWN`

Docker networks:

- `bridge`
- `host`
- `none`
- `npm_default`
- `proxy`
- Planned after Joplin start: `joplin-net`

Docker volumes:

- No Docker named volumes currently exist.
- Planned after Joplin start: `joplin_postgres_data`

Running containers:

- `npm`

## Known facts

- `npm` uses image `jc21/nginx-proxy-manager:latest`.
- `npm` status was reported as `Up about an hour`.
- `npm` Compose path is `/home/dockeruser/docker/npm`.
- `npm` uses `network_mode: host`.
- Because `npm` uses host networking, Nginx Proxy Manager binds directly to host ports.
- Nginx Proxy Manager admin UI responds `200 OK` internally at `http://127.0.0.1:81`.
- Nginx Proxy Manager HTTP listener responds `200 OK` internally at `http://127.0.0.1:80`.
- Nginx Proxy Manager responded `200 OK` at `http://100.95.58.48:81`.
- Nginx Proxy Manager responded `200 OK` at `http://135.181.153.108:81`.
- Nginx config test passes.
- Laptop-side diagnostics on 2026-04-15 verified:
  - `tailscale status` shows `ubuntu-4gb-hel1-1` at `100.95.58.48` as active.
  - `tailscale ping 100.95.58.48` returns pong responses through DERP relay `hel`.
  - `tailscale ping 100.95.58.48` reports direct connection not established.
  - `ping -c 4 100.95.58.48` returns 4 received, 0% packet loss.
  - `ping -c 4 135.181.153.108` returns 4 received, 0% packet loss.
  - `curl -v --connect-timeout 5 http://100.95.58.48:81` connects and returns `HTTP/1.1 200 OK`.
  - `curl -I --connect-timeout 5 http://100.95.58.48:81` returns `HTTP/1.1 200 OK`.
  - `curl -v --connect-timeout 5 http://135.181.153.108:81` connects and returns `HTTP/1.1 200 OK`.
  - `curl -I --connect-timeout 5 http://135.181.153.108:81` returns `HTTP/1.1 200 OK`.
- From a laptop/browser, the reported Nginx Proxy Manager admin UI URLs are:
  - `http://100.95.58.48:81` over Tailscale
  - `http://135.181.153.108:81` publicly if firewall allows it

Nginx Proxy Manager Compose file:

- Path: `/home/dockeruser/docker/npm/docker-compose.yml`
- Service:
  - `container_name: npm`
  - `image: jc21/nginx-proxy-manager:latest`
  - `restart: unless-stopped`
  - `network_mode: host`
  - `TZ: Europe/Warsaw`
  - Volumes:
    - `./data:/data`
    - `./letsencrypt:/etc/letsencrypt`

## Unknown / needs clarification

- Whether this Hetzner VPS is part of the homelab, a separate public edge, or both.
- Operating system version.
- Firewall rules.
- Whether port `81` is intentionally reachable on public IPv4.
- Whether ports `80` and `443` are publicly reachable from the internet.
- Why Tailscale direct connection is not established and traffic uses DERP relay `hel`.
- Whether any services other than `npm` are running outside Docker.
- Backup configuration.
- Monitoring and alerting configuration.
