Warum ist das notwendig?
Bequeme Bereitstellung von Inhalten an den Endbenutzer unter Umgehung des Problems mit FTP und der Unfähigkeit (aufgrund von NDA), öffentliche Dienste und Clouds für die Dateiübertragung zu verwenden (BTsync, Google- \ Mail- \ Yandex-Disk \ Dropbox \ usw.).
Vorwort
Unser Büro verfügt über eine bestimmte Infrastruktur, einschließlich Active Directory, in der Mitarbeiter in Gruppen arbeiten.
Während einer Sitzung auf einem PC wird nach der Anmeldung mithilfe konfigurierter Richtlinien für jeden Mitarbeiter ein Netzwerklaufwerk bereitgestellt. Dadurch werden von Zeit zu Zeit Daten ausgetauscht. Die Festplatte verfügt über eine bestimmte Ordnerstruktur, deren Rechte über dieselben Gruppen konfiguriert werden. Jeder sieht, was die Einstellungen ihm erlauben.
Um Daten an die Außenwelt zu senden, wird normalerweise entweder ein separater FTP-Server ausgelöst oder die Daten werden auf einen vorhandenen hochgeladen. Ich gebe zu, dies ist alles andere als bequem - zumindest das Erstellen und Verwalten temporärer Anmeldungen und Kennwörter (z. B. wenn Partner vorgefertigte Inhalte bereitstellen müssen), das Steuern des Speicherplatzes auf einem FTP-Server und das manuelle Hochladen auf einen FTP-Server vor dem "Senden".
Irgendwann mussten wir in der Lage sein, Daten direkt von unserem Netzlaufwerk an Endbenutzer nach außen zu übertragen, und dies sollte vorzugsweise relativ sicher sein: Sie können einen Download-Link erstellen (er hatte eine Lebensdauer, ein Kennwort und eine Differenzierung der Rechte zum Original) Daten und so weiter).
Diese Idee wurde uns von einem der Partner aufgezwungen, da sie einen internen Service hatten, aber dort war sie selbst geschrieben.
Es gab keine vorgefertigten Optionen im laufenden Betrieb in der Suchmaschine (wenn Sie diese im Sinn haben, melden Sie sich bitte in den Kommentaren ab), und niemand hatte den Wunsch und die Ressourcen, potenziell viele Arbeitsstunden für die Entwicklung von Grund auf neu zu investieren, zu testen und zu unterstützen. Und warum das Rad neu erfinden, wenn oft schon alles erfunden wurde. So kam mir der NextCloud-Dienst in den Sinn, der weiß, wie externe Ressourcen mit sich selbst verbunden werden.
Wir werden über die neueste stabile Version sprechen, derzeit Version 19, aber unsere Setup-Methode wird auch für frühere Versionen funktionieren - wir haben sie zunächst in Version 16 implementiert und dann schrittweise aktualisiert. Kürzlich habe ich es am letzten (19) von Grund auf neu erstellt und darauf basierend schreibe ich einen Artikel.
Was wir am Ende bekommen wollen:
- ActiveDirectoty\LDAP, , Jira, Confluence, Nexus .
- NextCloud, , , .
- NextCloud — - , . , .
- -, , NextCloud .* , — .
- Ein Mitarbeiter kann temporäre kennwortgeschützte Links zu allen ihm zur Verfügung stehenden Ressourcen erstellen - sei es ein Ordner oder eine separate Datei. Und verwalten Sie sie auch (Links) - widerrufen, ändern Sie die Lebensdauer usw.
- Der Endbenutzer, an den der sichere Link gesendet wurde, muss ihn nur öffnen und das Kennwort eingeben, um die mit ihm freigegebenen Daten herunterladen zu können.
Abhängigkeiten entfalten und konfigurieren
Zunächst benötigen wir eine separate virtuelle Maschine oder einen separaten Server, auf dem wir das Betriebssystem installieren können, und dann - NextCloud.
Es gibt mehr als einen Artikel über Habré, der sich mit der Bereitstellung des Systems und des Dienstes befasst.
AlexanderSrecht gut und ausführlich beschrieben den Prozess von der Installation des Systems bis zur Konfiguration der Cloud (einschließlich der Aktualisierung der Artikel nach Jahr). Ich sehe keinen Grund, das alles noch einmal zu wiederholen.
1. Da wir ein Netzwerklaufwerk mit NextCloud verbinden, benötigen wir Pakete zum System: smbclient , libsmbclient , php-ldap und php-smbclient .
Bemerkung, falls Docker verwendet wird
2. Aufgrund der Besonderheiten der Einstellungen unseres Samba-Servers (die Unterstützung von smb1 ist deaktiviert) mussten wir auf dem Computer mit nextcloud in den Dateien /etc/samba/smb.conf und /usr/share/samba/smb.conf die für das Protokoll verantwortlichen Zeilen ändern:
[global]
client min protocol = SMB2
client max protocol = SMB3
Fortsetzung des Dockerfile-Beispiels
RUN rm -frv /etc/samba/smb.conf /usr/share/samba/smb.conf
ADD smb.conf /etc/samba/
ADD smb.conf /usr/share/samba/
Andernfalls konnte nextcloud keine Verbindung zum Laufwerk herstellen.
Nextcloud-Setup
Nextcloud ist also bereits installiert, die Abhängigkeiten sind installiert und der Dienst verfügt über einen internen Benutzer, der während der Installation erstellt wurde.
Schritt eins. Vorbereiten einer Vorlage für Mitarbeiterkonten.
Da wir mehr als einen Mitarbeiter im System haben und sich deren Anzahl allmählich ändert - wenn Sie die Vorlage des erstellten Benutzers nicht vorkonfigurieren -, befinden sich jeweils mehrere Beispieldateien im Basisordner. Es ist gut, dass nextcloud eine separate Einstellung für diese Skeleton-Dateien hat , die in config.php konfiguriert ist .
'skeletondirectory' => '/var/www/html/data/donotdeletme',
Das heißt, Sie können einen leeren Ordner erstellen und den vollständigen Pfad dazu in der Konfiguration angeben.
Schritt zwei. Benutzer "schreibgeschützt" machen
Es reicht aus, das Kontingent in "1 B" (1 Byte) im Abschnitt "Benutzereinstellungen" anzugeben ( http (s): //nextcloud.domain.tld/settings/users ).
Schritt drei - Reparieren Sie den ZipStreamer im Voraus
ZipStreamer ist eine Bibliothek, die im NextCloud-Backend verwendet wird. Sie wird verwendet, um Archive "on the fly" zu erstellen, dh während eine Reihe von Dateien heruntergeladen werden.
Wie es funktioniert
, "Dowload All Files"/" ", , ( ) , .
, ( .zip, — .tar)
, , .
: Google Drive, ., ..
, ( .zip, — .tar)
, , .
: Google Drive, ., ..
Das Problem liegt in der Tatsache, dass aus unbekannten Gründen die Logik des Wechsels von zip zu zip64, das in NextCloud eingebettet ist, fehlschlägt. Wenn sich mehr als 65536 Dateien im Ordner befinden und / oder deren Gesamtgewicht 4 GB überschreitet, treten höchstwahrscheinlich Probleme auf, die beim Herunterladen auftreten Die Datei wird entweder geschlagen oder der Download wird nach den heruntergeladenen 4 GB unterbrochen.
Diesem Problem wurde genügend Zeit zugewiesen, auf GitHub gibt es sogar ein geschlossenes Ticket (Nr. 1755 , Nr. 15871 , Nr. 8798 ), aber trotz der Tatsache, dass das Problem angeblich gelöst wurde , haben wir es immer noch und werden mit unterschiedlichem Erfolg reproduziert stark mit der Arbeit störend. Ich musste es radikaler lösen.
Entscheidung
100% 64 , 64- . « ».
<, nextcloud>/lib/private/Streamer.php:
, -, , .
.
<, nextcloud>/lib/private/Streamer.php:
- $this->streamerInstance = new ZipStreamer(['zip64' => false]);
+ $this->streamerInstance = new ZipStreamer(['zip64' => true]);
, Docker
Integrity Check ( /usr/src/nextcloud/* /var/www/html/*).
/var/www — , .
/usr/src/nextcloud/lib/private/ CI . , .
/var/www — , .
/usr/src/nextcloud/lib/private/ CI . , .
Dockerfile
RUN rm -frv /usr/src/nextcloud/lib/private/Streamer.php
ADD Streamer.php /usr/src/nextcloud/lib/private/
RUN chown nobody:nogroup /usr/src/nextcloud/lib/private/Streamer.php
, -, , .
.
Schritt vier - Verbindungsparameter anpassen
In den Veröffentlichungsparametern konfigurieren wir die Regeln nach Belieben. Zum Beispiel machen wir einen obligatorischen Passwortschutz und legen eine obligatorische Lebensdauer fest.
Schritt fünf - Schließen Sie das Netzlaufwerk an
- Gehen wir zum Einrichten externer Speicher . ( http (s): //nextcloud.domain.tld/settings/admin/externalstorages )
- Wir entscheiden uns, SMB \ CIFS-Speicher hinzuzufügen.
- Wir füllen die Felder für Name, Domain, Ordner usw. aus.
- Wir wählen "Anmeldeinformationen, in der Datenbank speichern". Mit diesem Element kann der Benutzer die Festplatte mit seinem Konto in NextCloud verbinden, wenn der Benutzer über seinen Login- und Kennwortlink eingibt. (Das Element, in dem der Login und das Passwort während der Sitzung gespeichert sind, wurde nicht gestartet.)
- Vergessen Sie nicht, im Menü <...> die Kontrollkästchen "Schreibgeschützt" und die Berechtigung zum Teilen zu markieren.
Schritt 6 - Starten von Benutzern über LDAP
Nun , da wir alles fertig haben, installieren wir das Plugin aus dem Markt, und sofort , nachdem wir connect LDAP. In unserem System haben wir Mitarbeitern Zugriff gewährt, die zur NextcloudAccess- Gruppe gehören . Sie können das gleiche tun.
Fazit
Nach all diesen einfachen, aber manchmal nicht offensichtlichsten Manipulationen ist es soweit - der Dienst funktioniert, die Festplatte ist verbunden, Mitarbeiter werden hinzugefügt und Benutzer laden herunter und sind zufrieden.
Komplettes Beispiel unserer Docker-Datei
FROM nextcloud:latest
ENV DEBIAN_FRONTEND noninteractive
#installing smbclient
RUN apt update -y && apt install -y --allow-unauthenticated smbclient libsmbclient libsmbclient-dev
RUN pecl install smbclient
RUN docker-php-ext-enable smbclient
#fix of ZipStreammer
RUN rm -frv /usr/src/nextcloud/lib/private/Streamer.php
ADD Streamer.php /usr/src/nextcloud/lib/private/
RUN chown nobody:nogroup /usr/src/nextcloud/lib/private/Streamer.php
#fix of smb config
RUN rm -frv /etc/samba/smb.conf /usr/share/samba/smb.conf
ADD smb.conf /etc/samba/
ADD smb.conf /usr/share/samba/
Stresstest
"Wie geht es dir mit der Ladung?" - Du fragst endlich.
Messungen während der Hauptverkehrszeit
Unsere Service-Instanz wird unter anderem auf ~ 6 GB Ram + 6CPU in einer virtuellen Maschine ausgeführt.
In der Spitze der Netzwerklast wurden etwas mehr als 2,5 GB RAM verwendet, der Prozessor war nicht verstopft und die durchschnittliche Rendite betrug etwa 5 Gbit / s (der Datensatz erreichte 8 Gbit / s).
Das einzige, was uns aufgefallen ist, ist, dass bei der Übertragung über 6 Gbit / s nach außen unsere Weboberfläche regelmäßig abfällt, die Downloads von Benutzern jedoch weiterhin ausgeführt werden.
Identifizierte Nachteile:
- NextCloud kann nicht alle erstellten Links global steuern. Sie werden nur innerhalb jedes Kontos in einem separaten Abschnitt angezeigt.
- Wenn Sie das Stammverzeichnis eines verbundenen Laufwerks über einen Link freigeben, kann dies als potenzielles Datenleck dienen, da alle für Ihr Konto verfügbaren Ordner im Link freigegeben werden.
- Ich habe festgestellt, dass die Tabelle oc_filecache in der Datenbank für ein Jahr, in dem der erhöhte Dienst verwendet wird, derzeit ~ 29 GB wiegt und ungefähr ~ 100.000 Zeilen enthält (wir verwenden Vanilla MySQL 5.7.x). Dies liegt an den Fehlern # 16834 , # 6395 , # 7312 , # 20349 . Während es in der zweiten Instanz eine Überwachung gibt.
Danke fürs Lesen. Wenn Sie Fragen, Kommentare oder Vorschläge haben - zögern Sie nicht, ich freue mich immer über konstruktive Kritik.
: nextcloud 16, 17, 18, 19
: 26.07.2020
: 24.09.2020
: . Areso.
: 1.0.0.9