Move photo paths from /volume2/photos to /volume1/data/photos
Immich data share is on /volume1/data, so photos belong there too. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
16
README.md
16
README.md
@@ -7,7 +7,7 @@ Automatic photo processing pipeline for Fuji X-H2 photos: camera uploads via FTP
|
|||||||
```
|
```
|
||||||
┌─────────────┐ FTPS ┌──────────────────┐ watchdog ┌─────────────┐
|
┌─────────────┐ FTPS ┌──────────────────┐ watchdog ┌─────────────┐
|
||||||
│ Fuji X-H2 │ ──────────→ │ Synology NAS │ ────────────→ │ Processor │
|
│ Fuji X-H2 │ ──────────→ │ Synology NAS │ ────────────→ │ Processor │
|
||||||
│ (camera) │ port 21 │ /volume2/photos/ │ polling │ container │
|
│ (camera) │ port 21 │ /volume1/data/photos/ │ polling │ container │
|
||||||
└─────────────┘ (TLS) │ incoming/ │ └──────┬──────┘
|
└─────────────┘ (TLS) │ incoming/ │ └──────┬──────┘
|
||||||
└──────────────────┘ │
|
└──────────────────┘ │
|
||||||
│ resize + move
|
│ resize + move
|
||||||
@@ -39,7 +39,7 @@ Automatic photo processing pipeline for Fuji X-H2 photos: camera uploads via FTP
|
|||||||
2. Enable FTP service on port **21**
|
2. Enable FTP service on port **21**
|
||||||
3. Enable **FTP SSL/TLS encryption** (FTPS)
|
3. Enable **FTP SSL/TLS encryption** (FTPS)
|
||||||
4. Set passive port range: **50000-50100**
|
4. Set passive port range: **50000-50100**
|
||||||
5. Create a dedicated user `fujiftp` with write access to `/volume2/photos/incoming`
|
5. Create a dedicated user `fujiftp` with write access to `/volume1/data/photos/incoming`
|
||||||
|
|
||||||
### 2. Camera Configuration (Fuji X-H2)
|
### 2. Camera Configuration (Fuji X-H2)
|
||||||
|
|
||||||
@@ -72,9 +72,9 @@ The deploy script will:
|
|||||||
### 4. Immich Integration
|
### 4. Immich Integration
|
||||||
|
|
||||||
1. In Immich, go to **Administration → External Libraries**
|
1. In Immich, go to **Administration → External Libraries**
|
||||||
2. Add a new library with import path: `/volume2/photos/processed`
|
2. Add a new library with import path: `/volume1/data/photos/processed`
|
||||||
3. Set scan interval (e.g., every 15 minutes)
|
3. Set scan interval (e.g., every 15 minutes)
|
||||||
4. Mount `/volume2/photos/processed` into the Immich container as a read-only volume
|
4. Mount `/volume1/data/photos/processed` into the Immich container as a read-only volume
|
||||||
|
|
||||||
## Container Details
|
## Container Details
|
||||||
|
|
||||||
@@ -82,9 +82,9 @@ The deploy script will:
|
|||||||
|
|
||||||
| Container Path | Host Path | Purpose |
|
| Container Path | Host Path | Purpose |
|
||||||
|----------------|----------------------------------------|---------------------------|
|
|----------------|----------------------------------------|---------------------------|
|
||||||
| `/incoming` | `/volume2/photos/incoming` | FTP upload landing zone |
|
| `/incoming` | `/volume1/data/photos/incoming` | FTP upload landing zone |
|
||||||
| `/originals` | `/volume2/photos/originals` | Full-resolution originals |
|
| `/originals` | `/volume1/data/photos/originals` | Full-resolution originals |
|
||||||
| `/processed` | `/volume2/photos/processed` | Resized copies for Immich |
|
| `/processed` | `/volume1/data/photos/processed` | Resized copies for Immich |
|
||||||
| `/data` | `/volume2/docker/photo-processor/data` | SQLite tracking database |
|
| `/data` | `/volume2/docker/photo-processor/data` | SQLite tracking database |
|
||||||
|
|
||||||
### Environment Variables
|
### Environment Variables
|
||||||
@@ -108,7 +108,7 @@ ssh -i ../SynologyDocker/synology_ssh_key ssh@192.168.175.141 \
|
|||||||
|
|
||||||
### Common Issues
|
### Common Issues
|
||||||
|
|
||||||
- **Files not detected**: Check that the FTP user has write permissions to `/volume2/photos/incoming`. The processor uses polling (not inotify) so there may be up to a 30-second delay.
|
- **Files not detected**: Check that the FTP user has write permissions to `/volume1/data/photos/incoming`. The processor uses polling (not inotify) so there may be up to a 30-second delay.
|
||||||
- **Permission denied on originals/processed**: Ensure the directories exist and are writable. The deploy script creates them automatically.
|
- **Permission denied on originals/processed**: Ensure the directories exist and are writable. The deploy script creates them automatically.
|
||||||
- **Duplicate filenames**: The processor tracks files by filename in SQLite. If you re-upload a file with the same name, it will be skipped. Delete the entry from `/volume2/docker/photo-processor/data/processed.db` to reprocess.
|
- **Duplicate filenames**: The processor tracks files by filename in SQLite. If you re-upload a file with the same name, it will be skipped. Delete the entry from `/volume2/docker/photo-processor/data/processed.db` to reprocess.
|
||||||
- **Container keeps restarting**: Check logs for Python errors. Common cause: missing directories or permission issues on volume mounts.
|
- **Container keeps restarting**: Check logs for Python errors. Common cause: missing directories or permission issues on volume mounts.
|
||||||
|
|||||||
10
TODO.md
10
TODO.md
@@ -16,13 +16,13 @@
|
|||||||
- [ ] Geen toegang tot andere shares
|
- [ ] Geen toegang tot andere shares
|
||||||
|
|
||||||
## 3. NAS Directories aanmaken
|
## 3. NAS Directories aanmaken
|
||||||
- [ ] DSM → Control Panel → Shared Folder → Create `photos` op Volume 2
|
- [ ] Maak `/volume1/data/photos/` directory aan (data share bestaat al)
|
||||||
- [ ] File Station → maak subdirectories:
|
- [ ] File Station → maak subdirectories:
|
||||||
- [ ] `incoming`
|
- [ ] `incoming`
|
||||||
- [ ] `originals`
|
- [ ] `originals`
|
||||||
- [ ] `processed`
|
- [ ] `processed`
|
||||||
- [ ] Geef `fujiftp` user lees/schrijf-rechten op `incoming`
|
- [ ] Geef `fujiftp` user lees/schrijf-rechten op `incoming`
|
||||||
- [ ] Controleer: `ls -la /volume2/photos/` via SSH
|
- [ ] Controleer: `ls -la /volume1/data/photos/` via SSH
|
||||||
|
|
||||||
## 4. Photo Processor deployen
|
## 4. Photo Processor deployen
|
||||||
- [ ] `cd /Users/nick/Development/fuji-photo-processor`
|
- [ ] `cd /Users/nick/Development/fuji-photo-processor`
|
||||||
@@ -33,7 +33,7 @@
|
|||||||
- [ ] DSM → Container Manager → Project → immich → Edit (YAML)
|
- [ ] DSM → Container Manager → Project → immich → Edit (YAML)
|
||||||
- [ ] Voeg toe aan `immich-server` service volumes:
|
- [ ] Voeg toe aan `immich-server` service volumes:
|
||||||
```yaml
|
```yaml
|
||||||
- /volume2/photos/processed:/mnt/photos/processed:ro
|
- /volume1/data/photos/processed:/mnt/photos/processed:ro
|
||||||
```
|
```
|
||||||
- [ ] Apply → container herstart automatisch
|
- [ ] Apply → container herstart automatisch
|
||||||
- [ ] Immich webinterface (http://192.168.175.141:8212):
|
- [ ] Immich webinterface (http://192.168.175.141:8212):
|
||||||
@@ -61,8 +61,8 @@
|
|||||||
- [ ] FTPS verbinding testen: `curl --ftp-ssl ftp://fujiftp@192.168.175.141/incoming/ -k`
|
- [ ] FTPS verbinding testen: `curl --ftp-ssl ftp://fujiftp@192.168.175.141/incoming/ -k`
|
||||||
- [ ] Upload een test JPEG via FTP
|
- [ ] Upload een test JPEG via FTP
|
||||||
- [ ] Check processor logs → moet verwerking tonen
|
- [ ] Check processor logs → moet verwerking tonen
|
||||||
- [ ] Check `/volume2/photos/originals/` → origineel verplaatst
|
- [ ] Check `/volume1/data/photos/originals/` → origineel verplaatst
|
||||||
- [ ] Check `/volume2/photos/processed/` → geresized kopie aanwezig
|
- [ ] Check `/volume1/data/photos/processed/` → geresized kopie aanwezig
|
||||||
- [ ] Immich → trigger library scan → foto zichtbaar in timeline
|
- [ ] Immich → trigger library scan → foto zichtbaar in timeline
|
||||||
- [ ] Test vanaf camera: foto nemen → FTP Transfer → check hele flow
|
- [ ] Test vanaf camera: foto nemen → FTP Transfer → check hele flow
|
||||||
|
|
||||||
|
|||||||
22
deploy.sh
22
deploy.sh
@@ -49,12 +49,12 @@ create_directories() {
|
|||||||
ssh_cmd "mkdir -p $NAS_DOCKER_DIR/data $NAS_DOCKER_DIR/build"
|
ssh_cmd "mkdir -p $NAS_DOCKER_DIR/data $NAS_DOCKER_DIR/build"
|
||||||
|
|
||||||
# Photos dirs may need elevated permissions - check and warn
|
# Photos dirs may need elevated permissions - check and warn
|
||||||
if ! ssh_cmd "test -d /volume2/photos/incoming" 2>/dev/null; then
|
if ! ssh_cmd "test -d /volume1/data/photos/incoming" 2>/dev/null; then
|
||||||
log_warn "/volume2/photos/ directories not found!"
|
log_warn "/volume1/data/photos/ directories not found!"
|
||||||
log_warn "Create them via DSM File Station or as admin:"
|
log_warn "Create them via DSM File Station or as admin:"
|
||||||
log_warn " sudo mkdir -p /volume2/photos/{incoming,originals,processed}"
|
log_warn " sudo mkdir -p /volume1/data/photos/{incoming,originals,processed}"
|
||||||
log_warn " sudo chown -R fujiftp:users /volume2/photos/incoming"
|
log_warn " sudo chown -R fujiftp:users /volume1/data/photos/incoming"
|
||||||
log_warn " sudo chmod 755 /volume2/photos/{originals,processed}"
|
log_warn " sudo chmod 755 /volume1/data/photos/{originals,processed}"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
@@ -82,9 +82,9 @@ start_container() {
|
|||||||
--restart unless-stopped \
|
--restart unless-stopped \
|
||||||
--memory=256m \
|
--memory=256m \
|
||||||
-e TZ=Europe/Amsterdam \
|
-e TZ=Europe/Amsterdam \
|
||||||
-v /volume2/photos/incoming:/incoming \
|
-v /volume1/data/photos/incoming:/incoming \
|
||||||
-v /volume2/photos/originals:/originals \
|
-v /volume1/data/photos/originals:/originals \
|
||||||
-v /volume2/photos/processed:/processed \
|
-v /volume1/data/photos/processed:/processed \
|
||||||
-v "$NAS_DOCKER_DIR/data:/data" \
|
-v "$NAS_DOCKER_DIR/data:/data" \
|
||||||
"$IMAGE_NAME"
|
"$IMAGE_NAME"
|
||||||
}
|
}
|
||||||
@@ -125,9 +125,9 @@ main() {
|
|||||||
echo ""
|
echo ""
|
||||||
log_info "=== Deployment Complete ==="
|
log_info "=== Deployment Complete ==="
|
||||||
log_info "Container: $CONTAINER_NAME"
|
log_info "Container: $CONTAINER_NAME"
|
||||||
log_info "Incoming: /volume2/photos/incoming (FTP upload target)"
|
log_info "Incoming: /volume1/data/photos/incoming (FTP upload target)"
|
||||||
log_info "Originals: /volume2/photos/originals/YYYY/MM/"
|
log_info "Originals: /volume1/data/photos/originals/YYYY/MM/"
|
||||||
log_info "Processed: /volume2/photos/processed/YYYY/MM/"
|
log_info "Processed: /volume1/data/photos/processed/YYYY/MM/"
|
||||||
echo ""
|
echo ""
|
||||||
log_info "Check logs: ssh -i $SSH_KEY $NAS_HOST 'sudo /usr/local/bin/docker logs -f $CONTAINER_NAME'"
|
log_info "Check logs: ssh -i $SSH_KEY $NAS_HOST 'sudo /usr/local/bin/docker logs -f $CONTAINER_NAME'"
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user