187 lines
4.8 KiB
Markdown
187 lines
4.8 KiB
Markdown
# TrueNAS Scale / Docker Compose Samples
|
|
|
|
This document provides Compose examples to bring up the external services used by the Nextcloud + Elasticsearch Discovery File Explorer:
|
|
- Elasticsearch (single-node) + Kibana
|
|
- Apache Tika (for text extraction)
|
|
- Qdrant (vector database for collections/embeddings UI)
|
|
|
|
These samples are suitable for local dev or TrueNAS Scale (Apps) adaptation. Harden for production (auth, TLS, resource limits).
|
|
|
|
## 1) Elasticsearch + Kibana
|
|
|
|
Notes:
|
|
- Single node with `discovery.type=single-node`
|
|
- Security disabled for dev. ENABLE AUTH/TLS IN PROD.
|
|
- Set `ELASTICSEARCH_URL` accordingly (example: https://elastic.fortura.cc for your testing cluster)
|
|
|
|
```yaml
|
|
version: "3.9"
|
|
services:
|
|
elasticsearch:
|
|
image: docker.elastic.co/elasticsearch/elasticsearch:8.12.2
|
|
container_name: es
|
|
environment:
|
|
- discovery.type=single-node
|
|
- xpack.security.enabled=false
|
|
- ES_JAVA_OPTS=-Xms1g -Xmx1g
|
|
ports:
|
|
- "9200:9200"
|
|
healthcheck:
|
|
test: ["CMD", "curl", "-f", "http://localhost:9200/_cluster/health"]
|
|
interval: 10s
|
|
timeout: 5s
|
|
retries: 10
|
|
|
|
kibana:
|
|
image: docker.elastic.co/kibana/kibana:8.12.2
|
|
container_name: kibana
|
|
environment:
|
|
- ELASTICSEARCH_HOSTS=http://elasticsearch:9200
|
|
ports:
|
|
- "5601:5601"
|
|
depends_on:
|
|
elasticsearch:
|
|
condition: service_healthy
|
|
```
|
|
|
|
Environment wiring in `.env.local`:
|
|
```
|
|
ELASTICSEARCH_URL=http://localhost:9200 # or your remote, e.g., https://elastic.fortura.cc
|
|
ELASTICSEARCH_INDEX=files
|
|
ELASTICSEARCH_ALIAS=files_current
|
|
```
|
|
|
|
Initialize index:
|
|
```
|
|
npm run create:index
|
|
```
|
|
|
|
## 2) Apache Tika
|
|
|
|
Use Tika for server-side plain text extraction during ingestion.
|
|
|
|
```yaml
|
|
version: "3.9"
|
|
services:
|
|
tika:
|
|
image: apache/tika:latest-full
|
|
container_name: tika
|
|
ports:
|
|
- "9998:9998"
|
|
healthcheck:
|
|
test: ["CMD", "curl", "-f", "http://localhost:9998"]
|
|
interval: 10s
|
|
timeout: 5s
|
|
retries: 10
|
|
```
|
|
|
|
Environment wiring:
|
|
```
|
|
TIKA_BASE_URL=http://localhost:9998
|
|
```
|
|
|
|
## 3) Qdrant
|
|
|
|
Qdrant stores vectors. For your deployment, you provided:
|
|
- Domain: https://vectors.biohazardvfx.com (domain over API)
|
|
- API Key: set in `.env.local` as `QDRANT_API_KEY`
|
|
|
|
Local Compose:
|
|
```yaml
|
|
version: "3.9"
|
|
services:
|
|
qdrant:
|
|
image: qdrant/qdrant:v1.9.2
|
|
container_name: qdrant
|
|
ports:
|
|
- "6333:6333" # REST
|
|
- "6334:6334" # gRPC
|
|
volumes:
|
|
- qdrant_data:/qdrant/storage
|
|
volumes:
|
|
qdrant_data: {}
|
|
```
|
|
|
|
Environment wiring:
|
|
```
|
|
QDRANT_URL=http://localhost:6333
|
|
QDRANT_API_KEY= # leave blank for local/no-auth; set for remote
|
|
```
|
|
|
|
## TrueNAS Scale Notes
|
|
|
|
- Translate the Compose services above into TrueNAS “Apps” or Helm charts.
|
|
- For Elasticsearch:
|
|
- Persist data volumes on a dataset with adequate IOPS
|
|
- Enable security in production (xpack, TLS)
|
|
- Add resource limits and JVM tuning for heap
|
|
- For Qdrant:
|
|
- Persist `/qdrant/storage` to a dataset
|
|
- Configure authentication if exposed externally (reverse proxy + auth)
|
|
- For Tika:
|
|
- Stateless; consider auto-restart policy
|
|
- Networking & DNS:
|
|
- Ensure the app pods (Next.js app) can reach ES/Tika/Qdrant service hostnames/ports.
|
|
- Outbound access:
|
|
- If Sentry is used, allow outbound network for DSN ingestion.
|
|
|
|
## Application Wiring Summary
|
|
|
|
`.env.local` (example used for your testing)
|
|
```
|
|
# Nextcloud
|
|
NEXTCLOUD_BASE_URL=https://nextcloud.biohazardvfx.com
|
|
NEXTCLOUD_USERNAME=admin
|
|
NEXTCLOUD_APP_PASSWORD=*** (do not commit)
|
|
NEXTCLOUD_ROOT_PATH=/remote.php/dav/files/admin
|
|
|
|
# Elasticsearch
|
|
ELASTICSEARCH_URL=https://elastic.fortura.cc
|
|
ELASTICSEARCH_INDEX=files
|
|
ELASTICSEARCH_ALIAS=files_current
|
|
|
|
# Apache Tika
|
|
TIKA_BASE_URL=http://localhost:9998
|
|
|
|
# Qdrant
|
|
QDRANT_URL=https://vectors.biohazardvfx.com
|
|
QDRANT_API_KEY=*** (do not commit)
|
|
|
|
# Optional embeddings (not required now)
|
|
OPENAI_API_BASE=
|
|
OPENAI_API_KEY=
|
|
OPENAI_EMBEDDING_MODEL=text-embedding-3-large
|
|
EMBEDDING_DIM=1536
|
|
|
|
# Sentry
|
|
SENTRY_DSN=
|
|
```
|
|
|
|
## Operational Flow
|
|
|
|
1) Bring up ES/Tika/Qdrant (local or TrueNAS Scale).
|
|
2) Ensure `.env.local` points to your services.
|
|
3) Create ES index and alias:
|
|
```
|
|
npm run create:index
|
|
```
|
|
4) Ingest Nextcloud → Tika → ES:
|
|
```
|
|
npx tsx -r dotenv/config -r tsconfig-paths/register scripts/ingest-nextcloud.ts
|
|
```
|
|
Optional subtree:
|
|
```
|
|
npx tsx -r dotenv/config -r tsconfig-paths/register scripts/ingest-nextcloud.ts -- --root=/remote.php/dav/files/admin/SomeFolder
|
|
```
|
|
5) Run the app locally:
|
|
```
|
|
npm run dev
|
|
```
|
|
6) Use the UI to browse Nextcloud, search, edit Markdown, manage tags/history, and open Qdrant page for collections/points and embeddings visualization.
|
|
|
|
## Security Reminders
|
|
|
|
- Do not expose dev ES (no-auth) to the internet.
|
|
- Store secrets in `.env.local` and never commit them.
|
|
- Configure TLS and auth for production services (reverse proxies, mTLS, etc.).
|