Sanitized mirror from private repository - 2026-04-18 10:57:41 UTC
This commit is contained in:
128
hosts/synology/calypso/paperless/README.md
Normal file
128
hosts/synology/calypso/paperless/README.md
Normal file
@@ -0,0 +1,128 @@
|
||||
# Paperless-NGX + AI
|
||||
|
||||
Document management system with AI-powered automatic tagging and categorization.
|
||||
|
||||
## Deployment
|
||||
|
||||
- **Host:** Calypso (Synology NAS)
|
||||
- **Paperless-NGX URL:** https://paperlessngx.vishconcord.synology.me
|
||||
- **Paperless-AI URL:** http://calypso.local:3000
|
||||
- **Deployed via:** Portainer Stacks
|
||||
|
||||
## Stacks
|
||||
|
||||
### 1. Paperless-NGX (paperless-testing)
|
||||
Main document management system with office document support.
|
||||
|
||||
**File:** `docker-compose.yml`
|
||||
|
||||
| Container | Port | Purpose |
|
||||
|-----------|------|---------|
|
||||
| PaperlessNGX | 8777 | Main web UI |
|
||||
| PaperlessNGX-DB | - | PostgreSQL database |
|
||||
| PaperlessNGX-REDIS | - | Redis cache |
|
||||
| PaperlessNGX-GOTENBERG | - | Office doc conversion |
|
||||
| PaperlessNGX-TIKA | - | Document parsing |
|
||||
|
||||
### 2. Paperless-AI (paperless-ai)
|
||||
AI extension for automatic document classification.
|
||||
|
||||
**File:** `paperless-ai.yml`
|
||||
|
||||
| Container | Port | Purpose |
|
||||
|-----------|------|---------|
|
||||
| PaperlessNGX-AI | 3000 (host) | AI processing & web UI |
|
||||
|
||||
## Data Locations
|
||||
|
||||
| Data | Path |
|
||||
|------|------|
|
||||
| Documents | `/volume1/docker/paperlessngx/media` |
|
||||
| Database | `/volume1/docker/paperlessngx/db` |
|
||||
| Export/Backup | `/volume1/docker/paperlessngx/export` |
|
||||
| Consume folder | `/volume1/docker/paperlessngx/consume` |
|
||||
| Trash | `/volume1/docker/paperlessngx/trash` |
|
||||
| AI config | `/volume1/docker/paperlessngxai` |
|
||||
|
||||
## Credentials
|
||||
|
||||
### Paperless-NGX
|
||||
- URL: https://paperlessngx.vishconcord.synology.me
|
||||
- Admin user: vish
|
||||
- Admin password: "REDACTED_PASSWORD"
|
||||
|
||||
### PostgreSQL
|
||||
- Database: paperless
|
||||
- User: paperlessuser
|
||||
- Password: "REDACTED_PASSWORD"
|
||||
|
||||
### Redis
|
||||
- Password: "REDACTED_PASSWORD"
|
||||
|
||||
### API Token
|
||||
- Token: `REDACTED_API_TOKEN`
|
||||
|
||||
## AI Integration (Ollama)
|
||||
|
||||
Paperless-AI connects to Ollama on Atlantis for LLM inference.
|
||||
|
||||
**Ollama URL:** https://ollama.vishconcord.synology.me
|
||||
**Model:** neural-chat:7b (recommended)
|
||||
|
||||
### Configuring AI
|
||||
|
||||
1. Access Paperless-AI web UI: http://calypso.local:3000
|
||||
2. Complete initial setup wizard
|
||||
3. Configure:
|
||||
- AI Provider: Ollama
|
||||
- Ollama URL: https://ollama.vishconcord.synology.me
|
||||
- Model: neural-chat:7b (or llama3.2:latest)
|
||||
4. Set up tags and document types to auto-assign
|
||||
5. Restart container after initial setup to build RAG index
|
||||
|
||||
### Available Ollama Models
|
||||
|
||||
| Model | Size | Best For |
|
||||
|-------|------|----------|
|
||||
| neural-chat:7b | 7B | General documents |
|
||||
| llama3.2:3b | 3.2B | Fast processing |
|
||||
| mistral:7b | 7.2B | High quality |
|
||||
| phi3:mini | 3.8B | Balanced |
|
||||
|
||||
## Backup
|
||||
|
||||
### Manual Export
|
||||
```bash
|
||||
# SSH into Calypso or use Portainer exec
|
||||
docker exec PaperlessNGX document_exporter ../export -c -d
|
||||
```
|
||||
|
||||
### Backup Location
|
||||
Exports are saved to: `/volume1/docker/paperlessngx/export/`
|
||||
|
||||
### Restore
|
||||
```bash
|
||||
docker exec PaperlessNGX document_importer ../export
|
||||
```
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Paperless-AI not connecting to Ollama
|
||||
1. Verify Ollama is running on Atlantis
|
||||
2. Check URL is correct: `https://ollama.vishconcord.synology.me`
|
||||
3. Test connectivity: `curl https://ollama.vishconcord.synology.me/api/tags`
|
||||
|
||||
### Documents not being processed
|
||||
1. Check Paperless-AI logs: `docker logs PaperlessNGX-AI`
|
||||
2. Verify API token is correct
|
||||
3. Ensure tags are configured in Paperless-AI web UI
|
||||
|
||||
### OCR issues
|
||||
1. Check Tika and Gotenberg are running
|
||||
2. Verify language is set: `PAPERLESS_OCR_LANGUAGE: eng`
|
||||
|
||||
## Documentation
|
||||
|
||||
- [Paperless-ngx Docs](https://docs.paperless-ngx.com/)
|
||||
- [Paperless-AI GitHub](https://github.com/clusterzx/paperless-ai)
|
||||
- [Ollama Docs](https://ollama.com/)
|
||||
129
hosts/synology/calypso/paperless/docker-compose.yml
Normal file
129
hosts/synology/calypso/paperless/docker-compose.yml
Normal file
@@ -0,0 +1,129 @@
|
||||
# Paperless-NGX with Office Document Support
|
||||
# URL: https://docs.vish.gg
|
||||
# Port: 8777
|
||||
# Notifications: ntfy (http://192.168.0.210:8081/paperless)
|
||||
# SSO: Authentik OIDC (sso.vish.gg/application/o/paperless/)
|
||||
|
||||
services:
|
||||
redis:
|
||||
image: redis:8
|
||||
command:
|
||||
- /bin/sh
|
||||
- -c
|
||||
- redis-server --requirepass REDACTED_PASSWORD
|
||||
container_name: PaperlessNGX-REDIS
|
||||
hostname: paper-redis
|
||||
security_opt:
|
||||
- no-new-privileges:true
|
||||
read_only: true
|
||||
user: 1026:100
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "redis-cli ping || exit 1"]
|
||||
volumes:
|
||||
- /volume1/docker/paperlessngx/redis:/data:rw
|
||||
environment:
|
||||
TZ: America/Los_Angeles
|
||||
restart: on-failure:5
|
||||
|
||||
db:
|
||||
image: postgres:18
|
||||
container_name: PaperlessNGX-DB
|
||||
hostname: paper-db
|
||||
security_opt:
|
||||
- no-new-privileges:true
|
||||
healthcheck:
|
||||
test: ["CMD", "pg_isready", "-q", "-d", "paperless", "-U", "paperlessuser"]
|
||||
timeout: 45s
|
||||
interval: 10s
|
||||
retries: 10
|
||||
volumes:
|
||||
- /volume1/docker/paperlessngx/db:/var/lib/postgresql:rw
|
||||
environment:
|
||||
POSTGRES_DB: paperless
|
||||
POSTGRES_USER: paperlessuser
|
||||
POSTGRES_PASSWORD: "REDACTED_PASSWORD"
|
||||
restart: on-failure:5
|
||||
|
||||
gotenberg:
|
||||
image: gotenberg/gotenberg:latest
|
||||
container_name: PaperlessNGX-GOTENBERG
|
||||
hostname: gotenberg
|
||||
security_opt:
|
||||
- no-new-privileges:true
|
||||
user: 1026:100
|
||||
command:
|
||||
- "gotenberg"
|
||||
- "--chromium-disable-javascript=true"
|
||||
- "--chromium-allow-list=file:///tmp/.*"
|
||||
restart: on-failure:5
|
||||
|
||||
tika:
|
||||
image: docker.io/apache/tika:latest
|
||||
container_name: PaperlessNGX-TIKA
|
||||
hostname: tika
|
||||
security_opt:
|
||||
- no-new-privileges:true
|
||||
user: 1026:100
|
||||
restart: on-failure:5
|
||||
|
||||
paperless:
|
||||
image: ghcr.io/paperless-ngx/paperless-ngx:latest
|
||||
container_name: PaperlessNGX
|
||||
hostname: paperless-ngx
|
||||
security_opt:
|
||||
- no-new-privileges:true
|
||||
healthcheck:
|
||||
test: ["CMD", "curl", "-fs", "-S", "--max-time", "2", "http://localhost:8000"]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 5
|
||||
ports:
|
||||
- 8777:8000
|
||||
volumes:
|
||||
- /volume1/docker/paperlessngx/data:/usr/src/paperless/data:rw
|
||||
- /volume1/docker/paperlessngx/media:/usr/src/paperless/media:rw
|
||||
- /volume1/docker/paperlessngx/export:/usr/src/paperless/export:rw
|
||||
- /volume1/docker/paperlessngx/consume:/usr/src/paperless/consume:rw
|
||||
- /volume1/docker/paperlessngx/trash:/usr/src/paperless/trash:rw
|
||||
environment:
|
||||
PAPERLESS_REDIS: redis://:redispass@paper-redis:6379
|
||||
PAPERLESS_DBENGINE: postgresql
|
||||
PAPERLESS_DBHOST: paper-db
|
||||
PAPERLESS_DBNAME: paperless
|
||||
PAPERLESS_DBUSER: paperlessuser
|
||||
PAPERLESS_DBPASS: paperlesspass
|
||||
PAPERLESS_EMPTY_TRASH_DIR: ../trash
|
||||
PAPERLESS_FILENAME_FORMAT: "{{ created_year }}/{{ correspondent }}/{{ document_type }}/{{ title }}"
|
||||
PAPERLESS_OCR_ROTATE_PAGES_THRESHOLD: 6
|
||||
PAPERLESS_TASK_WORKERS: 1
|
||||
USERMAP_UID: 1026
|
||||
USERMAP_GID: 100
|
||||
PAPERLESS_SECRET_KEY: "REDACTED_SECRET_KEY"
|
||||
PAPERLESS_TIME_ZONE: America/Los_Angeles
|
||||
PAPERLESS_ADMIN_USER: vish
|
||||
PAPERLESS_ADMIN_PASSWORD: "REDACTED_PASSWORD" # pragma: allowlist secret
|
||||
PAPERLESS_URL: https://docs.vish.gg
|
||||
PAPERLESS_CSRF_TRUSTED_ORIGINS: https://docs.vish.gg
|
||||
PAPERLESS_OCR_LANGUAGE: eng
|
||||
PAPERLESS_TIKA_ENABLED: 1
|
||||
PAPERLESS_TIKA_GOTENBERG_ENDPOINT: http://gotenberg:3000
|
||||
PAPERLESS_TIKA_ENDPOINT: http://tika:9998
|
||||
# ntfy notification on document consumption
|
||||
PAPERLESS_POST_CONSUME_SCRIPT: /usr/src/paperless/data/notify.sh
|
||||
# Authentik OIDC SSO
|
||||
PAPERLESS_APPS: allauth.socialaccount.providers.openid_connect
|
||||
PAPERLESS_SOCIALACCOUNT_PROVIDERS: >-
|
||||
{"openid_connect": {"APPS": [{"provider_id": "paperless", "name": "Authentik",
|
||||
"client_id": "paperless",
|
||||
"secret": "10e705242ca03f59b10ea831REDACTED_GITEA_TOKEN",
|
||||
"settings": {"server_url": "https://sso.vish.gg/application/o/paperless/.well-known/openid-configuration"}}]}}
|
||||
restart: on-failure:5
|
||||
depends_on:
|
||||
db:
|
||||
condition: service_healthy
|
||||
redis:
|
||||
condition: service_healthy
|
||||
tika:
|
||||
condition: service_started
|
||||
gotenberg:
|
||||
condition: service_started
|
||||
41
hosts/synology/calypso/paperless/paperless-ai.yml
Normal file
41
hosts/synology/calypso/paperless/paperless-ai.yml
Normal file
@@ -0,0 +1,41 @@
|
||||
# Paperless-AI - AI-powered document processing for Paperless-NGX
|
||||
# Uses Ollama on Atlantis for LLM inference
|
||||
# Web UI: http://<calypso-ip>:3033 or via reverse proxy
|
||||
# Docs: https://github.com/clusterzx/paperless-ai
|
||||
|
||||
services:
|
||||
paperlessngx-ai:
|
||||
image: clusterzx/paperless-ai:latest
|
||||
container_name: PaperlessNGX-AI
|
||||
hostname: paperless-ai
|
||||
ports:
|
||||
- "3033:3000"
|
||||
healthcheck:
|
||||
test: ["CMD", "curl", "-f", "http://localhost:3000/status"]
|
||||
interval: 10s
|
||||
timeout: 5s
|
||||
retries: 3
|
||||
start_period: 90s
|
||||
volumes:
|
||||
- /volume1/docker/paperlessngxai:/app/data:rw
|
||||
environment:
|
||||
# --- Paperless-NGX Connection ---
|
||||
# Using Calypso's IP + external port (containers on different networks)
|
||||
PAPERLESS_URL: "http://192.168.0.250:8777"
|
||||
PAPERLESS_NGX_URL: "http://192.168.0.250:8777"
|
||||
PAPERLESS_HOST: "192.168.0.250"
|
||||
PAPERLESS_API_URL: "http://192.168.0.250:8777/api"
|
||||
PAPERLESS_API_TOKEN: "REDACTED_TOKEN"
|
||||
|
||||
# --- LLM Connection (LM Studio on Shinku-Ryuu via Tailscale) ---
|
||||
# Temporarily using LM Studio instead of Ollama (OpenAI-compatible API)
|
||||
# Original Ollama config: OLLAMA_API_URL: "http://192.168.0.200:11434" OLLAMA_MODEL: "llama3.2:latest"
|
||||
AI_PROVIDER: "custom"
|
||||
CUSTOM_BASE_URL: "http://100.98.93.15:1234/v1"
|
||||
CUSTOM_MODEL: "llama-3.2-3b-instruct"
|
||||
CUSTOM_API_KEY: "lm-studio"
|
||||
|
||||
# --- Optional Settings ---
|
||||
# PROCESS_PREDEFINED_DOCUMENTS: "yes"
|
||||
# SCAN_INTERVAL: "*/30 * * * *"
|
||||
restart: unless-stopped
|
||||
Reference in New Issue
Block a user