# 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 ```bash # 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 ```bash # 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) ```bash ssh vish@192.168.0.100 ``` **Note**: Docker commands require `sudo` on guava. --- ## Services Documentation ### Plane.so See [plane.yaml](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 ```bash # 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' ``` --- ## Related Documentation - [Plane.so Service Docs](../../../docs/services/individual/plane.md) - [TrueNAS Scale Documentation](https://www.truenas.com/docs/scale/) - [AGENTS.md](../../../AGENTS.md) - Quick reference for all hosts --- *Last updated: February 4, 2026* *Verified via SSH - all services confirmed running*