Sejarah menciptakan cloud rumah. Bagian 3. Membuat cloud pribadi - menginstal dan mengkonfigurasi Nextcloud

Dalam perjalanan untuk membuat layanan cloud kami sendiri, sementara kami terbiasa dengan sistem Debian dan membuat server web . Sekarang saatnya untuk langkah terakhir - membuat dan mengonfigurasi cloud pribadi berdasarkan server Nextcloud.





Daftar isi


Bagian 1. Mengatur lingkungan Debian Anda untuk penggunaan sehari-hari
Bagian 2. Membuat server - mengatur LAMP di Debian
Bagian 3. Membuat cloud pribadi - menginstal dan mengkonfigurasi Nextcloud
Bagian 4. Pembaruan 2018 - Debian 9 dan Nextcloud 13
Bagian 5. Memperbarui 2019 - PHP 7.2, MariaDB 10.4 dan Nextcloud 17



Navigasi bab cepat


Kata Pengantar
Mempersiapkan server untuk menginstal Nextcloud
Instal Nextcloud
Mengatur Penyimpanan Nextcloud
Konfigurasikan Akses Mesin Virtual Nextcloud dari Jaringan Area Lokal
Pengaturan nextcloud
Penyesuaian Halus Nextcloud Lanjut
Perlindungan untuk Nextcloud
Sinkronisasi Cloud Smartphone
Sinkronisasi Cloud Komputer Pribadi
Kata penutup



Kata Pengantar


Jadi kami sampai pada hal yang semuanya dimulai dan yang tidak cepat kami lakukan. Bagian ini akan menjelaskan instalasi dan beberapa poin dalam mengkonfigurasi server Nextcloud di mesin virtual VMWare, serta sedikit pengalaman bekerja dengannya dalam bentuk menyinkronkan konten sepasang smartphone dan folder berbasis Windows pada komputer desktop. Petunjuk instalasi berikut untuk Nextcloud menyiratkan bahwa layanan ini digunakan pada server yang dibuat sesuai dengan instruksi di bagian sebelumnya dari cerita saya.

Awalnya, bab ini direncanakan kecil, karena saya ingin membatasi diri hanya pada deskripsi menginstal dan mengkonfigurasi Nextcloud, pada dasarnya mengakhiri cerita ini tentang "memasuki Linux untuk tugas tertentu." Tetapi, berpikir bahwa ini mungkin tampak menarik bagi seseorang, maka dia memutuskan untuk menunjukkan bagaimana saya menyelesaikan masalah sinkronisasi folder di komputer rumah saya, jadi bab terakhir ini dengan lancar mengalir dari instruksi yang jelas tentang apa dan bagaimana melakukan dalam pemrograman. Ini menjelaskan beberapa "vinaigrette" di bagian ini - ini dimulai dengan pekerjaan dan pengaturan di Linux, mengalir ke tingkat pengaturan jaringan dan perangkat lunak virtual, dan berakhir dengan kruk planing di Windows. Di sisi lain, seri artikel ini berjudul "Sejarah Penciptaan ..." dan saya memutuskan untuk menceritakannya sampai akhir.

Catatan
Setelah membaca lebih lanjut dalam konstruksi formulir http: // 127.0.0.1 (https: // 127.0.0.1), spasi setelah http: // (https: //) harus dihapus ketika memasuki bilah alamat browser. Ruang disisipkan saat menerbitkan artikel ini untuk mencegah mesin dari secara otomatis mengubah teks menjadi tautan.



Mempersiapkan server untuk menginstal Nextcloud


Nextcloud adalah aplikasi web yang memiliki satu set file dan bekerja dengan database MySQL yang diberikan. Aplikasi web diinstal sebagai situs biasa, untuk instalasi yang Anda perlu mengunggah file "mesin" ke server, jalankan file instalasi dan tentukan detail akses ke database yang sebelumnya dibuat untuk situs ini selama instalasi.

Buat direktori tempat file Nextcloud akan ditempatkan:
# mkdir / var / www / nextcloud

Saya memutuskan untuk menolak HTTP, hanya menyisakan akses melalui HTTPS. Untuk melakukan ini, Anda perlu mengkonfigurasi apache.

Buka file:
# nano /etc/apache2/sites-available/default-ssl.conf
Dan sebelum tag, tambahkan konten berikut:

<Directory /var/www/nextcloud> Options FollowSymLinks AllowOverride All Require all granted </Directory> 


Nonaktifkan konfigurasi HTTP:
# a2dissite 000-default.conf

Tutup port 80:
# ufw hapus izinkan 80

Dan restart server web:
# service apache2 restart

Sekarang Anda perlu membuat database untuk nextcloud. Kami memasukkan mysql dengan memasukkan kata sandi dari superuser mysql:
# mysql -u root -p

Buat database yang disebut nextcloud:
mysql> CREATE DATABASE `nextcloud`;

Buat pengguna dengan nama nextcloud dan kata sandi sepele nc123:
mysql> CREATE USER 'nextcloud' @ 'localhost' DIIDENTIFIKASI OLEH 'nc123';

Kami memberikan akses penuh ke pengguna nextcloud ke database nextcloud:
mysql> GRANT ALL PRIVILEGES ON `nextcloud`. * KE 'nextcloud' @ 'localhost';

Perbarui tabel privilege:
mysql> PRIVILEGUS FLUSH;

Keluar dari mysql:
mysql: mysql> keluar

Selain itu, Anda perlu menginstal modul tambahan untuk PHP:
# apt-get install curl libcurl3 libcurl3-dev php5-curl
# a2enmod menulis ulang

Pada bagian pertama dari cerita ini, kami membuka port untuk interaksi jaringan dan mail, tetapi untuk target kami tidak diperlukan dan lebih baik untuk menutupnya. Hapus aturan:
# ufw hapus izinkan 138 / udp
# ufw hapus izinkan 139 / udp
# ufw hapus izinkan 139 / tcp
# ufw hapus izinkan 445 / tcp
# ufw hapus izinkan 25
# ufw hapus izinkan 465
# ufw hapus izinkan 110
# ufw hapus izinkan 143
# ufw delete allow 993



Instal Nextcloud


Unduh file dan buka paket ke direktori yang dimaksud:
# wget download.nextcloud.com/server/releases/nextcloud-11.0.2.tar.bz2
# tar xjf nextcloud-11.0.2.tar.bz2 -C / var / www

Ubah izin folder:
# chmod 755 / var / www / nextcloud

Dan kami menugaskan pemilik folder ini server web sehingga tidak ada masalah dengan penulisan ke dalamnya:
# chown -R www-data: www-data / var / www / nextcloud

Itu saja! Layanan diinstal, jika Anda mengetikkan browser https: // 127.0.0.1/nextcloud, wizard instalasi terbuka. Tapi mari kita tunggu dengan ini, setelah sebelumnya menyiapkan tempat untuk menyimpan data pengguna.

Perlu disebutkan bahwa Nextcloud versi 11.0.2 saat ini cukup ketinggalan zaman dan mengandung kerentanan yang tidak ada dalam versi yang lebih baru dan lebih banyak saat ini, jadi jika Anda menginstal cabang 11.x, maka lebih baik untuk menginstal versi yang lebih baru (pada awal 2018 - ini versi 11.0.7).



Mengatur Penyimpanan Nextcloud


Bagian ini opsional dan dapat dilewati tanpa masalah - semuanya akan berfungsi tanpanya. Namun, jika Anda pergi untuk membuat direktori data di luar mesin virtual, saya sarankan Anda membiasakan diri dengannya.

Secara default, konten yang disinkronkan akan disimpan di direktori / var / www / nextcloud / nxcdata. Opsi ini tidak cocok untuk saya karena beberapa alasan. Di satu sisi, saya tidak ingin terus meningkatkan ukuran file disk virtual. Di sisi lain, saya ingin memiliki solusi penyimpanan data mesin virtual yang terpisah dan independen. Hal paling sederhana yang langsung terlintas dalam pikiran adalah penggunaan drive USB. Jika tidak ada ruang yang cukup, drive dapat dengan mudah diganti. Jika perlu, dapat terhubung ke komputer lain dan mengunduh file yang diperlukan. Mobile dan nyaman. Namun, saya tidak ingin menggunakan USB 2.0 karena bandwidth yang relatif kecil menurut standar modern, dan saya tidak berhasil dengan USB 3.0 - perangkat lunak virtualisasi (WMVare dan VirtualBox) tidak ingin meneruskan perangkat yang terhubung melalui pengontrol USB 3.0.

Nafsu makan saya dalam proses menciptakan cloud telah meningkat dan saya memiliki tidak kurang dari satu terabyte, jadi pada akhirnya saya memutuskan untuk menghubungkan hard drive dua-terabyte biasa ke mesin virtual, yang sudah berada dan terhubung di dalam komputer. Jika perlu, dapat ditarik keluar tanpa masalah dan terhubung melalui adaptor SATA <-> USB 3.0 SATA yang ada.

Jadi, ide utamanya adalah mengatur titik permanen untuk menghubungkan direktori dengan konten pengguna di luar direktori / var / www / nextcloud, di mana tautan simbolik yang disebut nxcdata dibuat, dengan merujuk pada direktori data nyata yang dapat dihubungkan dengan berbagai cara pada media yang berbeda.

Buat direktori:
# mkdir / mnt / nxcdata

Kami mengubah hak:
# chmod 770 / mnt / nxcdata

Kami membuat pemilik server web:
# chown www-data: www-data / mnt / nxcdata

Saya dapat menempatkan data di mana saja dan di mana saja, yang utama adalah menempatkan tautan simbolis ke direktori ini di direktori / mnt / nxcdata dan beri nama nxcdata, yaitu. path lengkap akan terlihat seperti / mnt / nxcdata / nxcdata.

Pertama, saya menguji solusi untuk folder lokal yang saya buat di direktori home.

Membuat folder di tempat yang tepat:
$ mkdir / home / user / nxcdata

Mengubah hak:
# chmod 755 / home / user / nxcdata

Dimiliki server web:
# chown -R www-data: www-data / home / user / nxcdata

Membuat tautan simbolis:
# ln -s / home / user / nxcdata / mnt / nxcdata / nxcdata

Solusi ini bisa diterapkan, sehingga Anda dapat melanjutkan. Direktori data eksternal dapat dihubungkan dengan dua cara - melalui layanan VMWare Shared atau langsung sebagai disk atau partisi fisik. Harus dipahami bahwa solusi pertama hanya mungkin jika alat vmware diinstal, yang diinstal tanpa masalah hanya jika ada antarmuka grafis dari sistem operasi (jika tidak, Anda harus mengedit skrip instalasi alat vmware). Jika kita meninggalkan antarmuka grafis, maka hanya ada pilihan untuk menghubungkan drive langsung ke mesin virtual, tetapi dengan solusi ini saya harus banyak menderita. Setelah beberapa waktu, saya masih menemukan versi yang stabil, dengan mempertimbangkan naskah universal yang dibuat, yang menggabungkan kedua opsi koneksi.

Untuk folder yang terhubung melalui VMWare Shared Folders di bagian Shared Folders dari pengaturan mesin virtual, Anda perlu menghubungkan folder yang diperlukan dari sistem host dan memberinya nama vmw-nxcdata. Folder ini dapat merujuk ke beberapa direktori pada hard disk atau langsung ke direktori root dari beberapa disk pada sistem host.

Folder yang dipasang akan muncul di sistem virtual secara otomatis di sepanjang jalur / mnt / hgfs / vmw-nxcdata. Namun, masalahnya adalah bahwa server web tidak akan memiliki hak yang cukup untuk menulis file di sepanjang jalur ini dan sarana standar sistem tidak dapat menetapkan kembali hak untuk direktori ini. Karena itu, saya harus mencari cara untuk me-mount sumber daya tersebut secara manual.

Buat folder:
# mkdir / mnt / vmw-nxcdata

Kami memasang menggunakan modul vmhgfs, yang diinstal dengan vmware-tools:
# mount -t vmhgfs -o uid = www-data, gid = www-data, fmask = 007, dmask = 007 .host: / vmw-nxcdata / mnt / vmw-nxcdata

Pemasangan perlu dilakukan dengan parameter ini untuk operasi server web yang bebas masalah di masa depan. Awalnya, saya memasang tanpa menentukan uid / gid dan masker, tetapi kemudian tidak menghasilkan sesuatu yang baik, karena mengubah hak setelah pemasangan tidak lagi mungkin. Setelah menyelesaikan pemasangan, ini mungkin menampilkan: "Tidak dapat menambahkan entri ke mtab, melanjutkan", tetapi itu akan dipasang dan berfungsi.

Hebat, kami memasang direktori. Sekarang Anda dapat menempatkan tautan simbolis ke direktori ini di / mnt / nxcdata. Tetapi saya tidak ingin melakukan ini secara manual setiap kali saya memulai atau me-restart server. Cara termudah adalah memasukkan perintah di atas dalam file /etc/rc.local untuk memasangnya ke baris “exit 0”. Namun, saya ingin pelepasan otomatis terjadi ketika mesin virtual dimatikan untuk keamanan data yang andal. Dan saya memutuskan untuk melakukan semuanya pada level layanan dan sedikit berurusan dengan mekanisme init / update-rc, semakin saya penasaran dan ternyata cukup menarik.

Arti dari tindakan berikut adalah untuk membuat layanan sistem yang akan dipanggil dan menjalankan perintah yang telah ditentukan saat sistem dihidupkan atau dimatikan. Layanan ini dijelaskan oleh skrip yang dikompilasi sesuai dengan aturan tertentu dan terletak di /etc/init.d. Blok INIT INFO terletak di bagian paling awal skrip dan berisi informasi layanan di mana saya ingin menyebutkan arahan Default-Start dan Default-Stop - mereka menentukan tingkat pelaksanaan di mana skrip harus dimulai atau dihentikan secara default.

Tingkat Eksekusi:

0 - eksekusi skrip ketika sistem dimatikan
1 - eksekusi skrip saat startup sistem dalam mode satu pengguna
2 - eksekusi skrip pada startup sistem dalam mode multi-pengguna
3 - 5 - dicadangkan
6 - eksekusi skrip saat reboot sistem

Setelah menulis skrip, skrip diaktifkan menggunakan mekanisme pembaruan-rc, yang, pada kenyataannya, membuat tautan ke skrip di direktori yang diperlukan /etc/rc0.d - /etc/rc6.d, yang isinya sesuai dengan tugas yang dilakukan oleh run level. Tautan dapat dibuat secara independen, tetapi, tidak seperti mengaktifkan atau menonaktifkan konfigurasi server web apache, Anda perlu mempertimbangkan banyak nuansa akun di sini, jadi Anda perlu mengaktifkan atau menonaktifkan layanan melalui pembaruan-rc.

Jadi, buat file:
# nano /etc/init.d/nxcdata_automount.sh

Dan tuliskan konten berikut ke dalamnya:

 #!/bin/sh # nxcdata_automount.sh 1.0 ### BEGIN INIT INFO # Provides: myscript # Required-Start: # Required-Stop: # Default-Start: 1 2 3 4 5 # Default-Stop: 0 6 # Short-Description: nxcdata_automount.sh 1.0 # Description: nxcdata_automount.sh 1.0 ### END INIT INFO . /lib/lsb/init-functions # Start actions perform_start() { log_daemon_msg «Start nxcdata_automount» sleep 30 mount -t vmhgfs -o uid=www-data,gid=www-data,fmask=007,dmask=007 .host:/vmw-nxcdata /mnt/vmw-nxcdata #mount -t ntfs-3g -o uid=www-data,gid=www-data,fmask=007,dmask=007 /dev/sdb1 /mnt/sdb1 #mount -t ext4 /dev/sdb1 /mnt/sdb1 sleep 5 service fail2ban restart log_end_msg 0 return 0 } # Stop actions perform_stop() { log_daemon_msg «Stop nxcdata_automount» umount /mnt/nxcdata log_end_msg 0 return 0 } case $1 in start) perform_start ;; stop) perform_stop ;; *) echo “Usage: /etc/init.d/myscript {start|stop}” exit 3 ;; esac 


Perhatikan beberapa tim yang berkomentar di bagian perform_start - ini adalah landasan kami untuk masa depan. Selain itu, setelah pemasangan, layanan fail2ban dimulai kembali.

Paradoksnya adalah bahwa setelah setahun saya tidak lagi ingat mengapa saya melakukan ini, tetapi saya sangat meragukan hal itu dilakukan begitu saja. Jelas, setelah memasang layanan, untuk beberapa alasan, layanan macet atau gagal untuk memulai pada awalnya dan harus dimulai ulang secara manual.

Setelah gangguan seperti itu, kami terus mengkonfigurasi lebih lanjut. Buat tautan simbolis:
# ln -s / mnt / vmw-nxcdata / mnt / nxcdata / nxcdata

Kami membuat skrip kami dapat dieksekusi:
# chmod + x /etc/init.d/nxcdata_automount.sh

Tambahkan skrip ke startup:
# update-rc.d default nxcdata_automount.sh

Kami mem-boot ulang sistem dan memastikan bahwa pemasangan otomatis berhasil dan semuanya dapat diakses dengan cara yang benar.

Untuk menghapus skrip, Anda perlu menjalankan beberapa perintah:
# perbarui-rc.d -f nxcdata_automount.sh hapus
# rm -f /etc/init.d/nxcdata_automount.sh

Dalam hal memasang drive yang tidak melalui VMWare Shared Folders, Anda harus langsung mengikuti langkah-langkah yang sama seperti ketika melakukan mount melalui VMWare Shared Folders, tetapi dengan mempertimbangkan fakta bahwa drive kedua penuh muncul di sistem. Bagaimana cara mengetahui huruf drive?

Sebagian besar perangkat blok Linux terhubung melalui antarmuka SCSI, sehingga dalam kebanyakan kasus disk akan dimulai dengan huruf sd. Huruf ketiga dalam nama disk berarti nomor seri dalam sistem dan ditunjukkan secara alfabet: sda - disk pertama, sdb - disk kedua, sdc - disk ketiga dan seterusnya. Kemudian muncul angka yang mendefinisikan nomor partisi pada disk: sda1, sda2 dan sebagainya. Cara termudah untuk melihat semua drive yang dipetakan adalah dengan melihat isi direktori / dev / dan menyaring perangkat sd:

$ ls -l / dev / | grep sd

Sebagai contoh, kita perlu menghubungkan drive sdb1 dengan sistem file NTFS.

Buat direktori dan pasang disk ke dalamnya:
# mkdir / mnt / sdb1
# mount -t ext4 / dev / sdb1 / mnt / sdb1

Buat direktori untuk data, atur hak dan pengguna untuk itu:
# mkdir / mnt / sdb1 / nxcdata & chmod 770 / mnt / sdb1 / nxcdata & chown -R www-data: www-data / mnt / sdb1 / nxcdata

Selanjutnya, Anda juga perlu membuat skrip untuk automounting dan menyesuaikan perintah mount dalam skrip (contoh menghubungkan drive dengan NTFS dan EXT4 sudah ada dalam skrip dan berkomentar) dan menambahkan skrip ke autoload.

B membuat tautan simbolis ke direktori data:
# ln -s / mnt / sdb1 / nxcdata / mnt / nxcdata / nxcdata

Faktanya, semua masalah ini dengan banyak direktori nxcdata dirancang untuk satu hal: untuk memberikan transfer sederhana dari direktori data di masa mendatang - Anda tidak perlu mengedit konfigurasi di mesin Nextcloud dan umumnya naik ke dalamnya - yang perlu Anda lakukan hanyalah menghubungkan disk baru, salin ke datanya dan buat kembali tautan simbolis yang mengarah ke direktori baru dengan data. Pada saat yang sama, semua tindakan tidak melampaui direktori / mnt. Jadi semuanya menjadi rumit secara evolusioner, saya hanya tidak ingin kehilangan solusi yang saya miliki.

Apa cara terbaik untuk mentransfer data di luar mesin virtual? Saya akan berbagi pengalaman tentang opsi mana yang saya hentikan dan mengapa.

Drive USB secara otomatis ditangkap ketika mesin virtual boot, dengan benar dan sepenuhnya melemparkan diri, dan semuanya selalu bekerja, tetapi hanya sampai drive terputus dari sistem karena suatu alasan. Reboot atau pemutusan fisik dan koneksi disk membantu. Keputusan itu ternyata tidak bisa diandalkan. Tidak ada masalah dengan flash drive, tetapi volume dan kecepatan kerjanya jelas tidak cocok untuk saya. Mungkin ada baiknya mencoba drive eksternal dengan kekuatan otonom.

Penerusan direktori melalui VMWare Shared Folders bekerja dengan stabil dan sempurna. Solusi ini sepenuhnya memuaskan tugas menyinkronkan dua smartphone. Semuanya bekerja selama beberapa hari, puluhan gigabyte data dipompa. Namun, ketika saya memutuskan untuk menambahkan data dari komputer ke cloud, tiba-tiba saya menemukan masalah dengan jalur panjang dan nama file. Secara teori, batas nama file / folder NTFS adalah 255 karakter, tetapi dalam praktiknya Windows API membatasi hingga 244 karakter. Secara teori, batas panjang lintasan ke file atau folder di NTFS adalah 32.767 karakter, tetapi dalam praktiknya, Windows API membatasi hingga 245 karakter. Mengingat saya penggemar berat penataan informasi, panjang jalur saya bisa sangat besar. Judul buku yang tidak disatukan juga dapat dengan mudah 100-150 karakter, termasuk spasi. Pembatasan ini adalah masalah yang diketahui dari VMWare Shared Folders, yang tidak dapat disembuhkan bahkan ketika menggunakan Windows 10 dengan segala macam kunci pintar dalam registri untuk menghapus batas 255 karakter. Alasan yang mungkin adalah keterbatasan vmhgfs. Cara terhubung yang nyaman ini harus ditinggalkan. Alasannya sudah pasti pasti - masalahnya ada di sistem file virtual, yang digunakan dalam mekanisme Shared Folder VMWare.

Solusi selanjutnya adalah menghubungkan hard drive langsung ke mesin virtual. Itu juga tidak berhasil dengan lancar. Struktur data (atau sistem file, dan ini terbukti untuk NTFS dan EXT2 / 3/4) terus-menerus rusak baik ketika disk atau partisi-nya "ditangkap" oleh perangkat lunak mesin virtual, atau ketika dikembalikan ke sistem host bahkan jika saya mentransfer keseluruhan Berkendara luring di sistem host. Dalam beberapa mode, saya tidak menulis atau membaca data - saya bahkan tidak dapat memformat hard drive atau partisi yang diteruskan dengan benar. Namun, kami berhasil menemukan mode kerja: hard disk fisik dengan satu partisi, diformat dalam NTFS, terhubung ke mesin virtual dalam mode koneksi tertentu: SATA / Independen / Persisten / Gunakan partisi individual. Folder nxcdata yang berisi data harus berada di hard drive.



Konfigurasikan Akses Mesin Virtual Nextcloud dari Jaringan Area Lokal


Kami tidak memiliki masalah membuka situs web dalam mesin virtual atau dari sistem host. Tetapi bagaimana cara membuka situs yang dibuat dari komputer lain di jaringan lokal? Mari kita lihat struktur jaringan kami, yang digambarkan di bawah ini.



Gambar menunjukkan bahwa router terhubung ke Internet secara langsung dan dikonfigurasi sehingga secara otomatis mendistribusikan alamat IP ke perangkat yang terhubung dalam kisaran 192.168.0.2-192.168.0.254. Alamat 192.168.0.2 diterima oleh komputer kami, dan 192.168.0.3 - komputer kedua tempat kami membuat server. Namun, perangkat lunak virtualisasi diinstal pada komputer kedua, yang membuat router virtualnya sendiri dan mengonfigurasi DHCP pada subnet 192.168.233.0/24. Server virtual kami menerima IP 192.168.133.138.

Saya dapat dengan mudah membuka situs di dalam mesin virtual 192.168.233.138. Saya dapat dengan mudah membuka situs dari mesin 192.168.0.3 hanya dengan memasukkan alamat IP yang diinginkan di browser - perangkat lunak virtualisasi telah mengurus konfigurasi yang benar dari lingkungan jaringan pada mesin host. Tetapi bagaimana saya bisa sampai ke situs dari komputer 192.168.0.2? Jika saya memasukkan alamat IP 192.168.233.138, tidak akan ada yang terbuka untuk saya, karena komputer saya maupun router sebenarnya tidak tahu apa-apa tentang subnet ini. Jika saya memasukkan alamat 192.168.0.3, maka tidak ada yang akan terbuka untuk saya juga, karena sebenarnya tidak ada situs di komputer ini - itu ada di dalam mesin virtualnya.

Untuk mengatasi masalah ini, Anda perlu mengkonfigurasi router virtual komputer 192.168.0.3. Kita sudah tahu bahwa akses ke situs berjalan pada port 80 dan 443. Ketika mengakses port-port ini ke mesin 192.168.0.3, kita perlu membangun perutean sehingga permintaan dialihkan ke mesin virtual 192.168.233.138. Untungnya untuk ini kami memiliki alat yang tersedia. VMWare Workstation memiliki alat Editor Jaringan Virtual yang dapat dibuka dari menu mesin virtual (Edit -> Virtual Network Editor).



Alat ini memungkinkan Anda mengelola pengaturan jaringan dengan cukup fleksibel. Kita perlu memilih kartu jaringan virtual VMNet8 dan klik tombol "Pengaturan NAT ..." yang telah tersedia. Di jendela yang terbuka, Anda perlu menambahkan aturan untuk membuat perutean yang kita butuhkan.



Tentukan port sistem host dan kemudian tentukan alamat IP dan port mesin virtual di mana permintaan harus dialihkan. Untuk meneruskan lalu lintas HTTPS, Anda harus menentukan port sistem host 443 dan port 443 dan alamat mesin virtual 192.168.233.138. Setelah membuat aturan, klik "OK" di semua jendela - lingkungan jaringan virtual dikonfigurasi ulang secara otomatis.

Setelah perubahan ini, situs kami akan mulai terbuka dari mesin 192.168.0.2 ketika mengakses alamat 192.168.0.3.

Pengaturan serupa untuk penerusan port tersedia tidak hanya untuk VMWare, tetapi juga untuk VirtualBox (Pengaturan → Jaringan → pilih adaptor yang diperlukan → Lanjutan → Port forwarding). Namun, selama percobaan menghubungkan hard drive ke tahap ini, saya menemukan VMWare Player gratis diinstal, di mana Virtual Network Editor tidak. Saya tidak menemukan apa pun tentang penerusan porta untuk VMWare Player di Internet dan saya harus menggunakan versi percobaan VMWare Workstation - ketika menginstal produk, ia memberi 30 hari penggunaan gratis. Setelah 30 hari, produk dapat dihapus, dibersihkan dan dipasang kembali, tetapi perhatian ke server entah bagaimana berlebihan dan jelas tidak diinginkan.Dan kemudian saya pergi ke trik kecil (atau besar). Kumpulan file VMWare Workstation berisi utilitas vmnetcfg, yang pada dasarnya berjalan melalui item Editor Jaringan Virtual. Namun, itu tidak di set file VMWare Player. Tetapi ketika menginstal VMWare Player, apakah itu entah bagaimana mengkonfigurasi lingkungan jaringannya? Saya baru saja mengambil utilitas ini dan menyalinnya ke folder dengan VMWare Player, dan kemudian meluncurkannya. Anehnya, semuanya berhasil. Mungkin saja pengaturan jaringan yang tipis di lingkungan VMWare Player tidak akan berfungsi, tetapi port forwarding disediakan, dan saya tidak membutuhkan lebih banyak.

Untuk mengakses server kami dari Internet, Anda perlu meneruskan port pada router yang terhubung ke Internet dengan cara yang sama. Dalam firmware sebagian besar router, ada bagian Port Forwarding di mana Anda dapat mengonfigurasi perutean dengan menentukan port eksternal dan port serta alamat IP mesin internal. Namun, ada sedikit nuansa. Jika penyedia memberi kami alamat IP asli atau kami membelinya dari dia, maka tidak akan ada masalah - kami memasukkan alamat IP ini dari komputer dari mana saja di dunia, router nyata akan mengarahkan lalu lintas ke komputer dengan mesin virtual di mana router virtual akan mengarahkan lalu lintas langsung ke virtual sebuah mobil. Tetapi apa yang harus dilakukan untuk seseorang yang tidak memiliki kesempatan untuk mendapatkan alamat IP asli dan dia mendapatkan alamat dinamis atau berada di belakang NATpenyedia, mendapatkan alamat IP "abu-abu"? Saya tidak harus menyelesaikan masalah seperti itu, karena saya memiliki IP "putih" statis. Siapa pun yang harus menyelesaikan masalah seperti itu dengan satu atau lain cara harus menghadapi masalah ini. Saya akan menyarankan mencari ke arah dyndns atau freedns.afraid.org dalam hal alamat dinamis, atau membeli VDS murah untuk mencoba membuat semacam perutean sendiri, karena dalam kasus apa pun, tanpa server eksternal dengan alamat IP statis, masalah ini tidak dapat diselesaikan.

Setelah mengkonfigurasi perutean, saya memperbaiki alamat IP komputer 192.168.0.3 dan 192.168.233.138, secara manual menuliskannya dalam pengaturan kartu jaringan mesin-mesin ini untuk mengecualikan penetapan ulang otomatis mereka.



Pengaturan nextcloud


Sekarang saatnya untuk membuka https: // 127.0.0.1/nextcloud di browser di dalam mesin virtual, https: // 192.168.233.138/nextcloud dari sistem host atau, berdasarkan perutean yang dikonfigurasi yang dijelaskan di atas, https: // 192.168.0.3/nextcloud dari sembarang komputer di jaringan lokal.

Selanjutnya, kita mengatur login / kata sandi untuk administrator, akses ke database yang dibuat sebelumnya, dan sebagai lokasi penyimpanan, tentukan path lengkap ke direktori nxcdata: / mnt / nxcdata / nxcdata. Langkah pengaturan ini tidak berbeda dengan menginstal situs.

Dalam pengaturan admin, saya membuat perubahan sederhana berikut:

- Pribadi → memilih bahasa Rusia dan menetapkan email untuk pengguna administrator @ localhost
- Administrasi → Akses umum → menonaktifkan semua item
- Administrasi → Survei penggunaan → menonaktifkan semua item
- Administrasi → Pengaturan lanjutan → Manajemen file: “Ukuran file unggahan maksimum” diatur ke 25 GB
- Pengguna → membuat grup pengguna dan menambahkan pengguna baru ke pengguna itu

Setelah mengatur, Anda harus mengaktifkan caching.

Buka file:
# nano /var/www/nextcloud/config/config.php

Dan di bagian paling akhir, sebelum ");" tambahkan yang berikut: Sekarang Anda harus mengizinkan akses eksternal ke situs di tingkat "mesin" -nya. Buka file: # nano /var/www/nextcloud/config/config.php Di bagian dipercaya_domain Anda perlu menambahkan alamat IP server ke array, tambahkan alamat tempat Nexcloud diinstal. Bagian tepercaya_domain dalam kasus kami akan terlihat seperti ini:

'memcache.local' => '\OC\Memcache\Memcached',
'memcache.distributed' => '\OC\Memcache\Memcached',
'memcached_servers' => array(
array('localhost', 11211),
),









'trusted_domains' =>
array (
0 => '127.0.0.1',
1 => '192.168.233.138',
),


Sekarang Anda dapat memeriksa kemudahan servis dari layanan - buka situs dan masuk sebagai pengguna. Jika otorisasi berhasil, maka layanan siap untuk berperang - Anda dapat menginstal aplikasi untuk sinkronisasi di komputer dan smartphone, untuk akses masukkan alamat IP 192.168.0.3 dan detail akses akun yang dibuat untuk setiap perangkat.
Untungnya atau sayangnya, saya tidak harus menggunakan potensi penuh dari layanan yang dibuat, karena pada awalnya saya membutuhkan sistem cadangan dengan verifikasi dan, pada awalnya, saya hanya ingin bertahan dengan subversi, tetapi kecepatan komit dari sejumlah besar file kecil sangat membuat saya sangat sedih. Saya melakukan segalanya untuk tumbuh, tetapi saya tidak akan mengambil keuntungan darinya, dan kemudian entah bagaimana menjadi sepenuhnya tidak sampai ke awan.

Tinjauan yang lebih rinci tentang penggunaan layanan ini dibuat oleh pengguna wtigga pada akhir 2017 dalam artikelnya “Cara mengunduh VPS:“ cloud ”Nextcloud Anda . Dari sudut pandang pengguna, artikel ini memberikan gambaran umum tentang server Nextcloud yang lebih baru, versi 12.



Penyesuaian Halus Nextcloud Lanjut


Selama pengoperasian cloud selama bulan pertama kerja, beberapa masalah muncul yang harus saya selesaikan dengan bantuan komunitas atau sendiri. Saya harus mengatakan bahwa saya menggunakan layanan ini sangat keras dan bahkan memeriksanya untuk ketahanan terhadap stres. Menyinkronkan beberapa gigabytes data dari ponsel pada malam hari dan hingga satu juta file kecil dari komputer adalah hal yang biasa. Secara umum, layanan ini memberikan kesan yang sangat positif pada saya.

Saya tidak akan mengatakan bahwa solusi di bawah ini benar dan indah, tetapi kruk ini berfungsi setidaknya untuk versi 11.0.2, jika tidak, tidak mungkin untuk menggunakan layanan ini. Dalam versi 12.x, sesuatu mungkin telah diperbaiki dan diperbaiki, jadi saya tidak akan merekomendasikan pengaturan pengaturan ini segera sebagai bagian dari pengaturan start-up, sedangkan untuk baris 11.x mereka dapat diterapkan segera.

Masalah 1

Kesalahan seperti "file terkunci" terjadi selama sinkronisasi. Sinkronisasi berhenti. Masalahnya diketahui - perlu untuk menghapus isi dari tabel oc_file_locks dengan mengeksekusi query berikut dari konsol mysql (ketika mengotorisasi pengguna nextcloud):
mysql> DELETE FROM oc_file_locks WHERE 1

Karena kesalahan seperti itu tidak biasa, saya tidak menemukan sesuatu yang lebih baik daripada membuat skrip dan meletakkannya langsung di folder root:
# nano / root / empty_oc_file_locks

Isi skrip :

 #!/bin/bash mysql -unextcloud > -pnc123 -D nextcloud <<MY_QUERY DELETE FROM oc_file_locks WHERE 1 MY_QUERY 


Script dapat dieksekusi secara manual, tetapi ini bukan metode kami. Saya memutuskan untuk menjalankannya secara otomatis setiap 15 menit menggunakan cron (https://ru.wikipedia.org/wiki/Cron).
Untuk melakukan ini, buat file:
# nano / root / crontab

Dengan konten berikut: Sekarang Anda perlu membuat perubahan pada penjadwal: # crontab / root / crontab Anda dapat memeriksa perubahan seperti ini: # crontab -l Masalah 2 Saat menyinkronkan melalui webDAV di log (lihat panel admin, diotorisasi oleh administrator) kesalahan berikut mungkin muncul:

*/15 * * * * root bash /root/empty_oc_file_locks












Error PHP reset() expects parameter 1 to be array, null given at /var/www/nextcloud/apps/files_versions/lib/Storage.php#783
Error PHP ksort() expects parameter 1 to be array, null given at /var/www/nextcloud/apps/files_versions/lib/Storage.php#782
Error PHP Invalid argument supplied for foreach() at /var/www/nextcloud/apps/files_versions/lib/Storage.php#759
Error PHP Undefined index: by_file at /var/www/nextcloud/apps/files_versions/lib/Storage.php#759
Error PHP Undefined index: all at /var/www/nextcloud/apps/files_versions/lib/Storage.php#757


Kali ini, masyarakat tidak melakukan apa-apa dan harus melakukan penyelidikan sendirian. Alasannya terletak pada kesalahan "Indeks tidak ditentukan ... Storage.php # 757", yang menyebabkan beberapa kesalahan lagi. Kami melihat kode untuk file ini. Seluruh masalah ada di kuota. Pada baris ini dalam kode (Storage.php # 757), ruang kosong dihitung dengan mempertimbangkan volume file arsip. Terjadi kesalahan dalam penghitungan, meskipun kuota ditetapkan ke "tidak terbatas". Untuk memperbaiki kesalahan di panel administrasi, saya menetapkan kuota "tak terbatas tetapi numerik" untuk setiap pengguna, misalnya, 100TB.

Masalah 3

Masalah dengan menyinkronkan file .htaccess - mereka hanya tidak disinkronkan! Dan saya tidak sendirian, di beberapa forum mereka mengajukan pertanyaan serupa. Namun, saya tidak menemukan solusi yang sudah jadi. Saya harus berpikir lagi sendiri. Sebagai hasil dari googling, melihat log, analisis kode, saya tidak memikirkan yang lebih baik daripada cara memperbaiki file engine nextcloud.
Dalam file /var/www/nextcloud/lib/private/Files/filesystem.php kita mencari baris berikut: Dan kita bawa ke form berikut:

$blacklist = \OC::$server->getConfig()->getSystemValue('blacklisted_files', array('.htaccess'));




$blacklist = \OC::$server->getConfig()->getSystemValue('blacklisted_files', array(''));




Perlindungan untuk Nextcloud


Anda dapat melindungi layanan kami dari pemilihan kata sandi untuk panel admin menggunakan fail2ban. Untuk melakukan ini, Anda perlu menggambarkan ekspresi karakteristik yang terjadi di log awan berikutnya ketika otentikasi gagal, yang dengannya pemicu yang sesuai akan diaktifkan.

Buat file:
# nano /etc/fail2ban/filter.d/nextcloud.conf

Dengan konten berikut:

[Definisi]
failregex = {"reqId": ". *", "RemoteAddr": ". *", "App": " core "," message ":" Gagal masuk: '. *' \ (Remote IP: '' \) "," level ": 2," time ":". * "}
ignoreregex =

Buka file:
# nano / etc /fail2ban/jail.local

Dan di akhir file, tambahkan berikut ini: Restart layanan: # service fail2ban restart Periksa filter aktif:

# nextcloud
[nextcloud]
enabled = true
port = http,https
protocol = tcp
filter = nextcloud
logpath = /var/log/nextcloud.log






# fail2ban-client status nextcloud

Jangan lupa bahwa sesuai dengan pengaturan fail2ban dari bagian sebelumnya, jika kata sandi tidak berhasil dimasukkan enam kali berturut-turut selama 12 jam, IP Anda akan diblokir selama 30 hari. Saya entah bagaimana menghabiskan dua malam karena kata sandi salah pada salah satu ponsel, sampai saya menemukan fakta sederhana ini di log sistem.



Sinkronisasi Cloud Smartphone


Untuk menyinkronkan konten ponsel yang menjalankan Android, ada aplikasi FolderSync yang luar biasa. Program sepenuhnya membenarkan harga rendahnya.

Pertama, Anda perlu membuat akun baru untuk menentukan https: // 192.168.0.3/nextcloud sebagai alamat server, masukkan login dan kata sandi untuk akun yang dibuat sebelumnya dan aktifkan sertifikat yang ditandatangani sendiri. Klik tombol "Test" dan pastikan koneksi ke server dalam urutan.

Selanjutnya Anda perlu membuat tugas. Dalam tugas tersebut, tentukan akun yang dibuat sebelumnya dan pilih jenis sinkronisasi - "Ke folder jauh". Tentukan folder jarak jauh (Anda dapat membuatnya langsung dari aplikasi "dan pilih folder lokal untuk sinkronisasi. Saya mengatur jadwal pada pukul 2 pagi setiap hari. Dalam pengaturan sinkronisasi, saya menyalakan" Sinkronisasi subfolder "dan" Sinkronisasi folder yang disertakan ", saya juga memilih opsi untuk selalu mengganti file lama dan jika terjadi konflik saya diizinkan untuk menggunakan file lokal secara default. Di bagian "Koneksi", saya mematikan semua koneksi kecuali Wi-Fi, dan saya mendaftarkan SSID jaringan Wi-Fi rumah saya di bagian "SSID WiFi yang Diizinkan" - aplikasi bud Saya hanya dapat menyinkronkan di jaringan rumah saya dan tidak mencoba mencari server di jaringan lain, saya meninggalkan pengaturan secara default.Di sini Anda dapat menambahkan pemfilteran. Saya membuat filter baru, "Nama folder berisi" dan menentukan nilai [nosync]. Dengan demikian, saya dapat mengecualikan beberapa folder dalam folder lokal yang ditentukan dari sinkronisasi dengan hanya menambahkan nama "[nosync]" ke akhir.

Pengaturan ini dibuat untuk folder lokal seperti DCIM, Unduh, Telegram, viber, WhatsApp. Ditambah beberapa folder pengguna saya yang berukuran beberapa gigabytes. Sekali sehari, isi folder ini disinkronkan dengan server, dan versi lama file di server tidak dihapus, tetapi diganti namanya dan dipindahkan ke arsip. Ini memungkinkan saya untuk dengan cepat memulihkan file yang terhapus secara tidak sengaja atau mengembalikan perubahan pada beberapa file lainnya.



Sinkronisasi Cloud Komputer Pribadi


Saya tidak menganggap diri saya seorang programmer sejati. Selama sepuluh tahun terakhir saya telah pemrograman dalam bahasa pemrograman yang hanya digunakan dalam pengembangan prosesor atau chipset. Karena saya tidak melakukan apapun dalam C / C ++ selama 15 tahun, tetapi saya perlu mengotomatisasi sesuatu di komputer, saya cukup aktif menggunakan bahasa scripting seperti BAT / CMD atau perangkat lunak seperti Sign 0f Mistery atau xStarter. Setelah saya mengetahui dan mencoba apa itu AutoIt dan ini telah menjadi era baru dalam otomatisasi PC saya.

Setelah saya menjadi yakin akan stabilitas dan keandalan sistem sinkronisasi pada telepon pintar, saya pikir akan lebih baik untuk menyinkronkan data di komputer rumah saya. Nextcloud memiliki klien sendiri untuk Windows dan, tentu saja, menjadi kandidat pertama untuk pengujian. Saya akan menyinkronkan volume data dari urutan satu terabyte, yang terdiri dari ratusan ribu file dengan ukuran berbeda. Data berbeda: musik, gambar, dokumen, e-book, distribusi, situs cadangan, dan sebagainya. Akan masuk akal untuk mengurangi semua ini untuk sinkronisasi data yang lebih penting, misalnya, seperti dokumen, tetapi kegembiraan menguasai saya dan saya ingin memeriksa kekuatan layanan.

Sepuluh jam setelah dimulainya sinkronisasi, dan sebenarnya unggahan konten pertama ke server, klien tersandung file dengan nama panjang. Pada saat itu, di server, saya juga menggunakan koneksi penyimpanan eksternal melalui VMWare Shared Folders dan saya harus mencoba selusin klien, dan kemudian melakukan percobaan sederhana pada menyalin file secara manual ke server untuk memahami bahwa masalahnya ada di sisi server. Jadi, setelah satu minggu peluncuran layanan yang sukses, saya harus memutar kembali ke mesin virtual cadangan dan meninggalkan mekanisme VMWare Shared Folders, mulai dari awal lagi. Pada akhirnya, saya menghapus hambatan ini di sisi server, menguji keandalan solusi selama satu minggu sinkronisasi smartphone, dan memutuskan untuk kembali ke komputer di rumah saya lagi. Kali ini klien tidak tersandung file yang bernasib buruk dan saya sudah senangnamun, setelah setengah hari menyinkronkan file-file kecil, klien kembali membeku. Sekarang ternyata jalurnya terlalu panjang di sisi komputer rumah dan klien Nextcloud tidak dapat memprosesnya dengan benar. Sayangnya, klien asli Nextcloud tidak berfungsi, dan konten informasinya tidak terlalu tinggi, jadi saya harus meninggalkannya.

Saya menghabiskan beberapa waktu mencoba mencari program yang nyaman untuk sinkronisasi yang mendukung manajemen baris perintah. Saya ingin melakukan tugas saya untuk setiap folder besar di komputer dan menjalankannya dalam mode batch. Sebelumnya, saya sudah membuat dan mengerjakan satu set file BAT untuk sinkronisasi menggunakan skrip dan mengelola FreeFileSync melalui baris perintah. Masalah jalur panjang atau nama file diselesaikan dengan mengatur folder lokal dari formulir "\\? \ D: \ Info", yaitu pada dasarnya merujuk ke folder lokal sebagai folder jaringan. Namun, apa itu webdav FreeFileSync tidak tahu. Sayangnya, tidak ada analog penuh FolderSync untuk Windows, tetapi lebih dari sekali di forum mereka merekomendasikan GoodSync dan, setelah melakukan selusin program lain, saya memutuskan untuk mencobanya. Sayangnya, GoodSync jauh lebih mahal,tetapi pemborosan satu kali sebesar $ 15 untuk keamanan data berharga mereka, pada prinsipnya, pemborosan yang layak. Program ini memiliki mode uji, jadi pertama-tama Anda dapat memverifikasi kinerja dan stabilitasnya.

GoodSync ternyata perangkat lunak yang cukup ramah. Ada versi portabel khusus yang disebut GoodSync2Go. Jadi dia tertarik padaku. Selama instalasi, Anda harus memilih huruf drive dan program diinstal di dalamnya di folder GoodSync. Saya membuat folder Sync di direktori root drive, katakanlah D, dan memindahkan folder GoodSync yang dibuat dengan semua konten di sana.

[ Teks ini ditulis khusus untuk situs geektimes.ru oleh AlexanderS .
Tautan ke sumber itu opsional, tetapi rujukannya sangat diinginkan! ]


Setelah instalasi, program perlu membuat tugas: folder lokal dan folder jarak jauh untuk sinkronisasi ditunjukkan. Dalam parameter pekerjaan, saya memilih sinkronisasi dari kiri ke kanan dengan pilihan opsi "Penghapusan sinkron" dan "Simpan versi sebelumnya dari file yang dihapus / diganti". Dalam pengaturan di sisi kiri, saya memilih "Salin Aman" dan "Jangan buat folder _gsdata_", di sebelah kanan - "Salin Aman" dan "Pra-Analisis Cepat dengan Stempel Waktu". Dengan demikian, tugas dibuat untuk setiap folder yang diperlukan. Katakanlah saya mengkonfigurasi tugas pada folder Info dan menamakannya "bck_Info".
Selanjutnya, dalam folder D: \ Sync, file bck_Info.bat dibuat dengan konten berikut:

 @set dir=%~dp0 @%dir%GoodSync\GoodSync2Go-v10.exe /miniwin /exit sync "%~n0" 


Ini adalah bahasa scripting BAT. Di baris pertama kode, jalur saat ini untuk skrip yang berjalan diatur ke variabel. Baris kedua memulai file GoodSync2Go-v10.exe dari folder GoodSync di sepanjang jalur ini, di mana tugas harus dijalankan dengan nama file (bck_Info), jendela eksekusi tugas diminimalkan, dan program akan secara otomatis menutup setelah menyelesaikan tugas. Saya dapat menyalin skrip ini beberapa kali, setiap kali hanya mengubah namanya menjadi nama tugas yang sebelumnya dibuat di GoodSync. Jadi, hanya dengan mengklik tombol Enter pada file BAT, saya dapat memulai sinkronisasi folder yang saya butuhkan secara individual.

Untuk menambahkan tugas baru di FreeFileSync, saya bisa menyalin file skrip xml dan memperbaikinya secara manual, mis. menjalankan shell grafis dari program tidak diperlukan sama sekali. Di GoodSync, semua tugas terdaftar di file D: \ Sync \ GoodSync \ GoodSync \ Profile \ jobs.tic dan untuk menambahkan tugas baru Anda harus membuka program dan membuatnya, karena mengedit file ini agak bermasalah dan tidak diketahui apa yang menyebabkannya.
Untuk menyinkronkan semua folder, sekarang Anda dapat menulis skrip bck_all.bat sederhana:

 @set dir=%~dp0 call %dir%bck_Info.bat call %dir%bck_Info2.bat call %dir%bck_Info3.bat call %dir%bck_Info4.bat 

Setiap baris skrip menyebabkan eksekusi skrip terpisah, yang memulai sinkronisasi.

Ini semua bekerja dengan sangat baik dan mudah, tetapi tidak ada kontrol kesalahan selama sinkronisasi. Misalnya, jika server tidak dinyalakan, maka semua tugas akan selesai dengan cepat, dan saya, setelah kembali setelah satu jam, akan berpikir bahwa sinkronisasi sudah selesai. Pada saat yang sama, log semua tugas dibuat di sepanjang jalur D: \ Sinkronisasi \ GoodSync \ GoodSync \ Profile \ *. Log. Cukup dengan melihat log dari masing-masing sinkronisasi untuk keberadaan kata "KESALAHAN" - untuk beberapa alasan, ini adalah bagaimana kegagalan sinkronisasi dilaporkan dalam log. Oleh karena itu, diputuskan untuk menulis sebuah program kecil untuk menganalisis log ini setelah semua sinkronisasi, yang harus dimulai secara otomatis setelah menyinkronkan semua folder. Program ini menerima nama bangga log_analayser dan ditulis dalam bahasa semi-scripting AutoIt . Jika ada yang tertarik, unduh versi lengkapnyaAnda bisa di situs web AutoIt resmi, yang berisi perpustakaan yang diperlukan, kompiler dan SciTE - editor lintas platform untuk kode dari mana Anda dapat mengkompilasi program.

Waktu yang saya habiskan untuk mengembangkan dan men-debug kode, hasilnya adalah file log_analayser.au3 dengan konten berikut:

 ; LOG Analyser 1.0 ;      - #Region ;**** Directives created by AutoIt3Wrapper_GUI **** #AutoIt3Wrapper_Res_Field=ProductName|LOG Analyser #AutoIt3Wrapper_Res_Fileversion=1.0.0.0 #AutoIt3Wrapper_Res_Field=OriginalFilename|log_analyser.exe #AutoIt3Wrapper_Res_Comment=     - #AutoIt3Wrapper_Res_Description= - ;**** #AutoIt3Wrapper_Res_Language=1049 #AutoIt3Wrapper_Res_ProductVersion=1.0 #AutoIt3Wrapper_Compile_Both=y #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI **** ;AutoItSetOption ("WinTitleMatchMode", 2) ;       ;#NoTrayIcon ;         If WinExists('[CLASS:AutoIt v3;TITLE:' & @ScriptName & ']') Then MsgBox(48, @ScriptName, "     !"); ;             ;WinActivate('  ') Exit EndIf AutoItWinSetTitle(@ScriptName) #include <Array.au3> #include <_FileDirList.au3> ;  Local $msg_title = "LOG Analyser 1.0" Local $path = @ScriptDir Local $soft_open_log = "notepad.exe" Local $path, $dir_mode, $word, $file_analyse_name, $file_analyse_ext, $log_path, $log_msg_on Local $file_log, $word_detect, $file_analyse, $cnt_files, $i ;    if ($CmdLine[0] < 6) then MsgBox(0x10, $msg_title, "   !" & @CRLF & @CRLF & "  ") Exit else if (StringCompare($CmdLine[1], "file") = 0) then $dir_mode = 0 elseif (StringCompare($CmdLine[1], "dir") = 0) then $dir_mode = 1 else MsgBox(0x10, $msg_title, "     'file'  'dir'!" & @CRLF & @CRLF & "  ") Exit endif $word = $CmdLine[2] if ($dir_mode = 0) then $file_analyse_name = $CmdLine[3] else $dir_analyse = $CmdLine[3] endif $file_analyse_ext = $CmdLine[4] $log_path = $CmdLine[5] if (StringCompare($CmdLine[6], "err_msg_on") = 0) then $log_msg_on = 1 elseif (StringCompare($CmdLine[6], "err_msg_off") = 0) then $log_msg_on = 0 else MsgBox(0x10, $msg_title, "     'log_msg_on'  'log_msg_off'!" & @CRLF & @CRLF & "  ") Exit endif endIf ;   $file_log = $log_path & "\" & "log_analyser" & "-" & @YEAR & "-" & @MON & "-" & @MDAY & "-" & @HOUR & "-" & @MIN & "-" & @SEC & ".log" $word_detect = 0 ;    if ($dir_mode = 0) then $file_analyse = $file_analyse_name & "." & $file_analyse_ext if (_file_analyser($file_analyse, $msg_title, $word, $file_log, $word_detect) = 1) then $word_detect = 1 endif else ;     $dir_arr = _FileDirList($dir_analyse, "*."&$file_analyse_ext, 1, 1, 0) ;_ArrayDisplay($dir_arr) ;    -       if ($dir_arr = 0) then MsgBox(0x10, $msg_title, "       !" & @CRLF & @CRLF & "  ") Exit endif $cnt_files = $dir_arr[0] ;    $i = 0 While $i <> $cnt_files $i = $i + 1 $file_analyse = $dir_arr[$i] if (_file_analyser($file_analyse, $msg_title, $word, $file_log, $word_detect) = 1) then $word_detect = 1 endif WEnd endif ;    if ($word_detect = 1) and ($log_msg_on = 1) then if (MsgBox (0x41034, $msg_title, " !" & @CRLF & "      : " & $file_log & @CRLF & @CRLF & "   ?")) = 6 then ShellExecuteWait($soft_open_log, $file_log) endif endif Exit ;                    ;   ,   ,     Func _file_analyser($file_analyse, $msg_title, $word, $file_log, $word_detect) Local $file1, $file2, $file_line, $write_once $word_detect = 0 $write_once = 0 $file1 = FileOpen($file_analyse, 0) ;     If $file1 = -1 Then FileClose($file1) MsgBox(0x10, $msg_title, "   !" & @CRLF & @CRLF & "  ") Exit EndIf ;       While 1 $file_line = FileReadLine($file1) If @error = -1 Then ExitLoop if (StringInStr($file_line, $word) <> 0) then $word_detect = 1 ;            if (FileExists($file_log) = 0) then $file2 = FileOpen($file_log, 1) FileClose($file2) endif ;        if ($write_once = 0) then $write_once = 1 $file2 = FileOpen($file_log, 1) FileWriteLine($file2, " : " & $file_analyse) FileClose($file2) endif ;       $file2 = FileOpen($file_log, 1) FileWriteLine($file2, $file_line) FileClose($file2) endif WEnd ;     ,          if ($word_detect = 1) then $file2 = FileOpen($file_log, 1) FileWriteLine($file2, @CRLF) FileClose($file2) endif FileClose($file1) Return $word_detect EndFunc 

Setelah mengetik kode, tekan tombol F7 di editor SciTE dan dapatkan file log_analayser.exe di output.

Program ini menganalisis file untuk keberadaan kata, ketika ditemukan, file log dibuat, di mana baris yang ditemukan berisi kata ini disalin.

Program ini dapat bekerja dalam dua mode:

- analisis file tertentu
- analisis folder yang berisi file untuk analisis (semua subfolder juga dianalisis)

.Ketika Anda membuat panggilan konsol, Anda perlu mengatur enam parameter untuk program:

1 - mode operasi [file = analisis file; dir = analisis folder yang berisi file]
2 - kata kunci pencarian
3 - nama file atau path lengkap ke folder
4 - ekstensi file atau file untuk analisis dalam folder
5 - path lengkap ke folder tempat log program akan ditempatkan;
6 - tampilan jendela setelah analisis semua file dalam hal menemukan kata yang diberikan [err_msg_on = display; err_msg_off = jangan tampilkan]

Dengan demikian, kami mendapat skrip bck_auto.bat baru:

 @echo Start Backup @set dir=%~dp0 call %dir%bck_all.bat log_analyser.exe dir  %dir%GoodSync\Profile log %dir%LOG err_msg_on exit 

Script meluncurkan file dari mana tugas untuk menyinkronkan semua folder yang diperlukan secara individual dipanggil satu demi satu, dan kemudian penganalisis log sinkronisasi dipanggil, setelah itu, dalam kasus kesalahan, pesan ditampilkan meminta Anda untuk melihat baris log di mana kesalahan ini ditemukan dan Anda dapat memahami tugas apa masalah telah terjadi. Baris-baris ini ditulis ke file log terpisah di folder D: \ Sync \ LOG.
Dan kemudian saya mengalami kegagalan yang mengerikan. Log Analyzer tidak berfungsi. Tidak, ini bekerja sangat baik pada file uji, tetapi keras kepala tidak ingin melihat kesalahan dalam log. Untuk waktu yang lama saya tidak dapat memahami apa alasannya sampai saya menemukan satu hal yang mengerikan: tidak hanya itu dalam log berbahasa Inggris, kegagalan ditampilkan oleh satu-satunya kata bahasa Rusia "ERROR", tetapi juga penyandian alfabet Cyrillic ini adalah Macintosh! Saya tidak tahu mengapa programmer dari Siber Systems melakukan ini, kemungkinan besar ini adalah hasil dari beberapa penopang yang mengerikan di dalam perangkat lunak. Nah, siapa bilang pemrograman harus membosankan?

Tidak ada pilihan selain mendukung satu penopang dengan penopang lainnya dan akibatnya sebuah konstruksi yang bekerja muncul:

 @echo Start Backup @set dir=%~dp0 call %dir%bck_all.bat log_analyser.exe dir Ћ˜€ЃЉЂ %dir%GoodSync\Profile log %dir%LOG err_msg_on exit 

Namun, masalah berikut muncul: GoodSync sendiri tidak menghapus file log, file baru muncul dengan setiap eksekusi tugas baru. Dan jika beberapa jenis sinkronisasi gagal, maka alat analisa kami akan selalu menemukan file ini dan melaporkan kesalahannya. Karena itu, sebelum memulai sinkronisasi, diputuskan untuk secara otomatis membersihkan folder D: \ Sync dari file log apa pun. Script clean_logs.bat yang elegan telah dibuat untuk ini:

 @echo off set dir=%~dp0 For /R %dir% %%i in (*.log) Do ( Del /q "%%i") @echo on 

Skrip menonaktifkan output dari pesan apa pun, menemukan direktori peluncuran skrip, memindai semua file (termasuk subfolder) hingga semuanya berakhir dan menghapus semua file dengan ekstensi log. Di akhir pekerjaan, output pesan dihidupkan.
Skrip bck_auto.bat telah berubah:

 @echo Start Backup @set dir=%~dp0 @call clean_logs.bat call %dir%bck_all.bat log_analyser.exe dir Ћ˜€ЃЉЂ %dir%GoodSync\Profile log %dir%LOG err_msg_on exit 

Semuanya bekerja dengan sangat baik, tetapi intinya adalah untuk mengotomatiskan tindakan rutin. Mengapa tidak mematikan komputer saja di malam hari dan tidur, dan ia akan menyinkronkan banyak file sendiri, menganalisis dan mematikan jalur?

Mari kita modifikasi skrip bck_auto.bat kami:

 @echo Start Backup & PCOFF @set dir=%~dp0 start MonitorOnOff.exe 0 @call clean_logs.bat call %dir%bck_all.bat log_analyser.exe dir Ћ˜€ЃЉЂ %dir%GoodSync\Profile log %dir%LOG err_msg_off shutdown /s /t 0 exit 

Dua baris baru muncul dalam naskah. Aplikasi MonitorOnOff hanya mematikan monitor (sehingga tidak menyalakan ruangan, tetapi mematikannya secara manual setiap malam dan menyalakannya setiap pagi sangat malas), dan perintah mematikan komputer dimatikan. Parameter yang bertanggung jawab untuk menampilkan pesan ketika kesalahan ditemukan telah berubah di log_analyser, karena setelah sinkronisasi tidak perlu memperlambat eksekusi skrip dengan pesan ini, tetapi untuk mengaktifkannya mematikan komputer.

MonitorOnOff juga ditulis dalam AutoIt.

 ; Monitor On Off 1.0 ;   /  #Region ;**** Directives created by AutoIt3Wrapper_GUI **** #AutoIt3Wrapper_Res_Field=ProductName|Monitor On Off #AutoIt3Wrapper_Res_Fileversion=1.0.0.0 #AutoIt3Wrapper_Res_Field=OriginalFilename|MonitorOnOff.exe #AutoIt3Wrapper_Res_Comment=  /  #AutoIt3Wrapper_Res_Description=  /  ;**** #AutoIt3Wrapper_Res_Language=1049 #AutoIt3Wrapper_Res_ProductVersion=1.0 #AutoIt3Wrapper_Compile_Both=y #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI **** ;AutoItSetOption ("WinTitleMatchMode", 2) ;       ;#NoTrayIcon ;         If WinExists('[CLASS:AutoIt v3;TITLE:' & @ScriptName & ']') Then MsgBox(48, @ScriptName, "     !"); ;             ;WinActivate('  ') Exit EndIf AutoItWinSetTitle(@ScriptName) HotKeySet("{F10}", "_Monitor_ON") HotKeySet("{F11}", "_Monitor_OFF") HotKeySet("{Esc}", "_Quit") Global Const $lciWM_SYSCommand = 274 Global Const $lciSC_MonitorPower = 61808 Global Const $lciPower_Off = 2 Global Const $lciPower_On = -1 Global $MonitorIsOff = False if ($CmdLine[0] <> 0) then _Monitor_OFF() endif While 1 Sleep(10) WEnd Func _Monitor_ON() $MonitorIsOff = False Local $Progman_hwnd = WinGetHandle('[CLASS:Progman]') DllCall('user32.dll', 'int', 'SendMessage', _ 'hwnd', $Progman_hwnd, _ 'int', $lciWM_SYSCommand, _ 'int', $lciSC_MonitorPower, _ 'int', $lciPower_On) EndFunc Func _Monitor_OFF() $MonitorIsOff = True Local $Progman_hwnd = WinGetHandle('[CLASS:Progman]') While $MonitorIsOff = True DllCall('user32.dll', 'int', 'SendMessage', _ 'hwnd', $Progman_hwnd, _ 'int', $lciWM_SYSCommand, _ 'int', $lciSC_MonitorPower, _ 'int', $lciPower_Off) _IdleWaitCommit(0) Sleep(20) WEnd EndFunc Func _IdleWaitCommit($idlesec) Local $iSave, $LastInputInfo = DllStructCreate ("uint;dword") DllStructSetData ($LastInputInfo, 1, DllStructGetSize ($LastInputInfo)) DllCall ("user32.dll", "int", "GetLastInputInfo", "ptr", DllStructGetPtr ($LastInputInfo)) Do $iSave = DllStructGetData ($LastInputInfo, 2) Sleep(60) DllCall ("user32.dll", "int", "GetLastInputInfo", "ptr", DllStructGetPtr ($LastInputInfo)) Until (DllStructGetData ($LastInputInfo, 2)-$iSave) > $idlesec Or $MonitorIsOff = False Return DllStructGetData ($LastInputInfo, 2)-$iSave EndFunc Func _Quit() _Monitor_ON() Exit EndFunc 

Program yang diluncurkan dikontrol oleh tiga tombol: F10 menyalakan monitor, F11 - mati, dan tombol ESC mengakhiri program dan mengeluarkannya dari memori. Jika Anda menentukan parameter apa pun saat memulai program, program yang sedang berjalan akan segera mematikan layar.

Sekarang semuanya baik-baik saja - sebelum tidur, saya hanya berlari bck_all.bat, bukannya "Matikan komputer" dan pergi tidur. Monitor tidak menerangi seluruh ruangan, sinkronisasi dilakukan secara otomatis dan keberhasilannya dianalisis secara otomatis. Di pagi hari, Anda hanya perlu melihat isi folder D: \ Sync \ GoodSync \ LOG \ untuk setidaknya beberapa file. Tapi ini tidak terjadi - mengapa membuang-buang waktu jika semuanya baik-baik saja? Saya perlu membuat log analyzer log analyzer log dan menggantungnya di startup sistem sehingga bekerja pada hari berikutnya ketika komputer boot dan khawatir hanya perhatian saya ketika sinkronisasi gagal. Ini adalah bagaimana program check_file_exist muncul.

 ; Check File Exist 1.0 ;        #Region ;**** Directives created by AutoIt3Wrapper_GUI **** #AutoIt3Wrapper_Res_Field=ProductName|Check File Exist #AutoIt3Wrapper_Res_Fileversion=1.0.0.0 #AutoIt3Wrapper_Res_Field=OriginalFilename|check_file_exist.exe #AutoIt3Wrapper_Res_Comment=       #AutoIt3Wrapper_Res_Description=   ;**** #AutoIt3Wrapper_Res_Language=1049 #AutoIt3Wrapper_Res_ProductVersion=1.0 #AutoIt3Wrapper_Compile_Both=y #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI **** ;AutoItSetOption ("WinTitleMatchMode", 2) ;       ;#NoTrayIcon ;         If WinExists('[CLASS:AutoIt v3;TITLE:' & @ScriptName & ']') Then MsgBox(48, @ScriptName, "     !"); ;             ;WinActivate('  ') Exit EndIf AutoItWinSetTitle(@ScriptName) #include <Array.au3> #include <_FileDirList.au3> ;  Local $msg_title = "Check File Exist 1.0" Local $path = @ScriptDir Local $soft_open_dir = "explorer.exe" Local $path, $dir_analyse, $words, $msg_open ;    if ($CmdLine[0] < 5) then MsgBox(0x10, $msg_title, "   !" & @CRLF & @CRLF & "  ") Exit else $dir_analyse = $CmdLine[1] $file = $CmdLine[2] $words0 = $CmdLine[3] $words1 = $CmdLine[4] if (StringCompare($CmdLine[5], "msg_on") = 0) then $msg_open = 1 elseif (StringCompare($CmdLine[5], "msg_off") = 0) then $msg_open = 0 else MsgBox(0x10, $msg_title, "     'msg_on'  'msg_off'!" & @CRLF & @CRLF & "  ") Exit endif endIf ;      $dir_arr = _FileDirList($dir_analyse, "*"&$file&"*", 1, 0, 0) ;_ArrayDisplay($dir_arr) ;      if ($dir_arr = 0) then if (StringCompare($words0, "0") <> 0) then if ($msg_open = 0) then MsgBox(0x41030, $msg_title, $words0) else if (MsgBox(0x41034, $msg_title, $words0 & @CRLF & @CRLF & "     ?")) = 6 then ShellExecuteWait($soft_open_dir, $dir_analyse) endif endif endif else if (StringCompare($words1, "0") <> 0) then if ($msg_open = 0) then MsgBox(0x41030, $msg_title, $words1) else if (MsgBox(0x41034, $msg_title, $words1 & @CRLF & @CRLF & "    ?")) = 6 then ShellExecuteWait($soft_open_dir, $dir_analyse) endif endif endif endif Exit 

Pada dasarnya, program ini adalah fungsi log_analyser yang sedikit terpotong. Program ini menganalisis folder yang ditentukan (tidak termasuk subfolder) untuk file dan nama yang setidaknya sebagian sesuai dengan kata pencarian yang ditentukan dan menampilkan pesan tentang hasil pemindaian.

Parameter program:

1 - path lengkap ke folder (tanpa karakter garis miring - /)
2 - kata kunci untuk mencari dalam nama file, atau nama file lengkap
3 - string teks ditampilkan ketika file tidak ditemukan, jika = 0 - jangan tampilkan pesan
4 - teks baris ditampilkan saat file ditemukan, jika = 0 - jangan tampilkan pesan
5 - output pesan: msg_off - hanya pesan tentang ada / tidaknya file yang ditampilkan, msg_on - di jendela yang ditampilkan juga diusulkan untuk membuka folder tempat file terdeteksi atau tidak ditemukan.

Sekarang, untuk program ini saya membuat skrip Check_LOG_from_log_analyser.bat, tautan yang saya tempatkan di tempat biasa Startup Windows:

 @set dir=%~dp0LOG start check_file_exist.exe %dir% .log 0 "     !" msg_on exit 

Jadi, pada akhirnya kami mendapat solusi yang sepenuhnya otonom yang tidak bergantung pada lokasi folder Sync dan akan bekerja dengan benar dari mana saja di komputer kami. Solusinya tidak hanya bisa diterapkan, tetapi juga stabil - pada Windows 7 x64, skrip ini bekerja selama satu tahun dan sama sekali tidak ada masalah dengannya.

Mungkin sekarang semua ini tampak mengerikan, tetapi tidak ada yang rumit tentang itu. Jika Anda memperhatikan dengan cermat kode AutoIt, konstruksi dasarnya adalah loop if-then-else-end biasa dari jenis yang sama untuk bahasa pemrograman apa pun, di mana beberapa operator dan fungsi AutoIt yang berulang dipelajari, yang dipelajari secara harfiah dalam beberapa malam. Bahasa scripting BAT bahkan tidak dapat diajarkan, karena sebagian besar solusi adalah standar dan telah lama dijelaskan di Internet. Mampu menggunakan pemrograman tidak hanya menarik, tetapi bisa sangat bermanfaat.

Ode ke kode dari Dark Dragon




Kata penutup


Sejujurnya, saya berasumsi, tetapi saya tidak mengharapkan volume artikel seperti itu, yang saya harus menghabiskan hingga lima puluh jam. Biasanya, pemasangan cloud Anda di Internet direduksi menjadi ucapan seperti: "Ya, Anda perlu menjalankan beberapa perintah di sana." Itu benar - pemasangannya sepele. Ketika Anda tahu apa perintah untuk masuk ke konsol dan apa artinya. Ketika Anda memahami esensi dari perutean di jaringan. Ketika Anda sudah memiliki server yang berfungsi dan ketika Anda mengerti cara menambahkan host ke dalamnya. Ketika Anda tahu cara mengatur situs. Artinya, untuk menerapkan beberapa perintah ini Anda harus memiliki sejumlah pengetahuan dan pengalaman. Tujuan dari ketiga artikel ini adalah upaya untuk membuat bagasi semacam itu dengan mengumpulkan informasi yang cukup yang diperlukan di satu tempat dan menjelaskan cara menggunakannya dengan benar. Saya sangat berharapbahwa rangkaian artikel ini akan membantu seseorang mengambil langkah sadar pertama mereka ke dunia perangkat lunak bebas.



Kembali ke awal, ke daftar isi .



Sejarah menciptakan cloud rumah. Bagian 3. Membuat cloud pribadi - menginstal dan mengkonfigurasi Nextcloud.
Versi Teks: 1.2.1.
Tanggal publikasi pertama: 02/08/2018.
Terakhir diedit: 15/01/2020.

Perbarui log
1.2.1 [15-01-2020]
.

1.2.0 [08-02-2018]
.

1.1.0 [08-02-2018]
.

1.0.0 [08-02-2018]
.
Nextcloud 11.0.2 VMWare, VMWare , Nextcloud.



Informasi untuk administrasi sumber daya (bug yang diduga)
- (, code blockquote) :
[Definition]
failregex={«reqId»:".*",«remoteAddr»:".*",«app»:«core»,«message»:«Login failed: '.*' \(Remote IP: ''\)»,«level»:2,«time»:".*"}
ignoreregex =

! , .. . (/) — . :


— , « Nextcloud» , ,
— ,



Source: https://habr.com/ru/post/id410011/


All Articles