Sanitized mirror from private repository - 2026-04-18 11:19:59 UTC
This commit is contained in:
234
hosts/physical/guava/README.md
Normal file
234
hosts/physical/guava/README.md
Normal file
@@ -0,0 +1,234 @@
|
||||
# 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*
|
||||
23
hosts/physical/guava/guava_info.txt
Normal file
23
hosts/physical/guava/guava_info.txt
Normal file
@@ -0,0 +1,23 @@
|
||||
Guava CIFS/SMB Shares
|
||||
|
||||
data /mnt/data/passionfruit
|
||||
guava_turquoise /mnt/data/guava_turquoise Backup of turquoise
|
||||
photos /mnt/data/photos
|
||||
|
||||
|
||||
Global Configuration
|
||||
Nameservers
|
||||
Nameserver 1:
|
||||
1.1.1.1
|
||||
Nameserver 2:
|
||||
192.168.0.250
|
||||
Default Route
|
||||
IPv4:
|
||||
192.168.0.1
|
||||
Hostname:guava
|
||||
Domain: local
|
||||
HTTP Proxy:---
|
||||
Service Announcement: NETBIOS-NS, mDNS, WS-DISCOVERY
|
||||
Additional Domains:---
|
||||
Hostname Database:---
|
||||
Outbound Network:Allow All
|
||||
213
hosts/physical/guava/plane.yaml
Normal file
213
hosts/physical/guava/plane.yaml
Normal file
@@ -0,0 +1,213 @@
|
||||
# Plane.so - Self-Hosted Project Management
|
||||
# Deployed via Portainer on TrueNAS Scale (guava)
|
||||
# Port: 3080 (HTTP), 3443 (HTTPS)
|
||||
|
||||
x-db-env: &db-env
|
||||
PGHOST: plane-db
|
||||
PGDATABASE: plane
|
||||
POSTGRES_USER: plane
|
||||
POSTGRES_PASSWORD: "REDACTED_PASSWORD"
|
||||
POSTGRES_DB: plane
|
||||
POSTGRES_PORT: 5432
|
||||
PGDATA: /var/lib/postgresql/data
|
||||
|
||||
x-redis-env: &redis-env
|
||||
REDIS_HOST: plane-redis
|
||||
REDIS_PORT: 6379
|
||||
REDIS_URL: redis://plane-redis:6379/
|
||||
|
||||
x-minio-env: &minio-env
|
||||
MINIO_ROOT_USER: ${AWS_ACCESS_KEY_ID:-planeaccess}
|
||||
MINIO_ROOT_PASSWORD: "REDACTED_PASSWORD"
|
||||
|
||||
x-aws-s3-env: &aws-s3-env
|
||||
AWS_REGION: us-east-1
|
||||
AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID:-planeaccess}
|
||||
AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY:-planesecret123}
|
||||
AWS_S3_ENDPOINT_URL: http://plane-minio:9000
|
||||
AWS_S3_BUCKET_NAME: uploads
|
||||
|
||||
x-proxy-env: &proxy-env
|
||||
APP_DOMAIN: ${APP_DOMAIN:-guava.crista.home}
|
||||
FILE_SIZE_LIMIT: 52428800
|
||||
LISTEN_HTTP_PORT: 80
|
||||
LISTEN_HTTPS_PORT: 443
|
||||
BUCKET_NAME: uploads
|
||||
SITE_ADDRESS: :80
|
||||
|
||||
x-mq-env: &mq-env
|
||||
RABBITMQ_HOST: plane-mq
|
||||
RABBITMQ_PORT: 5672
|
||||
RABBITMQ_DEFAULT_USER: plane
|
||||
RABBITMQ_DEFAULT_PASS: "REDACTED_PASSWORD"REDACTED_PASSWORD"
|
||||
RABBITMQ_DEFAULT_VHOST: plane
|
||||
RABBITMQ_VHOST: plane
|
||||
|
||||
x-live-env: &live-env
|
||||
API_BASE_URL: http://api:8000
|
||||
LIVE_SERVER_SECRET_KEY: ${LIVE_SERVER_SECRET_KEY:-60gp0byfz2dvffa45cxl20p1scy9xbpf6d8c5y0geejgkyp1b5}
|
||||
|
||||
x-app-env: &app-env
|
||||
WEB_URL: ${WEB_URL:-http://guava.crista.home:3080}
|
||||
DEBUG: 0
|
||||
CORS_ALLOWED_ORIGINS: ${CORS_ALLOWED_ORIGINS:-}
|
||||
GUNICORN_WORKERS: 2
|
||||
USE_MINIO: 1
|
||||
DATABASE_URL: postgresql://plane:${POSTGRES_PASSWORD:"REDACTED_PASSWORD"
|
||||
SECRET_KEY: ${SECRET_KEY:-60gp0byfz2dvffa45cxl20p1scy9xbpf6d8c5y0geejgkyp1b5}
|
||||
AMQP_URL: amqp://plane:${RABBITMQ_PASSWORD:"REDACTED_PASSWORD"
|
||||
API_KEY_RATE_LIMIT: 60/minute
|
||||
MINIO_ENDPOINT_SSL: 0
|
||||
LIVE_SERVER_SECRET_KEY: ${LIVE_SERVER_SECRET_KEY:-60gp0byfz2dvffa45cxl20p1scy9xbpf6d8c5y0geejgkyp1b5}
|
||||
|
||||
services:
|
||||
web:
|
||||
image: artifacts.plane.so/makeplane/plane-frontend:stable
|
||||
container_name: plane-web
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
- api
|
||||
- worker
|
||||
|
||||
space:
|
||||
image: artifacts.plane.so/makeplane/plane-space:stable
|
||||
container_name: plane-space
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
- api
|
||||
- worker
|
||||
- web
|
||||
|
||||
admin:
|
||||
image: artifacts.plane.so/makeplane/plane-admin:stable
|
||||
container_name: plane-admin
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
- api
|
||||
- web
|
||||
|
||||
live:
|
||||
image: artifacts.plane.so/makeplane/plane-live:stable
|
||||
container_name: plane-live
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
<<: [*live-env, *redis-env]
|
||||
depends_on:
|
||||
- api
|
||||
- web
|
||||
|
||||
api:
|
||||
image: artifacts.plane.so/makeplane/plane-backend:stable
|
||||
container_name: plane-api
|
||||
command: ./bin/docker-entrypoint-api.sh
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
<<: [*app-env, *db-env, *redis-env, *minio-env, *aws-s3-env, *proxy-env]
|
||||
depends_on:
|
||||
plane-db:
|
||||
condition: service_healthy
|
||||
plane-redis:
|
||||
condition: service_started
|
||||
plane-mq:
|
||||
condition: service_started
|
||||
|
||||
worker:
|
||||
image: artifacts.plane.so/makeplane/plane-backend:stable
|
||||
container_name: plane-worker
|
||||
command: ./bin/docker-entrypoint-worker.sh
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
<<: [*app-env, *db-env, *redis-env, *minio-env, *aws-s3-env, *proxy-env]
|
||||
depends_on:
|
||||
- api
|
||||
- plane-db
|
||||
- plane-redis
|
||||
- plane-mq
|
||||
|
||||
beat-worker:
|
||||
image: artifacts.plane.so/makeplane/plane-backend:stable
|
||||
container_name: plane-beat
|
||||
command: ./bin/docker-entrypoint-beat.sh
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
<<: [*app-env, *db-env, *redis-env, *minio-env, *aws-s3-env, *proxy-env]
|
||||
depends_on:
|
||||
- api
|
||||
- plane-db
|
||||
- plane-redis
|
||||
- plane-mq
|
||||
|
||||
migrator:
|
||||
image: artifacts.plane.so/makeplane/plane-backend:stable
|
||||
container_name: plane-migrator
|
||||
command: ./bin/docker-entrypoint-migrator.sh
|
||||
restart: on-failure
|
||||
environment:
|
||||
<<: [*app-env, *db-env, *redis-env, *minio-env, *aws-s3-env, *proxy-env]
|
||||
depends_on:
|
||||
plane-db:
|
||||
condition: service_healthy
|
||||
plane-redis:
|
||||
condition: service_started
|
||||
|
||||
plane-db:
|
||||
image: postgres:15.7-alpine
|
||||
container_name: plane-db
|
||||
command: postgres -c 'max_connections=1000'
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
<<: *db-env
|
||||
volumes:
|
||||
- /mnt/data/plane-data/postgres:/var/lib/postgresql/data
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "pg_isready -U plane -d plane"]
|
||||
interval: 10s
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
|
||||
plane-redis:
|
||||
image: valkey/valkey:7.2.11-alpine
|
||||
container_name: plane-redis
|
||||
restart: unless-stopped
|
||||
volumes:
|
||||
- /mnt/data/plane-data/redis:/data
|
||||
|
||||
plane-mq:
|
||||
image: rabbitmq:3.13.6-management-alpine
|
||||
container_name: plane-mq
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
<<: *mq-env
|
||||
volumes:
|
||||
- /mnt/data/plane-data/rabbitmq:/var/lib/rabbitmq
|
||||
|
||||
plane-minio:
|
||||
image: minio/minio:latest
|
||||
container_name: plane-minio
|
||||
command: server /export --console-address ":9090"
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
<<: *minio-env
|
||||
volumes:
|
||||
- /mnt/data/plane-data/minio:/export
|
||||
|
||||
proxy:
|
||||
image: artifacts.plane.so/makeplane/plane-proxy:stable
|
||||
container_name: plane-proxy
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
<<: *proxy-env
|
||||
ports:
|
||||
- "3080:80"
|
||||
- "3443:443"
|
||||
depends_on:
|
||||
- web
|
||||
- api
|
||||
- space
|
||||
- admin
|
||||
- live
|
||||
|
||||
networks:
|
||||
default:
|
||||
name: plane-network
|
||||
driver: bridge
|
||||
25
hosts/physical/guava/portainer_yaml/cocalc.yaml
Normal file
25
hosts/physical/guava/portainer_yaml/cocalc.yaml
Normal file
@@ -0,0 +1,25 @@
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
cocalc:
|
||||
image: sagemathinc/cocalc-docker:latest
|
||||
container_name: cocalc
|
||||
restart: unless-stopped
|
||||
|
||||
ports:
|
||||
- "8080:443" # expose CoCalc HTTPS on port 8080
|
||||
# or "443:443" if you want it directly bound to 443
|
||||
|
||||
volumes:
|
||||
# Persistent project and home directories
|
||||
- /mnt/data/cocalc/projects:/projects
|
||||
- /mnt/data/cocalc/home:/home/cocalc
|
||||
|
||||
# Optional: shared local "library of documents"
|
||||
- /mnt/data/cocalc/library:/projects/library
|
||||
|
||||
environment:
|
||||
- TZ=America/Los_Angeles
|
||||
- COCALC_NATS_AUTH=false # disable NATS auth for standalone use
|
||||
# - COCALC_ADMIN_PASSWORD="REDACTED_PASSWORD" # optional admin password
|
||||
# - COCALC_NO_IDLE_TIMEOUT=true # optional: stop idle shutdowns
|
||||
18
hosts/physical/guava/portainer_yaml/dynamic_dns.yaml
Normal file
18
hosts/physical/guava/portainer_yaml/dynamic_dns.yaml
Normal file
@@ -0,0 +1,18 @@
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
ddns-crista-love:
|
||||
image: favonia/cloudflare-ddns:latest
|
||||
container_name: ddns-crista-love
|
||||
network_mode: host
|
||||
restart: unless-stopped
|
||||
user: "3000:3000"
|
||||
read_only: true
|
||||
cap_drop:
|
||||
- all
|
||||
security_opt:
|
||||
- no-new-privileges:true
|
||||
environment:
|
||||
- CLOUDFLARE_API_TOKEN=${CLOUDFLARE_API_TOKEN}
|
||||
- DOMAINS=crista.love,cle.crista.love,cocalc.crista.love,mm.crista.love
|
||||
- PROXIED=true
|
||||
12
hosts/physical/guava/portainer_yaml/fasten_health.yaml
Normal file
12
hosts/physical/guava/portainer_yaml/fasten_health.yaml
Normal file
@@ -0,0 +1,12 @@
|
||||
version: "3.9"
|
||||
|
||||
services:
|
||||
fasten:
|
||||
image: ghcr.io/fastenhealth/fasten-onprem:main
|
||||
container_name: fasten-onprem
|
||||
ports:
|
||||
- "9090:8080"
|
||||
volumes:
|
||||
- /mnt/data/fasten/db:/opt/fasten/db
|
||||
- /mnt/data/fasten/cache:/opt/fasten/cache
|
||||
restart: unless-stopped
|
||||
19
hosts/physical/guava/portainer_yaml/fenrus_dashboard.yaml
Normal file
19
hosts/physical/guava/portainer_yaml/fenrus_dashboard.yaml
Normal file
@@ -0,0 +1,19 @@
|
||||
version: "3.9"
|
||||
|
||||
services:
|
||||
fenrus:
|
||||
image: revenz/fenrus:latest
|
||||
container_name: fenrus
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "curl -f http://127.0.0.1:3000/ || exit 1"]
|
||||
interval: 30s
|
||||
timeout: 5s
|
||||
retries: 3
|
||||
start_period: 90s
|
||||
ports:
|
||||
- "45678:3000"
|
||||
volumes:
|
||||
- /mnt/data/fenrus:/app/data:rw
|
||||
environment:
|
||||
TZ: America/Los_Angeles
|
||||
restart: unless-stopped
|
||||
41
hosts/physical/guava/portainer_yaml/llama_gpt.yaml
Normal file
41
hosts/physical/guava/portainer_yaml/llama_gpt.yaml
Normal file
@@ -0,0 +1,41 @@
|
||||
version: "3.9"
|
||||
|
||||
services:
|
||||
ollama:
|
||||
image: ollama/ollama:latest
|
||||
container_name: ollama
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "11434:11434"
|
||||
environment:
|
||||
- OLLAMA_KEEP_ALIVE=10m
|
||||
volumes:
|
||||
- /mnt/data/llama:/root/.ollama
|
||||
# --- Optional AMD iGPU offload (experimental on SCALE) ---
|
||||
# devices:
|
||||
# - /dev/kfd
|
||||
# - /dev/dri
|
||||
# group_add:
|
||||
# - "video"
|
||||
# - "render"
|
||||
# environment:
|
||||
# - OLLAMA_KEEP_ALIVE=10m
|
||||
# - HSA_ENABLE_SDMA=0
|
||||
# - HSA_OVERRIDE_GFX_VERSION=11.0.0
|
||||
|
||||
openwebui:
|
||||
image: ghcr.io/open-webui/open-webui:latest
|
||||
container_name: open-webui
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
- ollama
|
||||
ports:
|
||||
- "3000:8080" # browse to http://<truenas-ip>:3000
|
||||
environment:
|
||||
# Either var works on recent builds; keeping both for compatibility
|
||||
- OLLAMA_API_BASE_URL=http://ollama:11434
|
||||
- OLLAMA_BASE_URL=http://ollama:11434
|
||||
# Set to "false" to allow open signup without password
|
||||
- WEBUI_AUTH=true
|
||||
volumes:
|
||||
- /mnt/data/llama/open-webui:/app/backend/data
|
||||
10
hosts/physical/guava/portainer_yaml/llama_info.txt
Normal file
10
hosts/physical/guava/portainer_yaml/llama_info.txt
Normal file
@@ -0,0 +1,10 @@
|
||||
My recommended use on your setup:
|
||||
Model Use case
|
||||
Llama3.1:8b Main general-purpose assistant
|
||||
Mistral:7b Fast, concise replies & RAG
|
||||
Qwen2.5:3b Lightweight, quick lookups
|
||||
Qwen2.5-Coder:7b Dedicated coding tasks
|
||||
Llama3:8b Legacy/benchmark (optional)
|
||||
qwen2.5:7b-instruct Writing up emails
|
||||
deepseek-r1 (chonky but accurate)
|
||||
deepseek-r1:8b (lighter version of r1 , can run on DS1823xs+)
|
||||
18
hosts/physical/guava/portainer_yaml/nginx.yaml
Normal file
18
hosts/physical/guava/portainer_yaml/nginx.yaml
Normal file
@@ -0,0 +1,18 @@
|
||||
version: "3.8"
|
||||
|
||||
services:
|
||||
nginx:
|
||||
image: nginx:latest
|
||||
container_name: nginx
|
||||
volumes:
|
||||
- /mnt/data/website/html:/usr/share/nginx/html:ro
|
||||
- /mnt/data/website/conf.d:/etc/nginx/conf.d:ro
|
||||
ports:
|
||||
- "28888:80" # 👈 Expose port 28888 on the host
|
||||
networks:
|
||||
- web-net
|
||||
restart: unless-stopped
|
||||
|
||||
networks:
|
||||
web-net:
|
||||
external: true
|
||||
18
hosts/physical/guava/portainer_yaml/node_exporter.yaml
Normal file
18
hosts/physical/guava/portainer_yaml/node_exporter.yaml
Normal file
@@ -0,0 +1,18 @@
|
||||
version: "3.9"
|
||||
|
||||
services:
|
||||
node-exporter:
|
||||
image: prom/node-exporter:latest
|
||||
container_name: node-exporter
|
||||
restart: unless-stopped
|
||||
network_mode: "host"
|
||||
pid: "host"
|
||||
volumes:
|
||||
- /proc:/host/proc:ro
|
||||
- /sys:/host/sys:ro
|
||||
- /:/rootfs:ro
|
||||
command:
|
||||
- '--path.procfs=/host/proc'
|
||||
- '--path.sysfs=/host/sys'
|
||||
- '--path.rootfs=/rootfs'
|
||||
- '--collector.filesystem.ignored-mount-points=^/(sys|proc|dev|host|etc)($$|/)'
|
||||
Reference in New Issue
Block a user