Files
homelab-optimized/hosts/physical/guava/README.md
Gitea Mirror Bot 8664c8417c
Some checks failed
Documentation / Build Docusaurus (push) Failing after 9m20s
Documentation / Deploy to GitHub Pages (push) Has been skipped
Sanitized mirror from private repository - 2026-03-30 00:10:29 UTC
2026-03-30 00:10:29 +00:00

6.7 KiB

Guava - TrueNAS Scale Server

Hostname: guava
IP Address: 192.168.0.100
Tailscale IP: 100.75.252.64
Domain: guava.crista.home
OS: TrueNAS Scale 25.04.2.6 (Debian 12 Bookworm)
Kernel: 6.12.15-production+truenas


Hardware Specifications

Component Specification
CPU 12 cores
RAM 30 GB
Storage ZFS pools (1.5TB+ available)
Docker 27.5.0
Compose v2.32.3

Storage Layout

Boot Pool

  • / - Root filesystem (433GB available)
  • ZFS dataset: boot-pool/ROOT/25.04.2.6

Data Pool (/mnt/data/)

Dataset Size Used Purpose
data/guava_turquoise 3.0TB / 4.5TB Primary storage (67% used)
data/photos 159GB Photo storage
data/jellyfin 145GB Media library
data/llama 59GB LLM models
data/plane-data ~100MB Plane.so application data
data/iso 556MB ISO images
data/cocalc 324MB Computational notebook
data/website 59MB Web content
data/openproject 13MB OpenProject (postgres)
data/fasten 5.7MB Health records
data/fenrus 3.5MB Dashboard config
data/medical 14MB Medical records
data/truenas-exporters - Prometheus exporters

TrueNAS Apps (/mnt/.ix-apps/)

  • Docker storage: 28GB used
  • App configs and mounts for TrueNAS-managed apps

Network Configuration

Service Port Protocol URL
Portainer 31015 HTTPS https://guava.crista.home:31015
Plane.so 3080 HTTP http://guava.crista.home:3080
Plane.so HTTPS 3443 HTTPS https://guava.crista.home:3443
Jellyfin 30013 HTTP http://guava.crista.home:30013
Jellyfin HTTPS 30014 HTTPS https://guava.crista.home:30014
Gitea 30008-30009 HTTP http://guava.crista.home:30008
WireGuard 51827 UDP -
wg-easy UI 30058 HTTP http://guava.crista.home:30058
Fenrus 45678 HTTP http://guava.crista.home:45678
Fasten 9090 HTTP http://guava.crista.home:9090
Node Exporter 9100 HTTP http://guava.crista.home:9100/metrics
nginx 28888 HTTP http://guava.crista.home:28888
iperf3 5201 TCP -
SSH 22 TCP -
SMB 445 TCP -
Pi-hole DNS 53 TCP/UDP -

Portainer Access

Setting Value
URL https://guava.crista.home:31015
API Endpoint https://localhost:31015/api (from guava)
Endpoint ID 3 (local)
API Token ptr_REDACTED_PORTAINER_TOKEN

API Examples

# List stacks
curl -sk -H 'X-API-Key: "REDACTED_API_KEY" \
  'https://localhost:31015/api/stacks'

# List containers
curl -sk -H 'X-API-Key: "REDACTED_API_KEY" \
  'https://localhost:31015/api/endpoints/3/docker/containers/json'

# Create stack from compose string
curl -sk -X POST \
  -H 'X-API-Key: "REDACTED_API_KEY" \
  -H 'Content-Type: application/json' \
  'https://localhost:31015/api/stacks/create/standalone/string?endpointId=3' \
  -d '{"name": "my-stack", "REDACTED_APP_PASSWORD": "..."}'

Deployed Stacks (Portainer)

ID Name Status Description
2 nginx Active Reverse proxy (:28888)
3 ddns Active Dynamic DNS updater (crista.love)
4 llama ⏸️ Inactive LLM server
5 fenrus Active Dashboard (:45678)
8 fasten Active Health records (:9090)
17 node-exporter Active Prometheus metrics (:9100)
18 iperf3 Active Network speed testing (:5201)
25 cocalc ⏸️ Inactive Computational notebook
26 plane-stack Active Project management (:3080)

TrueNAS-Managed Apps (ix-apps)

App Container Port Description
Portainer ix-portainer-portainer-1 31015 Container management
Gitea ix-gitea-gitea-1 30008-30009 Git server
Gitea DB ix-gitea-postgres-1 - PostgreSQL for Gitea
Jellyfin ix-jellyfin-jellyfin-1 30013, 30014 Media server
WireGuard ix-wg-easy-wg-easy-1 30058, 51827/udp VPN server
Tailscale ix-tailscale-tailscale-1 - Mesh VPN
Pi-hole (configured) 53 DNS server

SSH Access

Via Cloudflare Tunnel

# Install cloudflared
curl -L https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64 -o /tmp/cloudflared
chmod +x /tmp/cloudflared

# SSH config
cat >> ~/.ssh/config << 'EOF'
Host guava
    HostName ruled-bowl-dos-jews.trycloudflare.com
    User vish
    IdentityFile ~/.ssh/id_ed25519
    ProxyCommand /tmp/cloudflared access ssh --hostname %h
EOF

# Connect
ssh guava

Direct (Local Network)

ssh vish@192.168.0.100

Note: Docker commands require sudo on guava.


Services Documentation

Plane.so

See plane.yaml for the full stack configuration.

Component Container Port Purpose
Frontend plane-web 3000 Web UI
Admin plane-admin 3000 Admin panel
Space plane-space 3000 Public pages
API plane-api 8000 Backend API
Worker plane-worker 8000 Background jobs
Beat plane-beat 8000 Scheduled tasks
Live plane-live 3000 Real-time updates
Database plane-db 5432 PostgreSQL
Cache plane-redis 6379 Valkey/Redis
Queue plane-mq 5672 RabbitMQ
Storage plane-minio 9000 MinIO S3
Proxy plane-proxy 80/443 Caddy reverse proxy

Access URL: http://guava.crista.home:3080

Data Location: /mnt/data/plane-data/


Maintenance

Backup Locations

Data Path Priority
Plane DB /mnt/data/plane-data/postgres/ High
Plane Files /mnt/data/plane-data/minio/ High
Gitea /mnt/.ix-apps/app_mounts/gitea/ High
Jellyfin Config /mnt/.ix-apps/app_mounts/jellyfin/config/ Medium
Photos /mnt/data/photos/ High

Common Commands

# Check all containers
sudo docker ps -a

# View stack logs
sudo docker compose -f /path/to/stack logs -f

# Restart a stack via Portainer API
curl -sk -X POST \
  -H 'X-API-Key: TOKEN' \
  'https://localhost:31015/api/stacks/STACK_ID/stop?endpointId=3'

curl -sk -X POST \
  -H 'X-API-Key: TOKEN' \
  'https://localhost:31015/api/stacks/STACK_ID/start?endpointId=3'


Last updated: February 4, 2026
Verified via SSH - all services confirmed running