Bagian 1. Pemilihan komputer dan komponen
Persyaratan utama untuk server rumah adalah kekompakan dan konsumsi daya yang rendah. Sebagai komputer, saya mempertimbangkan berbagai perangkat papan tunggal, saya bahkan berpikir tentang perangkat papan tunggal pada arsitektur x64. Kriteria pencarian utama adalah RAM berlebih dari 8 GB, port modern: usb3.0 dan gigabit LAN. Idenya adalah untuk memasang semuanya di semacam kotak miniATX, menggunakan antarmuka usb-sat untuk hard drive. Saya tidak suka realisasi ini secara estetis, dan saya tidak terburu-buru untuk menerapkannya. Tiba-tiba saya menemukan seekor paus AS untuk raspberry ke-4 dari Cina dari Radha.
Sepengetahuan saya, topi sata itu sendiri sudah ada beberapa waktu yang lalu dan bahkan sangat cepat terjual dalam edisi terbatas. Tapi kali ini, orang Cina juga menawarkan sebuah kotak. Seluruh struktur tampak sangat kompak dan secantik tangan saya yang tidak terlalu datar tidak akan pernah bisa melakukannya sendiri. Saya mencari kotak ini di Google, menemukan satu ulasan berbayar di YouTube dan, pada prinsipnya, itu cocok untuk saya. Saya memutuskan untuk tidak berpikir lama, karena kemungkinan besar batch akan cepat terjual, dan power supply diberikan gratis untuk promosi. Sekotak topi sata dengan pengiriman ekspres dari Shenzhen harganya β¬ 125,23 pada saat pembelian. Pilihan kotak secara otomatis mempersempit pilihan komputer ke raspberry ke-4, yang saya beli dari Amazon seharga β¬ 79,97 untuk model dengan RAM 8 GB. Juga di Amazon dibeli 2 hard drive VD 2,5 β2 TB seharga β¬ 63,81 masing-masing,dan kartu Samsung EVO 120 SD seharga β¬ 15,25 di aliexpress. Total β¬ 348.07, saya pikir pembaca akan tertarik dengan pertanyaan keuangan.
Semua barang ini dirangkai dengan sangat sederhana, kawan-kawan Cina yang terkasih urus semuanya, contohnya bisa dilihat pada gambar di bawah ini. Saya juga merekam beberapa video pendek dari perangkat yang dirakit. Dari momen menyenangkan yang tidak saya sadari pada saat memesan perangkat:
- badannya terbuat dari sepotong logam, di bagian luarnya dicat dengan cat putih;
- bagian bawah dengan lubang ventilasi juga terbuat dari logam;
- sekrup dan mur pemasangan: logam (bukan logam, hanya penutup tembus plastik bagian atas dengan lubang untuk kipas besar);
- sata topi dari revisi berikutnya, dan bukan yang dimiliki vlogger di YouTube, dan memiliki konektor baterai;
- layar es kecil menampilkan informasi tentang status sistem;
- kipas besar dan layar es bekerja dengan menginstal perangkat lunak Radha, yang merupakan skrip python, dan diinstal dengan memasukkan satu perintah di terminal.
Secara default, kipas atas memiliki 4 mode operasi tergantung pada suhu prosesor, yang berbeda dalam intensitas rotasi dan kebisingan yang dihasilkan: pada level 1 hampir tidak terdengar, level 2 terdengar, 3-4 terdengar terlalu baik. Untuk ini, sebenarnya, skrip python bertanggung jawab.
Secara umum, saya senang dengan perangkat ini, tetapi saya punya satu komentar. Kit ini menggunakan layar kaca yang berjalan, yang dapat dengan mudah dipesan dari Alishechka, tetapi layar disolder ke papan, orang Cina tidak perlu menggunakan konektor FPC / FCC di papan tulis. Ini akan sangat menyederhanakan penggantian layar es jika terjadi kejenuhan, misalnya.
2.
Nah, semuanya sudah rakitan, mari kita mulai menyiapkan software. Saya tidak akan membanjiri copy-paste, jadi poin umum akan disajikan oleh tautan ke hauta dari baris pencarian, saya akan melewatkan beberapa, tetapi Anda dapat membahas perangkap secara lebih rinci.
Saya memilih sistem operasi ubuntu server 20.04.1, panduan yang bagus untuk menginstal Kanonikl yang ditulis sendiri. Selanjutnya kita install software dari Radha sesuai mana . Di sini ada perangkap nomor 1. Faktanya adalah bahwa untuk kebutuhan torrent tertentu saya perlu menggunakan VPN, tetapi penyedia VPN saya tidak mendukung IPv6. Ketika saya menyiapkan openvpn untuk penyedia saya, saya menemukan bahwa anonimitas saya, katakanlah, mengalir tepat melalui IPv6. Baiklah, pada level sistem, IPv6 dapat dimatikan di Ubuntu dengan cukup mudah.
Bagaimana sebenarnya
sysctl
:
, 6 , :
:
:
$ sudo nano /etc/sysctl.conf
net.ipv6.conf.all.disable_ipv6=1 net.ipv6.conf.default.disable_ipv6=1 net.ipv6.conf.lo.disable_ipv6=1
:
$ sudo sysctl -p
, 6 , :
$ sudo nano /etc/rc.local
:
#!/bin/bash
# /etc/rc.local
/etc/sysctl.d
/etc/init.d/procps restart
exit 0
:
$ sudo chmod 755 /etc/rc.local
Tetapi kemudian hal yang tidak terduga terjadi, kipas besar dari kotak itu berhenti bekerja sama sekali.
Setelah mengecualikan kemungkinan kerusakan perangkat keras, saya mulai mencari penyebab perangkat lunak. Keluaran status dari layanan rockpi-sata menunjukkan kesalahan terkait dengan skrip fan.py python:
ubuntu@ubuntu:~$ sudo service rockpi-sata status
β rockpi-sata.service - Rockpi SATA Hat
Loaded: loaded (/lib/systemd/system/rockpi-sata.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2020-12-25 17:16:07 CET; 11min ago
Main PID: 1879 (python3)
Tasks: 4 (limit: 9252)
CGroup: /system.slice/rockpi-sata.service
ββ1879 /usr/bin/python3 /usr/bin/rockpi-sata/main.py on
ββ2896 /usr/bin/python3 /usr/bin/rockpi-sata/main.py on
ββ2897 /usr/bin/python3 /usr/bin/rockpi-sata/main.py on
ββ2898 /usr/bin/python3 /usr/bin/rockpi-sata/main.py on
Dec 25 17:16:57 ubuntu python3[2899]: self._target(*self._args, **self._kwargs)
Dec 25 17:16:57 ubuntu python3[2899]: File β/usr/bin/rockpi-sata/fan.pyβ, line 81, in running
Dec 25 17:16:57 ubuntu python3[2899]: change_dc(get_dc())
Dec 25 17:16:57 ubuntu python3[2899]: File β/usr/bin/rockpi-sata/fan.pyβ, line 75, in change_dc
Dec 25 17:16:57 ubuntu python3[2899]: gpio.hardware_PWM(12, 25000, dc * 10000)
Dec 25 17:16:57 ubuntu python3[2899]: File β/usr/local/lib/python3.8/dist-packages/pigpio.pyβ, line 2044, in hardware_PWM
Dec 25 17:16:57 ubuntu python3[2899]: return _u2i(_pigpio_command_ext(
Dec 25 17:16:57 ubuntu python3[2899]: File β/usr/local/lib/python3.8/dist-packages/pigpio.pyβ, line 1062, in _pigpio_command_ext
Dec 25 17:16:57 ubuntu python3[2899]: sl.s.sendall(ext)
Dec 25 17:16:57 ubuntu python3[2899]: AttributeError: βNoneTypeβ object has no attribute βsendallβ
Yang tidak menarik kecuali metode inisialisasi GPIO. Untuk ini, seluruh kelas ditulis di sana:
class MockPigpio:
@classmethod
def pi(cls):
try:
host = misc.check_output("netstat -l | grep -o '\S*:8888' | tr -d ':8888'")
gpio = pigpio.pi(host=host)
except Exception:
gpio = cls()
return gpio
def __init__(self):
syslog.syslog('PWM of pigpio is not available. Use on/off to control the fan.')
syslog.syslog('If you use pre-release kernel, please go back to stable release.')
def hardware_PWM(self, pin, _, dc):
misc.set_mode(pin, bool(dc))
gpio = MockPigpio.pi()
Saya bertanya-tanya apa nilai ini digunakan untuk menginisialisasi host, yang ditampilkan oleh perintah netstat -l | grep -o '\ S *: 8888' | tr -d ': 8888'?
ipv6-localhost
Jika IPv6 dinonaktifkan, maka perintah mengeluarkan baris kosong dan skrip tidak berfungsi. Terus terang, pada awalnya saya melangkah jauh. Saya melihat ke modul pigpio.py python, di mana inisialisasi host dijelaskan secara rinci, menemukan bahwa, pada prinsipnya, metode pigpio.pi () tidak memerlukan argumen apa pun. Setelah gagal mencoba opsi untuk memanggil metode ini tanpa argumen, dengan argumen lcoalhost dan opsi lain yang saya tidak ingat lagi, di dalam skrip fan.py, saya menyadari bahwa saya tidak lebih pintar dari penulis, dan pergi ke jalan yang mudah. Faktanya adalah modul PIGPIO dapat dipanggil dalam mode IPv4, untuk ini Anda hanya perlu mengedit satu file:
$ sudo nano /lib/systemd/system/pigpiod.service
Dan perbaiki parameter ExecStart ke nilai berikut
ExecStart=/usr/local/bin/pigpiod -l -m -n 127.0.0.1 -p 8888
Sekarang perintah netstat -l | grep -o '\ S *: 8888' | tr -d ': 8888' cetakan:
localhost
dan kipas angin sedang bekerja!
Bagian 3. Memisahkan lalu lintas
Selanjutnya, raid type 1, samba, openvpn, transmission demon dan killswitch untuk ufv disiapkan. Penjelasan tentang prosedur ini, saya pikir pembaca rata-rata bisa google sendiri.
Kinerja perangkat yang dihasilkan pada prinsipnya normal. Meskipun saya tidak mengerti di mana kecepatan turun saat menyalin. Berikut contoh copy daddy yang berisi 39 episode anime dengan ukuran total sekitar 40 GB.
Dan berikut adalah contoh mengunduh satu file besar.
Dapat dilihat bahwa sistem dapat menggunakan seluruh resource jaringan gigabit kapan pun diinginkan. Saya belum berurusan dengan drawdown dalam kecepatan menyalin.
Jebakan kedua tidak berlaku untuk topi sata, tetapi, pada kenyataannya, server Linux sebagai objek budaya material. Tugasnya adalah bahwa server digunakan untuk tugas yang berbeda: akan ada server web (cloud), yang akan saya ketuk dari luar, dan pompa aliran bit yang tidak dipilih melalui vpn. Masalahnya ternyata saya harus memisahkan lalu lintas agar semuanya bekerja secara paralel. Pikiran pertama saya adalah memasang firewall. Saya menggunakan aturan berikut:
$ sudo ufw default deny incoming
$ sudo ufw default deny outgoing
$ sudo ufw allow in on eth0 from 192.168.178.1
$ sudo ufw allow out on eth0 to 192.168.178.1
$ sudo ufw allow in on eth0 from 192.168.178.20
$ sudo ufw allow out on eth0 to 192.168.178.20
$ sudo ufw allow in on eth0 from any to any port 22,443 proto tcp
$ sudo ufw allow out on eth0 from any to any port 22,443 proto tcp
$ sudo ufw allow in on eth0 from any to any port 1194 proto udp
$ sudo ufw allow out on eth0 from any to any port 1194 proto udp
$ sudo ufw allow out on tun0 from any to any
$ sudo ufw allow in on tun0 from any to any
Percaya secara naif bahwa semuanya akan bekerja dengan baik. Idenya adalah mungkin firewall akan mengarahkan semua koneksi melalui tun0, kecuali beberapa melalui ez0, yang saya gunakan di jaringan lokal, dan beberapa port yang saya perlukan untuk mengetuk server dari luar. Konfigurasi ini berfungsi dengan baik di jaringan lokal atau jika vpn dinonaktifkan: tidak ada koneksi selain yang diizinkan yang masuk. Saat vpn aktif, tidak mungkin membuat koneksi di luar. Paket tiba, tetapi tanggapan tidak diarahkan melalui ez0, tetapi masih berupa batang melalui tun0. Saya menghabiskan waktu 2 hari tetapi masih belum menemukan cara untuk memperbaikinya, dan kemudian saya memutuskan untuk mencoba buruh pelabuhan, karena wadah yang saya butuhkan sudah ada.
Ini adalah pengalaman pertama saya dengan buruh pelabuhan. Sulit bagi saya, saya tidak mengerti harus mulai dari mana, apa perbedaan antara buruh pelabuhan dan buruh pelabuhan-compose, apa isi git dari tautan, apa gambarnya, apa penampungnya, saya masih belum mengerti bagaimana saya berhasil membangun penampung ini secara lokal dan apa yang dibuat oleh buruh pelabuhan yang diunduh dari Internet, tetapi hal ini berhasil.
Setelah membongkar repositori, Anda perlu mengedit file docker-compose.yml. Dan ubah isinya menjadi:
version: '2' services: transmission: image: haugene/transmission-openvpn container_name: vpntrans cap_add: - NET_ADMIN devices: - /dev/net/tun restart: always ports: - "9092:9091" dns: - 8.8.8.8 - 8.8.4.4 # sysctls: - net.ipv6.conf.all.disable_ipv6=1 volumes: - /etc/localtime:/etc/localtime:ro - /mnt/raid0/downloads/:/data environment: - OPENVPN_PROVIDER=SURFSHARK - OPENVPN_CONFIG=mk-skp_udp - OPENVPN_USERNAME=*your username* - OPENVPN_PASSWORD=*your password* - OPENVPN_OPTS=--inactive 3600 --ping 10 --ping-exit 60 - LOCAL_NETWORK=192.168.178.0/24 # proxy: - WEBPROXY_ENABLED=false - TRANSMISSION_PORT_FORWARDING_ENABLED=true - TRANSMISSION_PEER_PORT=51413 - PUID=1000 - PGID=100
Dalam konfigurasi ini, jika Anda ingin menggunakannya untuk kebutuhan Anda, Anda harus memperhatikan nilai port eksternal (untuk kontainer), jalur ke port Anda, di mana daemon transmisi akan menyimpan data, dan di mana Anda dapat mengedit pengaturannya, masukkan parameter Anda. jaringan lokal. Anda juga perlu mengkonfigurasi penyedia VPN Anda dari daftar . Saya menggunakan surfshark, nilai parameter OPENVPN_CONFIG menentukan pilihan konfigurasi (sebenarnya, nilai ini adalah nama file konfigurasi yang diperlukan) * .ovpn file dari server tertentu yang ingin Anda sambungkan. Dalam contoh ini, server berada di Republik Makedonia Utara.
Selanjutnya, kami membangun dan menjalankan kontainer dengan pengaturan kami:
$ sudo docker-compose up
Jika semuanya berjalan dengan baik, Anda akan melihat di akhir log klien openvpn tentang pembentukan koneksi yang berhasil. Baik atau tidak, Anda tidak pernah tahu Anda menggunakan penyedia VPN lain yang membutuhkan jam kerja tambahan. Tetapi jika semuanya baik-baik saja, Anda dapat menekan cntrl-s dan memulai penampung sebagai proses di latar belakang. Ngomong-ngomong, penampung sudah mengetahui cara memulai sendiri saat memulai sistem dan memulai ulang jika terjadi kesalahan.
$ sudo docker start vpntrans
Untuk menenangkan paranoia, Anda dapat pergi ke konsol di dalam wadah:
$ sudo docker exec -ti vpntrans /bin/bash
Dan periksa alamat ip publik:
$ curl ifconfig.co/json
Jika semuanya berjalan dengan baik, kesimpulannya akan seperti ini:
Namun demikian, tes semacam itu tidak banyak gunanya untuk menenangkan paranoia yang sangat berayun, jadi saya menggunakan hiu dan mengamati koneksi saat mengunduh torrent dengan beberapa distribusi Linux populer, katakanlah, ubunta. Setelah dikecualikan dari output koneksi yang tidak terkait ke perangkat di jaringan lokal, server vpn, serta beberapa siaran otomatis, tidak ada yang mencurigakan yang terjadi selama pengunduhan gambar ubuntu:
sudo tshark -i eth0 | grep -v "192.168.178.1" | grep -v "192.168.178.20" | grep -v "185.225.28.109" | grep -v "AVMAudio" | grep -v "SSDP" | grep -v "MDNS" | grep -v "LLMNR"
Tetapi apa yang terjadi jika openvpn kehilangan koneksinya atau layanan tiba-tiba berhenti? Utilitas teratas berjalan di dalam container, outputnya terlihat seperti ini:
Hentikan proses openvpn:
$ kill -9 6
Setelah itu, penampung dimulai kembali. Saya kemudian membaca di suatu tempat di forum bahwa penampung dikonfigurasi sedemikian rupa sehingga jika koneksi dengan openvpn hilang atau proses ini berakhir, maka penampung hanya direstart. Begitulah killswitch-nya. Saya puas.
Bagian 4. Cloud
Saya memilih NextCloud awan dan diinstal satu panduan pada suatu waktu . Perbedaan utama antara pengaturan saya adalah saya menggunakan lobak apache dan php lainnya:
$ sudo add-apt-repository ppa:ondrej/apache2 $ sudo add-apt-repository ppa:ondrej/php
Setelah mengkonfigurasi NextCloud, saya sarankan untuk memeriksa peringatan di panel admin dan memperbaikinya.
Perbaikan
. . :
:
, . - , , . :
:
:
:
:
, :
);
:
:
$ cd /var/www/nextcloud/
$ sudo -u www-data php occ db:add-missing-indices
:
$ sudo apt install php-bcmath php-imagick
, . - , , . :
$ sudo apt install redis-server php-memcached memcached php-apcu -y
:
$ sudo systemctl start redis-server
$ sudo systemctl enable redis-server
$ sudo systemctl start memcached
$ sudo systemctl enable memcached
:
$ sudo nano /etc/redis/redis.conf
:
port 0 unixsocket /var/run/redis/redis.sock unixsocketperm 700
:
$ sudo usermod -aG redis www-data
, :
$ sudo nano /var/www/nextcloud/config/config.php
);
'memcache.local' => '\OC\Memcache\APCu', 'memcache.locking' => '\\OC\\Memcache\\Redis', 'redis' => array ( 'host' => '/var/run/redis/redis.sock', 'port' => 0, 'timeout' => 0, 'password' => '', 'dbindex' => 0, ),
:
$ sudo nano /etc/php/7.4/apache2/php.ini
opcache.enable=1 opcache.enable_cli=1 opcache.interned_strings_buffer=8 opcache.max_accelerated_files=10000 opcache.memory_consumption=128 opcache.save_comments=1 opcache.revalidate_freq=1
:
$ sudo systemctl restart apache2
Cloud secara teoritis dapat dihubungkan sebagai drive jaringan melalui WebDAV, tetapi untuk beberapa alasan tidak di Windows 10. Dengan menggunakan utilitas Cyberduck, saya menguji pengoperasian cloud di jaringan lokal. Seperti yang Anda lihat pada tangkapan layar di bawah, kecepatan unggah ke cloud mencapai 12 MB / dtk, dan unduhan dari cloud mencapai 35 MB / dtk. Data kecepatan diperoleh dengan enkripsi yang diaktifkan di cloud dengan kunci pca4096.
Bagian 5. Konsumsi daya
Awalnya, saya ingin memberi waktu seminggu untuk menjalankan server ini guna menampilkan statistik menggunakan meteran listrik. Tapi, sayangnya, saya tidak tahu cara mengonfigurasi meteran daya ini dengan benar, jadi saya akan memberikan gambar dengan data dari indikator. Seperti yang Anda lihat, dalam mode siaga, sistem mengonsumsi energi 8,5 W, dan selama sinkronisasi aktif dengan cloud (folder dengan data pribadi berukuran sekitar 200 GB) hingga 16,88 W. Statistik terperinci akan memungkinkan kami untuk menghitung nilai rata-rata konsumsi daya per hari, tetapi karena tidak adanya dan dengan asumsi bahwa server sebagian besar waktu menganggur, saya mengambil 10 W untuk nilai rata-rata konsumsi daya secara sekilas, yang memberikan:
Dengan harga saat ini β¬ 0,31 per 1 kWh, biaya pemeliharaan server per bulan akan menjadi sekitar β¬ 2,23, yang seharusnya tidak terlalu memengaruhi konsumsi energi rata-rata saya.
Setelah kami mengetahui konsumsi dan biaya, maka saya mengusulkan untuk melakukan penilaian kecil terhadap investasi keuangan dan membandingkannya dengan penawaran server virtual di pasar. Sayangnya, saya tidak mendapatkan perbandingan yang setara, karena, seperti yang saya pahami, pasar server virtual menawarkan server kinerja atau server penyimpanan. Misalkan server rumah yang dihasilkan memiliki kinerja yang sebanding dengan server penyimpanan dan menganalisis harga saat ini. Seperti yang terlihat dari tautan, menyewa server dengan ruang disk 2 TB akan dikenakan biaya β¬ 100 per tahun. Tagihan listrik tahunan untuk mini-server rumah saya pada raspberry ke-4 seharusnya berharga sekitar β¬ 27,16. Dengan β¬ 348.07 dibelanjakan, ternyata pengembalian server rumah akan mengambil:
Itu waktu yang lama, dan pembaca, pada prinsipnya, akan benar dalam memutuskan bahwa itu tidak layak.
Mari pertimbangkan opsi lain dengan peningkatan ke 4 TB ruang disk. Dalam kasus server rumah, saya akan membeli 2 disk tambahan masing-masing 2 TB, yang dengan harga saat ini di Amazon akan berjumlah tambahan β¬ 127,62. Konsumsi server harus tumbuh dan, katakanlah, rata-rata akan 18 watt. Ini akan memberikan tagihan listrik tahunan sebesar β¬ 48,88. Sekarang mari bandingkan dengan biaya server penyimpanan 4 TB (β¬ 340 per tahun) dan perkirakan laba atas investasi:
Itu berumur pendek dan tidak lagi terlihat seperti investasi yang kontradiktif.
Kesimpulan
Dalam posting ini, kami belajar tentang topi sata yang bagus untuk raspberry ke-4 dan tentang ikan paus lucu yang didasarkan padanya untuk server rumah. Kami melihat kinerja sistem ini menggunakan contoh menyalin file melalui jaringan, serta kinerja cloud NextCloud yang berjalan di server ini. Masalah konsumsi daya, biaya dan pengeluaran untuk server ini juga tidak ketinggalan. Terima kasih telah membaca materi ini. Komentar kritis tentang solusi yang disajikan sangat diharapkan.
Secara khusus, saya ingin meminta pembaca untuk membagikan pengalamannya tentang masalah-masalah berikut:
- ZFS?
- Kecepatan salin jaringan menurun, apa yang harus dilakukan?
- Apache atau ngink?
- Ups mana yang harus dipilih?
- Mengapa buruh pelabuhan melewati aturan VPN?