Sanitized mirror from private repository - 2026-04-18 10:57:41 UTC
Some checks failed
Documentation / Build Docusaurus (push) Failing after 5m2s
Documentation / Deploy to GitHub Pages (push) Has been skipped

This commit is contained in:
Gitea Mirror Bot
2026-04-18 10:57:41 +00:00
commit 4c8d376e9b
1418 changed files with 359979 additions and 0 deletions

View 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/)

View 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

View 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