Explain the host-level SMB mounting approach:
- Why we mount SMB on the host, not in the container (security, reliability)
- Why we bind specific subdirectories instead of the root share (avoid ephemeral volumes)
- How the separation of concerns improves operations and portability
Add troubleshooting section covering:
- Files not appearing on SMB share after upload
- SMB mount failures on host
- Container startup issues
- Step-by-step verification commands
Document the .prproj path remapping rationale and AMPP proxy workflow context.
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
Previously, /mnt/smb-ame was mounted as /smb-share in the container, but
/watch, /output, and /ame-logs were separate Docker volumes, causing
uploaded files to be stored in ephemeral volumes instead of the SMB share.
Now bind each SMB subdirectory directly to its corresponding container path:
- /mnt/smb-ame/Watch → /watch
- /mnt/smb-ame/Output → /output
- /mnt/smb-ame/Logs → /ame-logs
This ensures uploaded .prproj files appear on the SMB share where AME can
access them from the watch folder.
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
closeModal() was setting pendingFile = null, then confirmSubmit()
was trying to append the now-null pendingFile to FormData, causing
'No file uploaded' error on every submission.
Fix: capture pendingFile into fileToSubmit before calling closeModal().
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
- Docker-compose already handles the bind-mounts via volumes config
- Entrypoint now just creates subdirectories and verifies access
- Removes 'Could not bind' warnings that were noise
- Cleaner startup logs
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
- Mount /mnt/smb-ame as /smb-share in container
- Entrypoint creates watch/output/logs subdirectories if missing
- Creates bind-mounts from /smb-share/watch to /watch, etc.
- Graceful fallback if SMB share not mounted on host
- Works without pre-existing subdirectories on SMB server
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
- Remove container-level CIFS mounting (requires SYS_ADMIN capability)
- Use docker-compose.yml bind-mounts from host (/mnt/smb-ame/*)
- Simplify entrypoint.sh to just verify mount points exist
- Include mount command in comments for host setup
- More reliable and doesn't require Docker capability grants
To use:
1. Mount SMB on host: sudo mount -t cifs //172.18.210.5/ame /mnt/smb-ame \
-o username=smb,password=Production2020!,uid=1000,gid=1000,file_mode=0755,dir_mode=0755,vers=3.0
2. Update /etc/fstab to persist mount across reboots
3. Start container: docker compose up -d
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
- credentials read from settings first
- env vars override settings
- embedded defaults (smb/Production2020!) used if nothing configured
- allows immediate SMB mount on container startup without config
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
- Create entrypoint.sh to handle SMB mount on container startup
- Read credentials from settings.json and mount //172.18.210.5/ame
- Bind-mount subdirectories (watch, output, logs) to container paths
- Update Dockerfile with cifs-utils and entrypoint script
- Update docker-compose.yml with SYS_ADMIN capability for mounting
- Add comprehensive SMB configuration section to README
- Include troubleshooting guide and alternative approaches
- Maintain backward compatibility with local volumes
- Never expose passwords to browser (server-side storage only)
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>