Published by Oliver on 06.09.202106.09.2021
Self-hosting ważne oprogramowanie i dane na własnym serwerze domowym ma wiele zalet, ale może być trudne zadanie, aby rozpocząć. Prowadzę własny serwer od kilku lat i opiszę tutaj wybory w zakresie sprzętu i oprogramowania. Będzie to pełny przewodnik po tym, jak skonfigurować własny mały serwer.
dlaczego warto budować własny serwer?
w niektórych przypadkach nie powinieneś. Niektóre bardzo kosztowne, wyspecjalizowane lub trudne do skonfigurowania usługi (takie jak poczta e-mail) mogą być w rzeczywistości lepsze od zewnętrznego dostawcy. Jeśli korzystasz ze swoich usług bardzo rzadko lub w ogóle nie jesteś skłonny zagłębić się w wiedzę potrzebną do hostingu, może to również nie być odpowiednie miejsce dla ciebie.
nie bój się jednak, hosting oprogramowania na własną rękę nigdy nie był tak prosty jak dziś i ma wiele zalet. Może co najważniejsze, czyni cię bardziej niezależnym. Giganci technologiczni nie mają tak łatwego czasu, aby uzyskać dane, a niektóre problemy w chmurze lub z dostawcą Internetu nie powstrzymują cię przed dostępem do danych i usług (lokalnie).
w czasach, gdy usługi kontrolują coraz ważniejsze części twojego życia (takie jak system inteligentnego domu), ta kontrola i niezależność mogą być bezcenne. W dłuższej perspektywie może być nawet bardziej opłacalne w dłuższej perspektywie. Oczywiście zakup sprzętu to inwestycja, ale hosting terabajtów danych w chmurze również będzie cię dużo kosztować-na zawsze.
wreszcie może to być bardzo zabawny projekt, który pomaga dowiedzieć się wiele o technologii i zawsze możesz wypróbować nowe oprogramowanie. Jest tyle wolnego oprogramowania open source &!
co chcesz zrobić ze swoim serwerem?
przed zbudowaniem czegokolwiek ważne jest, aby zadać sobie pytanie: co planuję zrobić z tym serwerem? Jeśli chcesz po prostu hostować kilka małych usług lokalnie bez dużej ilości danych, wynik będzie wyglądał zupełnie inaczej niż na pełnym serwerze pamięci masowej.
jeśli potrzebujesz tylko lokalnych usług, polecam w większości przypadków, aby uzyskać nowszą Raspberry Pi i ewentualnie zewnętrzny dysk SSD do przechowywania danych. Są tanie, energooszczędne i łatwe w konfiguracji. Opisałem mój mały serwer smart home I hub oparty na Raspberry Pi 4 dogłębnie w tym artykule. Dodanie dysku SSD do przechowywania małych danych jest również dość łatwe.
Jeśli szukasz bardziej wydajnego rozwiązania lub potrzebujesz przechowywać dużo danych, polecam użycie innej platformy. Niektórzy używają serwera NAS lub starego sprzętu serwerowego (który może działać bardzo dobrze), ale polecam zwykły sprzęt klienta z naciskiem na pewne specjalne cechy.
- upewnij się, że masz dobre połączenie sieciowe (1Gbit/s, a może nawet 10)
- używaj energooszczędnych komponentów i w zależności od tego, gdzie chcesz umieścić serwer ciche
- uzyskaj procesor, który jest wystarczająco mocny, nie marnując energii w bezczynności
- zwykle nie potrzebujesz karty graficznej
- uzyskaj wystarczająco dużo RAM, może to być bardzo ważne dla Twojego serwera
- Pobierz płytę główną i obudowę, która może pomieścić wystarczającą ilość dysków twardych & SSD do przechowywania i ma dobre chłodzenie
- uzyskaj wysokiej jakości Nośniki pamięci. Używałem serii WD red (po prostu uważaj na wersje SMR) i słyszałem dobre rzeczy o serii Seagate IronWolf
- upewnij się, że Twoje komponenty są prawidłowo chłodzone i wszystko jest wystarczająco dobrze połączone. Będziesz chciał to zbudować & zapomnij
- kup wysokiej jakości zasilacz!
- osobiście unikałbym sprzętowych kontrolerów RAID
jeśli chcesz zbudować serwer domowy, rozważ zakup za pośrednictwem tych linków partnerskich, aby wesprzeć bloga
Western Digital Red Plus series
Seagate IronWolf Series
Raspberry Pi 4 8GB dla mniejszego serwera
Niemiecki wydawca Heise ma kilka świetnych artykułów na temat budowania własnego serwera. Można również znaleźć wiele międzynarodowych artykułów na ten temat. Moja osobista nauka po zbudowaniu kilku wersji serwera jest zawsze planować to, czego potrzebujesz teraz i w najbliższej przyszłości. Nie buduj czegoś, czego możesz potrzebować za 10 lat. Do tego czasu będzie dostępny lepszy sprzęt. Jedynym wyjątkiem może być Przechowywanie. Zawsze dobrze jest mieć kilka portów SATA w lewo, abyś mógł później dodać więcej pamięci.
stos oprogramowania
istnieje wiele oprogramowania stworzonego dla serwerów i każdy wybór będzie zależał od Twoich preferencji i przypadków użycia. Oto moja osobista opinia po kilku latach pracy nad tym problemem w wolnym czasie.
przede wszystkim zacznijmy od tego, czego nie użyłbym na serwerze: Windows. Aktualizacje są trudne, wiele oprogramowania nie jest prawidłowo obsługiwane i jest drogie. Zamiast tego wybierz rozwiązanie Unix / Linux. Istnieją do tego pełne rozwiązania, takie jak FreeNAS, OpenMediaVault czy Unraid but Unraid kosztuje pieniądze, a inne rozwiązania ograniczają również to, co możesz zrobić. Mogą być dobrym wyborem dla ciebie, ale zdecydowałem się pójść drogą DIY i zbudować własne rozwiązanie oparte na sprawdzonej technologii.
mój serwer domowy działa na minimalnym systemie operacyjnym Ubuntu server (wersja LTS) z dostępem SSH do administracji. Używam systemu plików ZFS do łączenia dysków w jedną dużą pulę danych, zapewniając jednocześnie funkcje takie jak pamięci podręczne, migawki, RAID i proste kopie zapasowe. W tej puli stworzyłem kilka systemów plików do różnych zastosowań, z których niektóre udostępniłem za pośrednictwem sieci do użytku innych klientów. Na serwerze działa Demon Docker i używam kilku plików docker-compose do hostowania zestawu usług takich jak OpenHab, Grafana, Bitwarden/Vaultwarden i Nextcloud. Reverse proxy (obecnie Traefik) umożliwia dostęp do wybranych usług z dowolnego miejsca w sieci.
zewnętrzne kopie zapasowe są wykonywane za pomocą dodatkowych dysków podłączonych przez USB i regularnie obracanych. Kilka skryptów i monitor czasu pracy regularnie sprawdzają, czy wszystko działa poprawnie i wysyłają alarmy w przeciwnym razie. Instalacja jest w większości zautomatyzowana i może być szybko ponownie wykonana na nowym sprzęcie (jeśli dane są oczywiście nadal dostępne).
jak skonfigurować serwer-instalacja automatyczna
przed uruchomieniem serwera postanowiłem zautomatyzować ten proces. Ułatwia to, przyspiesza, zmniejsza podatność na błędy, a także działa jako rodzaj dokumentacji. Posiadanie platformy bazowej, którą można niezawodnie szybko i łatwo skonfigurować, jest wielką zaletą. W ten sposób Wszystko inne, dane i rzeczywiste usługi, mogą być konfigurowane niezależnie od tego systemu. Jeśli każdy chce przełączyć się na coś innego powinno być stosunkowo łatwe.
do automatyzacji wybrałem Ansible. Ansible to program, który pozwala na pisanie tak zwanych playbooków: krótkich skryptów, które określają, jakie kroki należy wykonać, aby skonfigurować serwer. Te playbooki mogą być następnie wywoływane za pomocą prostego polecenia i automatyzują wszystkie ręczne kroki potrzebne do procesu konfiguracji. Sam nauczyłem się Ansible podczas konfigurowania serwera, więc jestem pewien, że playbooki mogłyby być lepsze, ale podzielę się nimi, a także wszystkim innym potrzebnym do konfiguracji serwera, poprzez GitHub w kolejnych częściach tej serii.
uruchomiłem te skrypty w maszynie wirtualnej kilka razy przed rzeczywistą instalacją, aby upewnić się, że wszystko działa zgodnie z przeznaczeniem. Od tego czasu dodałem kilka nowych funkcji i przerobiłem części istniejących. Rzeczywista instalacja na serwerze była dość prosta.
najpierw musisz zainstalować swój ulubiony System Operacyjny Linux. Wybrałem Ubuntu Server LTS i zainstalowałem go za pomocą pamięci USB. System jest zainstalowany na dysku SSD w celu skrócenia czasu uruchamiania. Po instalacji skonfigurowałem tylko sieć (polecam statyczne IP), włączyłem SSH i przeniosłem serwer na jego ostateczną pozycję fizyczną. Od teraz nie jest potrzebny ekran/klawiatura/mysz, można nim zarządzać przez sieć (chyba że coś pójdzie nie tak).
kolejne kroki są również proste: pobierz potrzebne Skrypty, zainstaluj Ansible i uruchom playbooki.
sudo apt install git ansiblegit clone https://github.com/OliverHi/zfs-homeserver.gitcd zfs-homeserver/ansibleansible-playbook setup_playbook.yml -K
spowoduje to uruchomienie playbooka o nazwie setup_playbook.yml, który skonfiguruje serwer. Oczywiście możesz użyć dowolnego Ansible playbook tutaj, ale mój jest dość prosty i wygląda tak.
--- - name: "Setting up the home server" hosts: localhost connection: local # become root user, which is needed for most tasks become: yes become_user: root vars_files: - vars/main_vars.yml tasks: - name: Install the needed packages apt: name: - samba - software-properties-common #- linux-headers - dkms - zfsutils-linux - samba-vfs-modules - zfs-auto-snapshot state: latest cache_valid_time: 3600 - import_tasks: tasks/setupZFStask.yml - import_tasks: tasks/setupUsersTask.yml - import_tasks: tasks/setupFoldersTask.yml - import_tasks: tasks/setupSambaTask.yml - import_tasks: tasks/setupDocker.yml # and more tasks if needed
zasadniczo działa na lokalnym serwerze, działa jako root i używa zmiennych zdefiniowanych w osobnym main_vars.plik yml. Rozpocznie się od zainstalowania kilku pakietów, których potrzebuję do mojej konfiguracji, a następnie uruchomi zestaw zadań, które napisałem dla różnych części stosu oprogramowania. Skonfiguruje system plików ZFS, utworzy użytkowników i foldery, skonfiguruje Dockera i wiele innych. Zawsze możesz dostosować je do własnych upodobań.
w kolejnych postach z tej serii wyjaśnię, jak skonfigurowałem system plików, użytkowników, akcje samby, a także Docker i traefik reverse proxy. W każdej części dodam również potrzebne pliki Ansible, aby je automatycznie zainstalować. Cały kod będzie dostępny na moim koncie GitHub.
następny wpis o konfigurowaniu ZFS i systemu kopii zapasowych można znaleźć tutaj.