Mengapa ini perlu?
Pengiriman konten yang nyaman ke pengguna akhir, melewati kerumitan dengan FTP dan ketidakmampuan (karena NDA) untuk menggunakan layanan publik dan cloud untuk transfer file (BTsync, Google- \ Mail- \ Yandex-Disk \ Dropbox \ etc).
Kata pengantar
Kantor kami memiliki infrastruktur tertentu, antara lain Active Directory, di mana kami memiliki karyawan yang berkelompok.
Selama sesi PC, setelah masuk, menggunakan kebijakan yang dikonfigurasi, drive jaringan dipasang untuk setiap karyawan. Melalui itu, dari waktu ke waktu, data dipertukarkan. Disk memiliki struktur folder tertentu, yang haknya dikonfigurasi melalui grup yang sama ini. Semua orang melihat pengaturan yang memungkinkannya.
Biasanya, untuk mengirim data ke dunia luar, baik FTP terpisah, atau data diunggah ke yang sudah ada. Saya akui, ini jauh dari selalu nyaman - setidaknya, membuat dan mengelola login dan kata sandi sementara (misalnya, ketika mitra perlu memberikan konten siap pakai), mengontrol ruang di server FTP, mengunggah secara manual ke server FTP sebelum "mengirim".
Pada titik tertentu, kami harus dapat langsung memberikan data pengguna akhir ke dunia luar dari drive jaringan kami dan, sebaiknya, itu harus relatif aman: Anda dapat membuat tautan unduhan (memiliki masa pakai, kata sandi, perbedaan hak atas yang asli data dan sebagainya).
Ide ini didorong kepada kami oleh salah satu mitra, karena mereka memiliki layanan internal, tetapi ada yang ditulis sendiri.
Tidak ada opsi yang siap pakai dengan cepat di mesin pencari (jika Anda memikirkannya, silakan berhenti berlangganan di komentar), dan tidak ada yang memiliki keinginan dan sumber daya untuk menghabiskan banyak jam kerja potensial untuk pengembangan dari awal, pengujian, dan dukungan. Dan mengapa menemukan kembali roda, jika seringkali segala sesuatu telah ditemukan sebelumnya. Ini adalah bagaimana layanan NextCloud muncul, yang tahu bagaimana menghubungkan sumber daya eksternal ke dirinya sendiri.
Kami akan berbicara tentang stabil terbaru, saat ini versi 19, tetapi metode penyiapan kami akan berfungsi untuk versi sebelumnya juga - kami awalnya menerapkannya pada versi 16 dan kemudian diperbarui secara bertahap. Baru-baru ini saya baru saja mengangkatnya dari nol pada yang terakhir (19), dan berdasarkan itu saya menulis artikel.
Apa yang ingin kami dapatkan pada akhirnya:
- ActiveDirectoty\LDAP, , Jira, Confluence, Nexus .
- NextCloud, , , .
- NextCloud โ - , . , .
- -, , NextCloud .* , โ .
- Seorang karyawan dapat membuat tautan sementara yang dilindungi kata sandi ke sumber daya apa pun yang tersedia baginya - baik itu folder atau file terpisah. Dan juga mengelolanya (tautan) - mencabut, mengubah umur, dll.
- Pengguna akhir, yang dikirimi tautan aman, hanya perlu membukanya dan memasukkan kata sandi untuk dapat mengunduh data yang dibagikan dengannya.
Memperluas dan mengonfigurasi dependensi
Untuk memulainya, kita perlu memiliki mesin atau server virtual terpisah tempat kita dapat menginstal sistem operasi, dan kemudian - NextCloud.
Ada lebih dari satu artikel di Habrรฉ yang dikhususkan untuk penerapan sistem dan layanan.
AlexanderScukup baik dan dijelaskan secara rinci proses dari instalasi sistem hingga konfigurasi cloud (termasuk memperbarui artikel berdasarkan tahun). Saya tidak melihat alasan untuk mengulangi semua ini lagi.
1. Karena kita menghubungkan drive jaringan ke NextCloud, kita memerlukan paket ke sistem: smbclient , libsmbclient , php-ldap , dan php-smbclient .
Catatan, jika menggunakan Docker
2. Karena kekhasan pengaturan server samba kami (dukungan smb1 dinonaktifkan), pada mesin dengan nextcloud, di file /etc/samba/smb.conf dan /usr/share/samba/smb.conf, kami harus mengubah baris yang bertanggung jawab atas protokol:
[global]
client min protocol = SMB2
client max protocol = SMB3
Kelanjutan dari contoh Dockerfile
RUN rm -frv /etc/samba/smb.conf /usr/share/samba/smb.conf
ADD smb.conf /etc/samba/
ADD smb.conf /usr/share/samba/
Jika tidak, nextcloud tidak pernah bisa terhubung ke drive.
Pengaturan Nextcloud
Jadi, Nextcloud sudah diinstal, dependensi diinstal, dan layanan memiliki satu pengguna internal yang dibuat selama penginstalan.
Langkah pertama. Mempersiapkan template untuk akun karyawan.
Karena kita akan memiliki lebih dari satu karyawan dalam sistem, dan secara bertahap jumlahnya akan berubah - jika Anda tidak mengkonfigurasi template pengguna yang dibuat sebelumnya - setiap orang akan memiliki beberapa file contoh di folder home mereka. Ada baiknya bahwa nextcloud memiliki pengaturan terpisah untuk ini - file kerangka , yang dikonfigurasi di config.php .
'skeletondirectory' => '/var/www/html/data/donotdeletme',
Artinya, Anda dapat membuat folder kosong dan menentukan jalur lengkapnya di konfigurasi.
Langkah kedua. Menjadikan pengguna "hanya baca"
Cukup menentukan kuota di "1 B" (1 byte) di bagian pengaturan pengguna ( http (s): //nextcloud.domain.tld/settings/users ).
Langkah ketiga - perbaiki ZipStreamer terlebih dahulu
ZipStreamer adalah pustaka yang digunakan di backend NextCloud, digunakan untuk membuat arsip "dengan cepat", yaitu saat mengunduh banyak file.
Bagaimana itu bekerja
, "Dowload All Files"/" ", , ( ) , .
, ( .zip, โ .tar)
, , .
: Google Drive, ., ..
, ( .zip, โ .tar)
, , .
: Google Drive, ., ..
Masalahnya terletak pada kenyataan bahwa, untuk alasan yang tidak diketahui, logika pengalihan zip ke zip64 yang disematkan di NextCloud gagal, dan jika ada lebih dari 65536 file di folder, dan / atau total beratnya melebihi 4GB, kemungkinan besar Anda akan menghadapi masalah yang diunduh. file akan dipukuli, atau pengunduhan akan terputus setelah pengunduhan 4GB.
Masalah ini dialokasikan cukup waktu, di GitHub bahkan ada, dan tidak ada satu, tiket tertutup (# 1755 , # 15871 , # 8798 ), tetapi terlepas dari kenyataan bahwa masalah itu seharusnya sudah diselesaikan , kami masih memilikinya, dan mereproduksi dengan berbagai keberhasilan , sangat mengganggu pekerjaan. Saya harus menyelesaikannya dengan lebih radikal.
Keputusan
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
, -, , .
.
Langkah keempat - sesuaikan parameter tautan
Dalam parameter publikasi, kami mengonfigurasi aturan sesuai keinginan. Misalnya, kami membuat perlindungan kata sandi wajib dan mengatur seumur hidup wajib.
Langkah lima - hubungkan drive jaringan
- Mari kita pergi ke menyiapkan penyimpanan eksternal . ( http (s): //nextcloud.domain.tld/settings/admin/externalstorages )
- Kami memilih untuk menambahkan penyimpanan SMB \ CIFS.
- Kami mengisi kolom untuk nama, domain, folder, dll.
- Kami memilih "Kredensial, simpan dalam database" - item inilah yang memungkinkan pengguna untuk menghubungkan disk ke akunnya di NextCloud saat pengguna masuk menggunakan tautan login dan kata sandinya. (Item yang menyimpan login dan kata sandi selama sesi tidak lepas landas).
- Jangan lupa di menu <...> untuk menandai kotak centang "Read-only" dan izin untuk berbagi.
Langkah enam - meluncurkan pengguna melalui LDAP
Sekarang setelah semuanya siap, kami menginstal plugin dari marketplace, dan segera setelah kami menghubungkan LDAP. Di sistem kami, kami memberikan akses ke karyawan yang berada di grup NextcloudAccess . Anda juga bisa melakukan hal yang sama.
Kesimpulan
Itu saja, setelah semua ini sederhana, tetapi kadang-kadang bukan manipulasi yang paling jelas - layanan berfungsi, disk terhubung, karyawan ditambahkan, dan pengguna mengunduh dan senang.
Contoh lengkap Dockerfile kami
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/
Pengujian Stres
"Bagaimana kabarmu dengan beban itu?" - Anda bertanya pada akhirnya.
Pengukuran selama jam sibuk
Instance layanan kami berjalan pada ~ 6Gb Ram + 6CPU di mesin virtual di antara VM lainnya.
Pada puncak beban jaringan, sedikit lebih dari 2.5Gb RAM digunakan, prosesor tidak tersumbat, dan pengembalian rata-rata sekitar 5Gbit / s (rekor mencapai 8Gbit / s).
Satu-satunya hal yang kami perhatikan adalah ketika kami mentransfer lebih dari 6Gbit / dtk ke dunia luar, antarmuka web kami secara berkala jatuh, tetapi unduhan dari pengguna terus berjalan.
Kerugian yang teridentifikasi:
- NextCloud tidak memiliki kemampuan untuk memiliki kendali global atas semua tautan yang dibuat. Mereka hanya ditampilkan dalam setiap akun di bagian terpisah.
- Jika Anda membagikan root drive yang terhubung menggunakan link, ini dapat berfungsi sebagai potensi kebocoran data, karena semua folder yang tersedia untuk akun Anda akan dibagikan di link tersebut.
- Saya perhatikan bahwa selama satu tahun menggunakan layanan yang dinaikkan, saat ini, tabel oc_filecache dalam database memiliki berat ~ 29 Gb dan memiliki sekitar ~ 100 ribu baris (kami menggunakan vanilla MySQL 5.7.x). Ini karena bug # 16834 , # 6395 , # 7312 , # 20349 . Sementara ada pengawasan pada tingkat kedua.
Terima kasih sudah membaca. Jika Anda memiliki pertanyaan, komentar atau saran - jangan ragu, saya selalu senang memberikan kritik yang membangun.
: nextcloud 16, 17, 18, 19
: 26.07.2020
: 24.09.2020
: . Areso.
: 1.0.0.9