feat(web): SFTP-Anbindungen als Quelle wählbar; Doku
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
5786b1e206
commit
893fe0c95d
@@ -3,7 +3,7 @@
|
|||||||
Selbst gehosteter Dienst mit Weboberfläche, der **SMB/CIFS- und NFS-Freigaben
|
Selbst gehosteter Dienst mit Weboberfläche, der **SMB/CIFS- und NFS-Freigaben
|
||||||
verwaltet** und **Dateien zeitgesteuert verschiebt** – „alle N Sekunden Ordner 1
|
verwaltet** und **Dateien zeitgesteuert verschiebt** – „alle N Sekunden Ordner 1
|
||||||
prüfen, passende Dateien nach Ordner 2 bringen“. Quelle und Ziel sind
|
prüfen, passende Dateien nach Ordner 2 bringen“. Quelle und Ziel sind
|
||||||
unabhängig voneinander per SMB, NFS, lokal oder (nur als Ziel) per SFTP angebunden.
|
unabhängig voneinander per SMB, NFS, SFTP oder (als Ziel) lokal angebunden.
|
||||||
|
|
||||||
Typischer Einsatz: Ein Synology-NAS nimmt Scans entgegen, NetMover schiebt sie alle
|
Typischer Einsatz: Ein Synology-NAS nimmt Scans entgegen, NetMover schiebt sie alle
|
||||||
30 Sekunden in den Eingangsordner von Paperless-ngx.
|
30 Sekunden in den Eingangsordner von Paperless-ngx.
|
||||||
@@ -176,7 +176,7 @@ Lege in NetMover die *Anbindung → Neue Anbindung* an:
|
|||||||
| Feld | Wert |
|
| Feld | Wert |
|
||||||
|---|---|
|
|---|---|
|
||||||
| Name | `Paperless` |
|
| Name | `Paperless` |
|
||||||
| Typ | SFTP (nur Ziel) |
|
| Typ | SFTP |
|
||||||
| Server / SSH-Port | IP des LXC / `22` |
|
| Server / SSH-Port | IP des LXC / `22` |
|
||||||
| Freigabe / Pfad | `/opt/paperless_data/consume` |
|
| Freigabe / Pfad | `/opt/paperless_data/consume` |
|
||||||
| Anmeldeart | SSH-Schlüssel |
|
| Anmeldeart | SSH-Schlüssel |
|
||||||
|
|||||||
+4
-2
@@ -50,11 +50,13 @@ Passwort festlegt. Passwort ändern: *System → Einstellungen*.
|
|||||||
|---|---|---|
|
|---|---|---|
|
||||||
| **SMB/CIFS** | Windows-Freigaben, Synology, QNAP, … | Quelle und Ziel |
|
| **SMB/CIFS** | Windows-Freigaben, Synology, QNAP, … | Quelle und Ziel |
|
||||||
| **NFS 4 / NFS 3** | Linux-Server, NAS mit NFS | Quelle und Ziel |
|
| **NFS 4 / NFS 3** | Linux-Server, NAS mit NFS | Quelle und Ziel |
|
||||||
| **SFTP** | Server, die nur per SSH erreichbar sind (z. B. ein LXC mit Paperless) | nur Ziel |
|
| **SFTP** | Server, die nur per SSH erreichbar sind (z. B. ein LXC mit Paperless) | Quelle und Ziel |
|
||||||
|
|
||||||
SMB- und NFS-Anbindungen werden **eingehängt** und erscheinen unter
|
SMB- und NFS-Anbindungen werden **eingehängt** und erscheinen unter
|
||||||
`/mnt/netmover/<name>`. SFTP wird nicht eingehängt, NetMover verbindet sich bei
|
`/mnt/netmover/<name>`. SFTP wird nicht eingehängt, NetMover verbindet sich bei
|
||||||
jedem Lauf.
|
jedem Lauf. Als **Quelle** gelten bei SFTP dieselben Sicherheitsprüfungen; weil
|
||||||
|
SFTP-Server Änderungszeiten nur sekundengenau melden, sollte das
|
||||||
|
Stabilitätsfenster dort mindestens 2 Sekunden betragen.
|
||||||
|
|
||||||
### Felder {#anbindung-felder}
|
### Felder {#anbindung-felder}
|
||||||
|
|
||||||
|
|||||||
@@ -792,9 +792,8 @@ def _rule_form(
|
|||||||
d=d,
|
d=d,
|
||||||
errors=errors,
|
errors=errors,
|
||||||
rule_id=rule_id,
|
rule_id=rule_id,
|
||||||
src_mounts=[m for m in mounts if m.type.is_kernel_mount],
|
src_mounts=mounts,
|
||||||
src_options=[("", "– wählen –")]
|
src_options=[("", "– wählen –")] + [(m.id, f"{m.name} ({m.type.value})") for m in mounts],
|
||||||
+ [(m.id, m.name) for m in mounts if m.type.is_kernel_mount],
|
|
||||||
dst_options=[("", "– wählen –")] + [(m.id, f"{m.name} ({m.type.value})") for m in mounts],
|
dst_options=[("", "– wählen –")] + [(m.id, f"{m.name} ({m.type.value})") for m in mounts],
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
{% if mount %}<input type="hidden" name="mount_id" value="{{ mount.id }}">{% endif %}
|
{% if mount %}<input type="hidden" name="mount_id" value="{{ mount.id }}">{% endif %}
|
||||||
<fieldset><legend>Verbindung <a class="legend-help" href="/help#anbindung-felder" title="Hilfe">?</a></legend><div class="fields">
|
<fieldset><legend>Verbindung <a class="legend-help" href="/help#anbindung-felder" title="Hilfe">?</a></legend><div class="fields">
|
||||||
{{ field('name', 'Name', d.name, errors=errors, attrs='required maxlength="100"', hint=('Verzeichnis: ' ~ mount.mountpoint if mount and mount.mountpoint else '')) }}
|
{{ field('name', 'Name', d.name, errors=errors, attrs='required maxlength="100"', hint=('Verzeichnis: ' ~ mount.mountpoint if mount and mount.mountpoint else '')) }}
|
||||||
{{ select('type', 'Typ', [('cifs', 'SMB/CIFS'), ('nfs4', 'NFS 4'), ('nfs3', 'NFS 3'), ('sftp', 'SFTP (nur Ziel)')], d.type.value, errors=errors) }}
|
{{ select('type', 'Typ', [('cifs', 'SMB/CIFS'), ('nfs4', 'NFS 4'), ('nfs3', 'NFS 3'), ('sftp', 'SFTP')], d.type.value, errors=errors) }}
|
||||||
{{ field('server', 'Server', d.server, errors=errors, placeholder='192.168.1.10 oder nas.lan', attrs='required') }}
|
{{ field('server', 'Server', d.server, errors=errors, placeholder='192.168.1.10 oder nas.lan', attrs='required') }}
|
||||||
<div class="field{{ ' has-error' if errors.get('share') }}">
|
<div class="field{{ ' has-error' if errors.get('share') }}">
|
||||||
<label for="f-share">Freigabe / Pfad</label>
|
<label for="f-share">Freigabe / Pfad</label>
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
{% block content %}
|
{% block content %}
|
||||||
<h1>{{ 'Regel bearbeiten' if rule_id else 'Neue Regel' }}</h1>
|
<h1>{{ 'Regel bearbeiten' if rule_id else 'Neue Regel' }}</h1>
|
||||||
{% if errors.get('_') %}<p class="msg error">{{ errors['_'] }}</p>{% endif %}
|
{% if errors.get('_') %}<p class="msg error">{{ errors['_'] }}</p>{% endif %}
|
||||||
{% if not src_mounts %}<p class="msg info">Zuerst eine SMB- oder NFS-Anbindung als Quelle <a href="/mounts/new">anlegen</a>.</p>{% endif %}
|
{% if not src_mounts %}<p class="msg info">Zuerst eine Anbindung als Quelle <a href="/mounts/new">anlegen</a>.</p>{% endif %}
|
||||||
<form class="form" method="post" data-dynamic>
|
<form class="form" method="post" data-dynamic>
|
||||||
<input type="hidden" name="csrf_token" value="{{ csrf }}">
|
<input type="hidden" name="csrf_token" value="{{ csrf }}">
|
||||||
<fieldset><legend>Allgemein <a class="legend-help" href="/help#regeln" title="Hilfe">?</a></legend><div class="fields">
|
<fieldset><legend>Allgemein <a class="legend-help" href="/help#regeln" title="Hilfe">?</a></legend><div class="fields">
|
||||||
|
|||||||
Reference in New Issue
Block a user