Sněhová vločka na mojem serveru

21. 2. 2024 8:10 (aktualizováno) Živoslav Petr Bolf

Jsem hrdým členem vpsfree a to už od roku 2016. Pro své projekty jsem většinou používal debian, což korespondovalo s tím, co jsem měl momentálně na svém desktopu.

Na desktopu jsem měl zpravidla mint, po nějaký krátký čas mx linux. Kolem roku 2021 jsem si začal s manjarem. Tím jsem opustil debianní základnu a přešel do rolling release světa archu.  Na konec jsem objevil skončil u mabox linuxu. Tato nepříliš známá distribuce je zase jen manjaro, které se liší v zásadě jen tím, že používá jako grafické prostředí dobře vyladěný openbox. A na ploše má ve výchozím nastavení čarovnou houbičku. Jedná se tak o jediný operační systém s rozšířeným vědomím.

 

Jak jsem se tak sblížil s manjarem a později s maboxem, zachtělo se mi i na serveru vyzkoušet něco v podobném stylu. A tak jsem si nějaký čas hrál na serveru s arch linuxem. Oproti debianu se v něm mnohem lépe instaluje PHP, ale s php extensions a s nginxem už je nějaká práce navíc. Debian je uvážlivý chlapík, arch je mladý frajírek co rád experimentuje. Dalo by se o tom ještě hodně napovídat, ale já mám na srdci sněhovou vločku.

O distribuci nixos jsem se dozvěděl díky vpsfree. Velké téma, velký přechod, základ na kterém dnes už vpsfree pevně stojí. Richard Marko a Pavel Šnajdr o něm vyprávěli už v roce 2018 na LinuxDays. O rok později jsem se poprvé a naposledy účastnil členské schůze spolku vpsfree. A tam jsem se mezi řečí v kuloárech dozvěděl, že jsem jediný, kdo na vpsfree provozuje uživatelské vps s nixos. Zkoušel jsem ho, ale dlouho jsem u něj nevydržel. Loni už bylo zaznamenáno na vpsfree 130 výskytů instalací nixos a počet stále roste.

S nixos to není jen tak. Když umíš trochu s debianem, arch tě někdy příjemně překvapí a někdy naštve, ale ty věci jsou tam tak nějak plus mínus podobně. Nixos tě na první pohled překvapí dost zvláštním jazykem a všechno to adminování se dělá úplně jinak. Mentální bariéra. Říkáš si, dobře vyladěný ansible mi přece stačí, k čemu se učit nix. Je to na prášky, naštěstí na to existují tabletky. Teda aspoň pro toho, komu to nedá a chce vědět co se děje na pozadí. Protože ono to umí zajimavé věci.

Nakonec ani nepotřebuješ vědět, jak je to udělané. Stačí vědět jak psát „konfiguráky“. A nějak si namyslet kam to psát. Člověk už je za ty roky zvyklý, že vše je v /etc/ a každý kus software se tam konfiguruje trochu jiným způsobem. V nixos se spíš programuje, než konfiguruje. Ale stačí kopírovat příklady z nixos.wiki a docela intuitivně se dá odhadnout co a jak nastavit. No, někdy je na to přímo proměnná, někdy se do proměnné s názvem extraConfig píše to samé, co bys napsal do konfiguráku někde v /etc. Jako programátor jsem zvyklý psát kód, spustit kompilátor, podívat se, proč mi kompilátor nadává, opravit chyby, spustit kompilátor, podívat se proč mi kompilátor nadává, opravit chyby, spustit kompilátor, … a nakonec úspěšně zkompilovat bezchybný kód. A říkal jsem, že takhle bych to mohl dělat i s nixem. Nakonec se je podobný způsob práce jako s ansible, akorát mi to přijde výrazně jednodušší. Po všech stránkách s vyjímkou syntaxe jazyka nix. Jenže já stejně nikdy neměl rád yaml, takže nad tím nepláču.

Všechny konfigurační soubory nixového serveru mám v repozitáři git. To už je síla sama o sobě. Můžu si udělat třeba branch s konfigurací pro nějaký jiný server, vracet změny, zkrátka využít sílu gitu jak je libo.

Napsal jsem si malý prográmek ve svém milovaném programovacím jazyce nim, ale totéž lze napsat na dva řádky (shebang nepočítám) třeba v bashi.

` bash

# rsync -avr –progress -e ssh $source/ $ssh_url:$target

scp -r $source/ $ssh_url:$target

ssh root@$ssh_url „nixos-rebuild switch“

`

Rsync je fajn, ale na serveru se musí doinstalovat, scp funguje i na nové instalaci vps. Těch pár skriptů se přenese raz dva, na vps se pak spustí nixos-rebuild switch, občas mi to vynadá a když ne tak mám server s nějakým novým nastavením. A můžu si být celkem jistý, že to funguje správně. Nix se o to postará.

Měl jsem kdysi potřebu si zkusit vytvořit vlastní distribuci. Z těch časů zůstalo poněkud netradiční pojmenování a umístění adresářů. Už jsem si na to uvykl, nicméně ty si to můžeš udělat podle sebe. Veškerou konfiguraci svého serveru nahrávám do adresáře /barbaros/nix. Ve výše uvedeném skriptu by tato cesta byla uložena v proměnné $target. Ať už si konfigurační soubory nahrajeme kamkoliv, musí se o nich nix nějak dozvědět. Využiju toho, že příkaz nixos-rebuild switch začne nejprve zpracovávat soubor /etc/nixos/configuration.nix.

Použil jsem import podobným způsobem, jako to dělá vpsadminos.  Můžeš prozkoumat soubor ./vpsadminos.nix (soubor je importován pomocí relativní cesty, takže jej najdeš v adresáři /etc/nixos). Můj hlavní konfigurační soubor importuji pomocí absolutní cesty, protože ho mám na neobvyklém místě. Mám aspoň oddělené vše, co si dělám sám od toho, co poskytuje systém. Můj hlavní konfigurační soubor má také neobvyklé jméno, lepší by asi bylo nazvat ho třeba default.nix (pak bych stačil uvést jen název adresáře, viď dále), případně main.nix a nebo barbaros.nix – když už jsem tak pojmenoval svou (pseudo)distribuci. Ale je to v zásadě jedno.

Můj hlavní konfigurační soubor nedělá nic jiného, než importuje další konfigurace.

```nix
{config,pkgs,... }:{
     imports = [
        ./packages
        ./services
        ./users
        ./sites    ];
}
```

Všechny importy jhsou názvy adresářů a nix místo nich načte soubor default.nix z každého jednoho adresáře. Celý strom konfiguračních souborů vypadá třeba takto:

barbaros/nix/
├── pruga.nix
├── packages
│   ├── default.nix
│   ├── mariadb.nix
│   ├── nginx.nix
│   ├── php.nix
│   └── postgresql.nix
├── services
│   ├── default.nix
│   ├── firewall.nix
│   └── nfs.nix
├── sites
│   ├── adminer.example.com
│   ├── blog.example.com
│   ├── default.nix
│   └── www.example.com
└── users
    ├── default.nix
    └── pruga.nix

V jednom souboru se snažím nastavit jen jednu věc. Přišlo mi přehledné vytvořit si zvlášť adresář pro balíčky, které potřebuji nainstalovat, zvláš´t pro nastavení služeb, pro vytvoření uživatelských účtů a také pro nastavení http serveru – pro každou doménu zvlášť.
Čas ukáže nakolik je toto rozdělení rozumné.

Bývá zvykem mít zvlášť htpp server, zvlášť databázový server a ještě předtím nějaký proxy server, často se používá haproxy. Když už je však konfigurace v nixos tak pohodlná, napadlo mě vykašlat se na toto tradiční dělení a mít vše v jedné vps. Nejspíš to narazí na nějaké limity u velkých webových projektů, ale takové zatím nemám. Uvažuji spíš v případě potřeby vytvářet pro každou doménu jedno vps, ale zatím je mám všechny na jednom serveru.

Toto je základní nastavení mé vps v systíému nixos. Nyní se bude vše nabalovat dál, rozvíjet a vyvíjet a uvidíme, co z toho vzejde. Příště napíšu něco o konfiguraci jednotlivých částí. Pokud jsi dočetl až sem a používáš nixos, budu rád za sdílení tvých zkušeností.

Sdílet