Disko na serwerach ← Wróć
Ilość znaków: 8816. Ilość słów: 1109. Ten artykuł przeczytasz w: 6 minut
Hej! Piszę do Was w kolejnym, piątym już poście na tym blogu. Dziś chciałbym opowiedzieć Wam o ostatnich zmianach na moich obu serwerach - Thor i Atlas. Miłej lektury!
Zmiany
Na obu swoich serwerach stworzyłem kopię zapasową wszystkich usług, a także bazy danych. W jakim celu?
Zdecydowałem na wdrożenie nowego rozwiązania do mojej konfiguracji - projektu Disko. Jest to projekt pozwalający na deklaratywne zdefiniowanie partycji dysków, plików SWAP, a także grup LVM bądź RAID. Dzięki temu oszczędzę wiele czasu podczas konfiguracji nowych hostów - nie muszę posługiwać się komendami, użyję własnego skryptu scripts/install.sh <host>, który wszystkim się zajmie.
Jednak każde ułatwienie niesie za sobą pewne odstępstwa. W przypadku konfiguracji Disko była to konieczność kombinacji z wszystkimi partycjami bądź formatu wszystkich dysków, ponieważ Disko nadaje unikalne labele (nazwy) do każdej partycji. Zdecydowałem się na tą drugą opcję, ponieważ przy okazji zmieniałem rozmiar i układ partycji - było to najbardziej rozsądne rozwiązanie.
W związku z tym, że zarówno thor jak i atlas używają NixOS-a, konieczne było wyłączenie kolejno obu serwerów. Natomiast pojawiły się problemy. Mój flake (konfiguracja NixOS) jest zależny od kilku repozytoriów na moim Forgejo, m.in.:
Te repozytoria, jak już wspomniałem, są hostowane na mojej instancji Forgejo - hard forku Gitea. Pojawia się pytanie - na którym serwerze? Oczywiście na serwerze Thor.
Mógłbym oczywiście przekopiować repozytorium wraz z plikami cache, jednak wydawało mi się to nieopłacalne. Poza tym, serwer domowy nie ma otwartych portów - i tak pojawiły by się problemy przy majstrowaniu z serwerem Atlas - jest to serwer proxy przekazujący dane do Thor-a za pomocą projektu Pangolin. Zdecydowałem się więc na uruchomienie mojego poprzedniego, słabszego serwera - również hostowanego dzięki Free Tier od Oracle. Był tam już postawiony Pangolin, w nieco starszej wersji, natomiast w niczym mi to nie przeszkadzało. Tymczasowo zmieniłem rekord DNS odpowiadający za IP głównego serwera, odczekałem na propagację rekordów i zabrałem się do działania.
Atlas
W pierwszej kolejności wyłączyłem serwer Atlas, ponieważ jest na nim uruchomiona mniejsza ilość usług. Upewniłem się, że miałem zgrane wszystkie pliki - od kopii zapasowych baz danych PostgreSQL i MySQL po pliki Pangolina. Dane znajdowały się na dysku mojego laptopa, więc mogłem przystąpić do działania. Pobrałem plik narzędzia netboot pozwalającego na uruchomienie systemów pobierając ich obrazy bezpośrednio z Internetu. Następnie uruchomiłem to narzędzie uruchamiając wirtualną konsolę w panelu Oracle, potem restartując serwer, a finalnie klikając klawisz ESC do momentu uruchomienia boot menu. W owym menu wybrałem opcję "UEFI Internal Shell", a następnie uruchomiłem Netboota za pomocą komendy fs0:netboot.efi. Pamiętajmy, że plik ten musi być umieszczony w katalogu /boot.
Następnie wybrałem NixOS 25.11 jako moje distro. Moim oczom ukazała się konsola. Mogłem już instalować system.
Na samym początku zapisałem swój klucz SSH jako ~/.ssh/id_ed25519 - klucz będzie potrzebny do odszyfrowania sekretów przez Agenix. Następnie przeszedłem do katalogu /etc/nixos i sklonowałem tam moje repozytorium z konfiguracją. Następnie użyłem stworzonego wcześniej skryptu do instalacji systemów. Jest to wrapper pozwalający na format dysków za pomocą wcześniej wspomnianego Disko oraz instalację w jednym.
Po uruchomieniu tego skryptu Nix pobiera wymagane zależności, a następnie Disko pyta, czy jesteśmy pewni co do wyczyszczenia treści podanych dysków BEZPOWROTNIE. Można wyłączyć ten komunikat podając flagę --yes-wipe-all-disks, natomiast wolę zachować większe bezpieczeństwo i nie wyczyścić przez przypadek np. mojego dysku USB. Prawdopodobieństwo takiej sytuacji jest dość małe, natomiast wciąż jest ona możliwa.
Po potwierdzeniu woli sformatowania dysku Disko zaczyna pracę nad dyskiem. Najpierw tworzy nową tablicę partycji, potem tworzy je kolejno na podstawie konfiguracji. My tylko obserwujemy cały proces. Po stworzeniu struktury dysków program montuje wymagane partycje w katalogu /mnt (domyślnie - można to zmienić za pomocą flagi) - aby nixos-install mógł zainstalować system.
Do odpowiedniego działania konfiguracji wymagany jest dodatkowy moduł, który wypełnia konfigurację dysków, SWAPów itd. aby NixOS mógł na niej bazować. Gdyby plik kondiguracyjny lub moduł nie był zaimportowany, NixOS zwrócił by błąd związany z brakiem klucza fileSystems w konfiguracji. Bootloader - o ile byłby zainstalowany - nie wiedział by, który dysk zamontować.
Po instalacji uruchomiłem ponownie system, wyłączyłem usługi aby nie nadpisywały przywracanych danych i przystąpiłem do przywracania kopii zapasowych folderów oraz baz danych. Następnie uruchomiłem usługi i voila - serwer wrócił do żywych.
Thor
Z serwerem Thor było nieco więcej komplikacji. Zacznijmy od faktu, że jest na nim postawiona o wiele większa liczba usług w porównaniu do Atlasa, więc samo tworzenie kopii zapasowej było czasochłonne i wymagało skupienia. Dodatkowo są tam uruchomione usługi takie jak Nextcloud czy Immich, zajmujące sporo miejsca na dysku. Wyszedłem naprzeciw tym trudnościom, formatując dyski w podobny sposób jak w przypadku wcześniej wspomnianego serwera. Dodatkową zaletą było stworzenie RAID na obu dyskach, co je w pewien sposób ze sobą "złączyło".
Jednak co z Forgejo? Poprzednim razem Thor był aktywny, więc przekazywał dane do Atlasa. W tym przypadku zdecydowałem się na czasochłonny krok, natomiast skuteczny. Uruchomiłem awaryjną instancję Forgejo na Atlasie, a także przekopiowałem pliki repozytorium z konfiguracją systemu oraz przywróciłem kopię bazy danych z Thora. Dzięki temu zabiegowi mogłem korzystać z Forgejo bez przeszkód. Po uruchomieniu systemu i przywróceniu danych oraz kopii zapasowej baz tymczasowa instancja Forgejo została wyłączona, a tymczasowe dane usunięte.
Dobre rady
Czy można było ulepszyć i przyspieszyć ten proces? Z pewnością tak. Z pewnością również muszę zastanowić się nad mirrorem moich repozytoriów na wypadek jakiejś katastrofy, kiedy nie będę mógł uzyskać dostępu do plików repozytorium. Na dodatek zastanowię się nad ujednoliceniem ścieżek z kluczowymi danymi - np. ścieżka /var/lib/nextcloud będzie odwoływała się do innego katalogu np. /var/store/nextcloud. W katalogu /var/store znajdowały by się podfoldery z kluczowymi danymi dla usług takich jak Nextcloud, Immich, czy całym wachlarzem serwisów Fediverse. Takie rozwiązanie powinno także pomóc przy automatycznych kopiach zapasowych (które planuję wdrożyć - prawdopodobnie za pomocą narzędzia Borg).
Przed instalacją NixOS-a na serwerze Oracle zapoznałem się z tym artykułem. Opisuje on krok po kroku działania, które należy podjąć, aby system działał prawidłowo.
Podsumowanie
Mam nadzieję, że opisałem wszystkie najważniejsze zmiany sprzed kilku minionych tygodni. Jeśli lubisz czytać posty na moim mini-blogu, możesz udostępnić link do mojej strony internetowej innym, tak, aby grono Czytelników stało się coraz większe. Dziękuję z góry!
Ponadto, zachęcam do zaglądania na moje inne media społecznościowe (sekcja skontaktuj się ze mną!) - przede wszystkim Akkomę oraz PeerTube. Na PeerTube staram się regularnie zamieszczać materiały - przede wszystkim z gry różnych utworów na organach.
W tym wpisie to już wszystko. Dziękuję za uwagę i do następnego!