なぜこれが必要なのですか?
FTPの煩わしさや、ファイル転送にパブリックサービスとクラウド(BTsync、Google- \ Mail- \ Yandex-Disk \ Dropbox \など)を使用できないこと(NDAによる)を回避して、エンドユーザーにコンテンツを便利に配信します。

序文
私たちのオフィスには、グループに所属する従業員がいるActiveDirectoryを含む特定のインフラストラクチャがあります。
PCセッション中、ログイン後、構成されたポリシーを使用して、ネットワークドライブが各従業員にマウントされます。それを通じて、時々データが交換されます。ディスクには特定のフォルダ構造があり、その権限はこれらの同じグループを通じて構成されます。誰もが設定が彼に許可するものを見る。
通常、データを外部に送信するには、別のFTPを作成するか、データを既存のFTPにアップロードします。確かに、これは必ずしも便利ではありません。少なくとも、一時的なログインとパスワードの作成と管理(たとえば、パートナーが既製のコンテンツを提供する必要がある場合)、FTPサーバーのスペースの制御、「送信」する前にFTPサーバーに手動でアップロードすることです。
ある時点で、ネットワークドライブからエンドユーザーのデータを外部に直接提供できる必要がありました。できれば、比較的安全である必要があります。ダウンロードリンクを作成できます(有効期間、パスワード、元の権利との差別化がありました)。データなど)。
このアイデアは、パートナーの1人が社内サービスを提供していたためにプッシュされましたが、そこでは自作でした。
検索エンジンにはその場で既成のオプションはなく(それらを念頭に置いている場合は、コメントで購読を解除してください)、ゼロからの開発、テスト、およびサポートに潜在的に多くの人時間を費やしたいという願望とリソースはありませんでした。そして、多くの場合、すべてが以前にすでに発明されているのに、なぜ車輪を再発明するのか。このようにして、外部リソースをそれ自体に接続する方法を知っているNextCloudサービスが思い浮かびました。
最新の安定版、現在はバージョン19について説明しますが、セットアップ方法は以前のバージョンでも機能します。最初はバージョン16で実装し、その後徐々に更新しました。最近、最後(19)にゼロから上げたところですが、それに基づいて記事を書いています。
最終的に得たいもの:
- ActiveDirectoty\LDAP, , Jira, Confluence, Nexus .
- NextCloud, , , .
- NextCloud — - , . , .
- -, , NextCloud .* , — .
- 従業員は、フォルダや別のファイルなど、利用可能なリソースへの一時的なパスワードで保護されたリンクを作成できます。また、それらを管理します(リンク)-取り消し、寿命の変更など。
- 安全なリンクが送信されたエンドユーザーは、安全なリンクを開いてパスワードを入力するだけで、共有されているデータをダウンロードできます。
依存関係の展開と構成
まず、オペレーティングシステムをインストールできる別の仮想マシンまたはサーバーが必要です。次に、NextCloudが必要です。
システムとサービスの展開に関するHabréに関する記事は複数あります。
アレクサンダーSシステムのインストールからクラウドの構成(年ごとの記事の更新を含む)までのプロセスを非常によく説明しました。これをもう一度繰り返す理由はありません。
1.ネットワークドライブをNextCloudに接続しているため、システムにパッケージが必要です:smbclient、libsmbclient、php-ldap、およびphp-smbclient。
備考、Dockerを使用する場合
, — samba , Dockerfile. , , php-smbclient “apt install package”.
Dockerfile
FROM nextcloud:latest
RUN apt update -y && apt install -y --allow-unauthenticated smbclient libsmbclient libsmbclient-dev
RUN pecl install smbclient
RUN docker-php-ext-enable smbclient
2. sambaサーバー(smb1サポートが無効になっている)の設定の特殊性により、nextcloudを備えたマシンで、ファイル/etc/samba/smb.confおよび/usr/share/samba/smb.confで、プロトコルを担当する行を変更する必要がありました。
[global]
client min protocol = SMB2
client max protocol = SMB3
Dockerfileの例の続き
RUN rm -frv /etc/samba/smb.conf /usr/share/samba/smb.conf
ADD smb.conf /etc/samba/
ADD smb.conf /usr/share/samba/
そうしないと、nextcloudはドライブに接続できませんでした。
Nextcloudのセットアップ
したがって、Nextcloudはすでにインストールされており、依存関係がインストールされており、サービスには、インストール中に作成された1人の内部ユーザーがいます。
第一歩。従業員アカウントのテンプレートを準備しています。
システムには複数の従業員がいて、徐々にその数が変わるため(作成するユーザーのテンプレートを事前に構成しない場合)、全員のホームフォルダーにいくつかのサンプルファイルがあります。nextcloudにこれ用の個別の設定(config.phpで構成されているスケルトンファイル)があるのは良いことです。
'skeletondirectory' => '/var/www/html/data/donotdeletme',
つまり、空のフォルダーを作成し、そのフォルダーへのフルパスを構成で指定できます。
ステップ2。ユーザーを「読み取り専用」にする
ユーザー設定セクション(http(s)://nextcloud.domain.tld/settings/users)の「1B」(1バイト)でクォータを指定するだけで十分です。
ステップ3-事前にZipStreamerを修正する
ZipStreamerは、NextCloudバックエンドで使用されるライブラリであり、その場で、つまり大量のファイルをダウンロードするときにアーカイブを作成するために使用されます。

使い方
, "Dowload All Files"/" ", , ( ) , .
, ( .zip, — .tar)
, , .
: Google Drive, ., ..

, ( .zip, — .tar)
, , .
: Google Drive, ., ..
問題は、不明な理由で、NextCloudに埋め込まれたzipをzip64に切り替えるロジックが失敗するという事実にあります。フォルダ内に65536を超えるファイルがある場合、および/またはそれらの合計重量が4GBを超える場合、ダウンロードされた問題に直面する可能性があります。ファイルが破られるか、4GBをダウンロードした後にダウンロードが中断されます。
この問題には十分な時間が割り当てられました。GitHubにはクローズドチケット(#1755、#15871、#8798)がありますが、問題は解決されたと思われますが、それでも問題は解決され、さまざまな成功を収めて再現されました。 、仕事に大きく干渉します。私はそれをもっと根本的に解決しなければなりませんでした。
決定
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
, -, , .


.
ステップ4-リンクパラメータを調整する
で出版パラメータ、我々はそれは便利であるようルールを設定しました。たとえば、必須のパスワード保護を作成し、必須の有効期間を設定します。
ステップ5-ネットワークドライブを接続する
- 外部ストレージの設定に進みましょう。(http(s)://nextcloud.domain.tld/settings/admin/externalstorages)
- SMB \ CIFSストレージを追加することを選択します。
- 名前、ドメイン、フォルダなどのフィールドに入力します。
- 「資格情報、データベースに保存」を選択します。ユーザーがログインとパスワードのリンクを使用して入力したときに、ユーザーがディスクをNextCloudのアカウントに接続できるようにするのはこのアイテムです。(セッション中にログインとパスワードを保存するアイテムは離陸しませんでした)。
- メニュー<...>で、「読み取り専用」チェックボックスと共有の許可をマークすることを忘れないでください。
ステップ6-LDAPを介してユーザーを起動する
すべての準備が整ったので、マーケットプレイスからプラグインをインストールし、LDAPに接続した直後にインストールします。私たちのシステムでは、NextcloudAccessグループに属する従業員にアクセスを許可しました。あなたは同じことをすることができます。
結論
これで、これらすべての単純な操作の後で、最も明白な操作ではない場合があります。サービスが機能し、ディスクが接続され、従業員が追加され、ユーザーがダウンロードして満足しています。
Dockerfileの完全な例
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/
ストレステスト
「荷物はどうですか?」-とうとうお願いします。
ラッシュアワー時の測定


私たちのサービスインスタンスは、他のVMの中でも仮想マシンの約6Gb Ram + 6CPUで実行されます。
ネットワーク負荷のピーク時には、2.5Gbを少し超えるRAMが使用され、プロセッサは目詰まりせず、平均リターンは約5Gbit / sでした(レコードは8Gbit / sに達しました)。
私たちが気付いた唯一のことは、6Gbit / sを超えて外の世界に転送すると、Webインターフェイスが定期的に落ちるが、ユーザーからのダウンロードは継続しているということです。
特定された欠点:
- NextCloudは、作成されたすべてのリンクをグローバルに制御することはできません。これらは、各アカウント内の個別のセクションにのみ表示されます。
- リンクを使用して接続されたドライブのルートを共有する場合、アカウントで使用可能なすべてのフォルダーがリンクで共有されるため、これは潜在的なデータリークとして機能する可能性があります。
- 発生したサービスを1年間使用していた現在、データベースのoc_filecacheテーブルの重量は約29Gbで、行数は約10万行です(バニラMySQL 5.7.xを使用しています)。これは、バグ#16834、#6395、#7312、#20349が原因です。2番目のインスタンスに監視がありますが。
読んでくれてありがとう。ご質問、ご意見、ご提案がございましたら、お気軽にご質問ください。建設的な批判をお待ちしております。
: nextcloud 16, 17, 18, 19
: 26.07.2020
: 24.09.2020
: . Areso.
: 1.0.0.9