fe8e1c41cc
- Add aria-label to all Help nav links for better screen reader support - Fix Samba config examples: use authenticated user instead of guest ok=yes - Fix chmod 777 to chmod 770 with group-based access control - Add security notes about dedicated groups and passwords in how-to guides - Fix Python script to use os.environ.get() with explicit error messages - Add app-specific password comment to EmailIngestion.md config example Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
235 lines
6.3 KiB
Markdown
235 lines
6.3 KiB
Markdown
# How to Set Up a Watched Folder for Automatic Document Ingestion
|
|
|
|
The **Watched Folder** feature allows DocuElevate to automatically detect and process documents placed in a specific local directory. Any scanner, application, or script that saves files to that folder will have its output automatically ingested.
|
|
|
|
---
|
|
|
|
## Overview
|
|
|
|
```
|
|
Scanner / Any App → Drop files in folder → DocuElevate watches for new files → Process & Store
|
|
```
|
|
|
|
This is one of the simplest ingestion methods and works with virtually any scanner, OCR app, or document workflow tool.
|
|
|
|
---
|
|
|
|
## Configuration
|
|
|
|
Add these settings to your `.env` file:
|
|
|
|
```env
|
|
WATCH_FOLDER_ENABLED=true
|
|
WATCH_FOLDER_PATH=/srv/docuelevate/watch
|
|
WATCH_FOLDER_INTERVAL=30 # Polling interval in seconds
|
|
WATCH_FOLDER_RECURSIVE=false # Watch subdirectories too
|
|
WATCH_FOLDER_DELETE_AFTER=true # Delete originals after successful processing
|
|
WATCH_FOLDER_EXTENSIONS=pdf,jpg,jpeg,png,tiff,tif
|
|
```
|
|
|
|
**Restart** the services after editing:
|
|
|
|
```bash
|
|
docker compose restart api worker
|
|
```
|
|
|
|
---
|
|
|
|
## Docker Setup
|
|
|
|
When running DocuElevate with Docker Compose, mount the watch folder into both the `api` and `worker` containers:
|
|
|
|
```yaml
|
|
# docker-compose.yaml
|
|
services:
|
|
api:
|
|
volumes:
|
|
- /srv/docuelevate/watch:/srv/docuelevate/watch
|
|
- /var/docparse/workdir:/workdir
|
|
|
|
worker:
|
|
volumes:
|
|
- /srv/docuelevate/watch:/srv/docuelevate/watch
|
|
- /var/docparse/workdir:/workdir
|
|
```
|
|
|
|
Create the folder and set permissions:
|
|
|
|
```bash
|
|
sudo mkdir -p /srv/docuelevate/watch
|
|
|
|
# Create a dedicated group for scanner/upload access
|
|
sudo groupadd scanner-upload
|
|
|
|
# Set group ownership and restrict access to owner + group only
|
|
sudo chown root:scanner-upload /srv/docuelevate/watch
|
|
sudo chmod 770 /srv/docuelevate/watch
|
|
|
|
# Add the user running DocuElevate (e.g., www-data or your deploy user) to the group
|
|
sudo usermod -aG scanner-upload www-data
|
|
```
|
|
|
|
> **Security note:** Avoid `chmod 777` (world-writable). Use group-based access control so only authorised processes can write to the watched folder.
|
|
|
|
---
|
|
|
|
## Multiple Watch Folders
|
|
|
|
If you have multiple scanners or document sources, you can organize them by subfolder:
|
|
|
|
```
|
|
/srv/docuelevate/watch/
|
|
├── reception/ ← Front desk scanner
|
|
├── accounting/ ← Finance team scanner
|
|
├── hr/ ← HR department
|
|
└── general/ ← General purpose
|
|
```
|
|
|
|
Enable recursive watching:
|
|
|
|
```env
|
|
WATCH_FOLDER_RECURSIVE=true
|
|
```
|
|
|
|
DocuElevate will monitor all subdirectories and tag documents with the subfolder name for easy filtering.
|
|
|
|
---
|
|
|
|
## Using with Network Scanners
|
|
|
|
### Windows / Samba Share
|
|
|
|
Share the watch folder over the network so scanners and Windows PCs can drop files directly:
|
|
|
|
> **Security note:** The example below uses a dedicated Samba user (`scanner`) for authentication. Using `guest ok = yes` (no password) is convenient but allows any device on the network to write files — avoid it in multi-tenant or internet-exposed environments.
|
|
|
|
```bash
|
|
# Install Samba
|
|
sudo apt-get install samba -y
|
|
|
|
# Create a dedicated Samba user for scanner devices
|
|
sudo useradd -M -s /sbin/nologin scanner
|
|
sudo smbpasswd -a scanner # set a password
|
|
|
|
# Add to /etc/samba/smb.conf
|
|
[DocuElevate-Inbox]
|
|
comment = DocuElevate Document Inbox
|
|
path = /srv/docuelevate/watch
|
|
browsable = yes
|
|
guest ok = no
|
|
valid users = scanner
|
|
read only = no
|
|
create mask = 0660
|
|
directory mask = 0770
|
|
force group = scanner-upload
|
|
```
|
|
|
|
Restart Samba:
|
|
```bash
|
|
sudo systemctl restart smbd nmbd
|
|
```
|
|
|
|
Windows access: `\\your-server-ip\DocuElevate-Inbox`
|
|
|
|
### NFS Share (Linux)
|
|
|
|
```bash
|
|
# Add to /etc/exports
|
|
/srv/docuelevate/watch 192.168.1.0/24(rw,sync,no_subtree_check)
|
|
|
|
# Apply changes
|
|
sudo exportfs -ra
|
|
```
|
|
|
|
### FTP Server (for older devices)
|
|
|
|
Many older scanners only support FTP. Run a simple FTP server alongside DocuElevate:
|
|
|
|
```yaml
|
|
# Add to docker-compose.yaml
|
|
services:
|
|
ftp:
|
|
image: garethflowers/ftp-server
|
|
container_name: docuelevate_ftp
|
|
environment:
|
|
- FTP_USER=scanner
|
|
- FTP_PASS=changeme
|
|
ports:
|
|
- "21:21"
|
|
- "20:20"
|
|
- "21100-21110:21100-21110"
|
|
volumes:
|
|
- /srv/docuelevate/watch:/home/scanner
|
|
```
|
|
|
|
Configure your scanner's FTP settings to use this server. Files will land in the watched folder.
|
|
|
|
---
|
|
|
|
## Supported File Types
|
|
|
|
| Format | Extension | Notes |
|
|
|--------|-----------|-------|
|
|
| PDF | `.pdf` | OCR applied if not already searchable |
|
|
| JPEG | `.jpg`, `.jpeg` | Converted to PDF |
|
|
| PNG | `.png` | Converted to PDF |
|
|
| TIFF | `.tif`, `.tiff` | Supports multi-page TIFF |
|
|
| HEIC | `.heic` | iPhone photos (converted) |
|
|
|
|
---
|
|
|
|
## Monitoring
|
|
|
|
Check that the watched folder is active:
|
|
|
|
```bash
|
|
# View worker logs
|
|
docker logs document_worker --follow
|
|
|
|
# Expected output:
|
|
# INFO Watch folder monitor: watching /srv/docuelevate/watch (interval: 30s)
|
|
# INFO Watch folder: found new file invoice.pdf
|
|
# INFO Watch folder: queued document ID 156 for processing
|
|
```
|
|
|
|
You can also view processing status in the DocuElevate web interface under **Queue Monitor**.
|
|
|
|
---
|
|
|
|
## Troubleshooting
|
|
|
|
**Files are dropped but not picked up?**
|
|
- Verify `WATCH_FOLDER_ENABLED=true` in `.env`
|
|
- Check that `WATCH_FOLDER_PATH` matches the mounted path in docker-compose
|
|
- Look at worker logs: `docker logs document_worker --tail 100`
|
|
|
|
**Permission denied errors?**
|
|
```bash
|
|
# Preferred: use group-based ACL for targeted access
|
|
sudo setfacl -m g:scanner-upload:rwx /srv/docuelevate/watch
|
|
sudo setfacl -d -m g:scanner-upload:rwx /srv/docuelevate/watch
|
|
|
|
# If you need a quick fix and understand the risk, restrict to owner+group:
|
|
sudo chown -R root:scanner-upload /srv/docuelevate/watch
|
|
sudo chmod -R 770 /srv/docuelevate/watch
|
|
```
|
|
|
|
**Files processed but not deleted?**
|
|
- Set `WATCH_FOLDER_DELETE_AFTER=true`
|
|
- If you want to keep originals, set to `false` and manage cleanup separately
|
|
|
|
**File appears partially uploaded?**
|
|
- Large files may arrive before the scanner finishes writing them
|
|
- Increase `WATCH_FOLDER_INTERVAL` to give time for files to be fully written
|
|
- DocuElevate uses file-lock detection to avoid processing incomplete files
|
|
|
|
---
|
|
|
|
## Related Documentation
|
|
|
|
- [HP Enterprise Printer Setup](./HPPrinterSetup.md)
|
|
- [ScanSnap Setup](./SnapScanSetup.md)
|
|
- [Email Ingestion](./EmailIngestion.md)
|
|
- [Configuration Guide](../ConfigurationGuide.md)
|
|
- [Deployment Guide](../DeploymentGuide.md)
|