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í.
Dakujem za namety, pozriem ale:
> Všechny konfigurační soubory nixového serveru mám v repozitáři git
To mozete priamo aj v adresari /etc spustit 'git init' ziadny velky zazrak
to se pleteš, tady nejde jen o konfiguraci služeb a systému v /etc, ale vlastně i celý samotný systém, nainstalované balíčky, použitý kernel, spouštěné služby, externí integrace a vlastně celý provisioning.
NixOS má schopnost při změně nastavení i celkově změnit FS a definované službu podle nového nastavení, už žádné takové ty staré artefakty a neudržované služby, když v ansiblu prostě něco smažu nebo přestanu nějaký playbook spouštět. NixOS řeší vždy systém jako celek.
Z /etc třeba nejsi schopný nainstalovat potřebné balíčky a odinstalovat nepotřebné, k tomu ti verzování /etc nepomůže. NixOS jde ještě dál, v rámci definice systému může být i komplexní sestavení skoro jakéhokoliv SW, který se rovnou při deploymentu připraví, nemusí být balíček připravený v distribuci dopředu.
Tím to nekončí, celé nastavení a sestavení nového OS mohu dopředu vyzkoušet ve virtuálu a NixOS poskytuje robustní framework na testování systému uvnitř tohoto virtuálu.
Tomu rozumiem ale za nejaky velky zazrak by som to proste nepovazoval. Aj nad kubernet/ansible/helm configurakmi si mozem spustit git init alebo proste nad hocicim cim ovladam nieco.
Nixos je opravdu mnohem robustnější a řeší spoustu věcí, při kterých si člověk jinak docela dost zanadává.
Celou tu konfiguraci mám sice v gitu, ale o tom to vůbec není. Používám git skoro na vše, třeba i na smlouvy a dopisy úřadům. Beru git jako samozřejmost a ano, dávám do gitu i /etc/*.
Nixos je takový zázrak, spustíš a máš server a nebo aspoň víš, kde máš chybu. Je to příjemné jako když máš dobrý vývojový devstack.
Vadí mi v zásadě dvě věci, které postupně překonávám.
- ten jazyk nix je dost neobvyklý, je to pro mě pořád cizí území, kde našlapuju opatrně
- a celé je to takový zázrak, že se sice raduju jak to skvěle jde, ale s troškou nedůvěry si říkám, co se tam na pozadí vlastně děje. A tam se děje spousta věcí a děje se to úplně jinak, než v každým jiným normálním linuxu. V tom článku jsem dal odkaz na nix pills https://nixos.org/guides/nix-pills/ kde se jde do hloubky. Nakonec jsem to nestudoval až do posledního detailu, ale v zásadě jsem pochopil, jak třeba z helloworld v céčku uděláš nix balíček. Zabalit něco pro aur, nebo i pro debian je pro mě pořád snažší, ale ty balíčky v nixu dělají mnohem víc.
s nixem pracuji 4 roky a jsem v něm dnes schopný psát skoro normální programy. Je to ale neobvyklý jazyk, postupně jsem si ho ale docela oblíbil a přepsal různé bashové scripty přímo do nixu. Integrace se systemd je skvělá, rád třeba využívám sidecar servicy, kde mi teraform připraví celou službu před/při startu. Mohu snadno pro každou službu mít integrovaný bootstrap se získáváním tajemství z vaultu aniž bych musel každou službu upravovat, prostě to v přes nix injectují do těch servicech. Skvělé.
To balíčkování a způsob práce třeba s flake dává obrovské možnosti. Mohu třeba velice snadno a iterativně zkoušet různé verze závislostí, generovat různé varianty sestaveního toho stejné. To celé mohu udělat ve virtuálním klonu produkce dopředu a hledat regrese.
Výsledek mohu uložit do sdílené cache a jednotlivé stanice už si nemusí nic kompilovat, dostanou sestavení jaké potřebují. Mohu takhle kombinovat na jedné platformě několik různých verzí nástrojů, nepotřebuji pro každý jazyk používat speciální vyhýbku, abych mohl mít více jav, pythonů, nodů. Vždy byl porod do nějakého projektu aplikovat patche, s nix s jeho buildtooly to jde naprosto snadno.
Vlastně díky nixu (dnes už mám asi 90 % osobní infrastruktury na nixu, stejně tak desítky malých společností jsem postupně zmigroval na nix), mám virtualizovaný celý produkční stack a jakékoliv zásahy mohu dopředu vyzkoušet, což s běžnou distribucí je občas peklo. Výrazně se mi snížily nároky na údržbu, dříve jsem na to potřeboval několik lidí, dnesk to zvládnou dva lidi.
dík. Já tam ten potenciál zatím jen tuším, a taky jsem to s nixem zkoušel už dřív a vzdal to.
Kdybych to nevzdal, taky bych měl 4 roky praxe jako ty. Možná i 6 let. Ale vše má svůj čas.
Proto jsem začal psát i tenhle blog, abych i při tom psaní nad tím ještě víc přemýšlel a už před tím neutíkal.
Nečekal jsem teda, že to někdo bude i číst :-)
S těmi flakes, zkoušel jsem to a úplně jsem zatím nepochopil k čemu je to dobré. Tak zatím zkouším jen základní konfiguraci a objevuji jazyk. Možná mi to bude stačit i bez flakes, nemám nějak složitou infrastrukturu, spíš mám v plánu rozjet několik malých webů, které jsou teď tak různě všude možně a některé momentálně nefungují. No uvidím, kam se to vyvine.
když oni ti to dali na úvodku :). Jinak bych si toho také asi nevšiml, nix je zatím v českém prostředí titěrný, snažím se to propašovat k někomu většímu (třeba na generování image pro kubernet), ale zatím neúspěšně. Vpsfree je výjimka.
Flakes ti umožní mít pro jednotlivé aplikace vlastní nixpkgs strom závislostí. Nebo je to způsob jak může kompletně přemixovat nastavení služeb, závislostí a celý stack. Flakes je totiž rozhraní, které bere vstup, ten jakkoliv modifikuje a až poté se to evaluje, flaky můžeš řetězit. Umožňuje to ti do nix dostat jakékoliv externí zdroje a klidně jim lazy generovat hashe a můžeš adresovat přesně konkrétní sestavení vč. verzí nixpkgs, což běžně nelze snadno. Ne vše mám na flakes, ale sžívám se s tím.
Využívám třeba https://flakehub.com, umožňuje mi mít závislost na konkrétním nixpkgs lidštější formou než přes git hashe, např. "(import (fetchTarball https://flakehub.com/f/NixOS/nixpkgs/0.2311.555046.tar.gz));" pro celý OS nebo jen pro některé balíčky. Pokud dělám aktualizaci mohu buď udělat build celého systému nad novým nixpkgs nebo přidat další závislost a jednotlivé služby postupně na ní zmigrovat podle toho jak mám čas testovat. Takže když se v upstreamu objeví nějaký patch, aktualizace, mohu si jí cherry-pickovat s celým nixpkgs a již nemusím copy-paste jednotlivé definice služeb k sobě, jak jsem to dělal doteď.
dík. No já jsem ty flakes zkoumal někdy loni a nakonec dospěl k tomu, že to zatím udělám v čistém nix. Asi jsem ještě nenarazil na problém, který by flakes pomohli řešit.
Beru to v potaz a díky. Naučím se lépe poprzumět nix jako takovému a pak snad bude pro mě pochopitelnější i to, jak jsou flakes užitečné.
ale tady nejde o verzování konfigurace, ale její aplikaci. Jakpak se svým gitem uděláš checkout, naistalují se ti nové balíčky a restartují služby?
a co kubernetes samotný nebo samotné images? NixOS je linuxová distribuce, porovnávat to s běhovým prostředím pro kontejnery nedává velký smysl.
Dava, je to otazka potrieb a moznosti. Kontajner si mozete sprevadzkovat nad ktoroukolvek distribuciou dokonca aj nad windows.
Nic to nemeni na tom ze NixOS vyzera zaujimavo, zjavne je to vas milasek ale skutocny svet je casto komplikovanejsi ako ja som si nasiel, ja som si zvolil a ja si to takto budem robit.
podle mě to jsou různé věci, NixOS je ten systém, na kterém ten kubernetes může běžet, řeší konfiguraci HW, sítí, disků a připraví prostředí právě třeba pro kubernetes, abys tam mohl spouštět cokoliv.
Nedává smysl porovnávat kubernetes s nixOS, jedno je OS, druhé je služba v clusteru.
Vůbec to nastavení nixos nemusí být v gitu. Já si to dal do gitu jen proto, protože jsem na to zvyklý, ale stejně ten git nepoužívám jak bych měl. Parkrát mě git zachránil a parkrát taky ne, protože jsem necomitnul co jsem comitnout měl.
Nastavenie nixos v gite byt moze, tam problem nie je. Reagoval som na git priamo v /etc, to je velmi nestastny napad.
@tb - souhlasím s tvou myšlenkou, jen dvě drobnosti:
- git v /etc je super nápad, bez etckeeperu bych nenixový server spravovat nechtěl.
- git umí trackovat symlinky, práva jen omezeně (pouze +x), uživatele a skupiny ne
kdysi jsem také používal, došel jsem ale k přesvědčení, že chci mít dokumentaci systému někde jinde a chci být schopný ho sestavit z nuly rychle, etckeeper mě jen částečně nahrazoval dokumentaci.
Pak jsem nějakou dobu žil s argumentem, že aspoň sleduji, jestli nastavení někdo nezměnil. Dnes na kontrolu integrity již používám auditd a sleduji to systémově s přímým napojením na monitoring, pokud si to provoz žádá.
Osobně jsem k tomu šla spíš z druhé strany a na Nixu mi momentálně běží desktop, soukromý laptop a pracovní laptop.
Super je, že všechny stroje jsou instalované ze stejného gitu kde jsou i secrets, balíky které na pracovní laptop nepatří jsou definované separátně a vybírají se podle hostname a na pracovní laptop se ještě separátně nastavuje intune.
Docela fajn je nastudovat a brzo po instalaci přejít na nix flakes, je to budoucnost Nixu a přináší spoustu výhod (v případě instalace víc strojů třeba reprodukovatelnost díky lock file)
Nix je super na definici vývojového prostředí. Každý projekt má svou flake, jakmile vlezu do jeho adresáře, nainstalujou a nastaví se všechny balíky které jsou potřeba k sestavení a testům (a díky lock files všude stejné, takže je jistota stabilního vývojového prostředí), navíc jde ten package manager nainstalovat všude včetně macu, takže kolegové s macem můžou v pohodě stáhnout projekt který napíšu a nic neřešit. Stejné prostředí mi pak běží v CI, a flake projektu pak celou věc sestaví a vrátí minimalistický OCI kontejner.
Chystám se přejít na NixOS i na serveru, ale přesunout všechno co mám teď na CentOS bude docela fuška, tak to krapet odkládám :D
přesouval jsem to postupně, ty legacy věci v rhel jsem zabalil do docker containeru (z počátku dokonce po spuštění jsem spustil ansible, který ten conteiner doinstaloval) a spouštěl přes virtualisation.oci-containers.
Časem mi ale naprosto ubylo množství věcí, které mám mimo nix. Pro testy a klientské věci pak používám klasické virtuálky s plnou distribucí, opět řízeny a nasazovány přes nixOS, což je na tom skvělé, mít deklarativně nastavené virtuály je bomba.
Celkom by ma zaujímalo ako sa vám podarilo spojazdniť Intune na pracovnom laptope. Neviem sa dopátrať funkčného riešenia.
> 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.
Tak mat haproxy na jednom zeleze asi nema velky zmysel. Celkovo to delenie sa robi koli inym veciam ako je bezpecnost, rozdelenie vykonu, ... nie koli jednoduchosti alebo komplikovanosti konfiguracie.
Jasně. Bezpečnost a škálovatelnost, rozdělení výkonu, vím.
Mám zkušenost, už staršího data, že když neoddělíš hned na začátku zvlášť http server a db server, tak si docela zavaříš.
No, ale s nixos to jako problém nevidím. Asi záleží na situaci a úhlu pohledu, ale kdybych měl třeba měnit nastavení přístupu k databázi u desítek webů v jejich konfiguracích, často v těch php scriptech a jako alternativa k tomu dobře napsaný nixos konfigurace a změnit to na jednom místě a přebuildit - tak třeba tohle je rozdíl mezi otročinou na dlouho a úpravou na pár minut.
To jsou prostě takové ty situace, kdy člověk potřebuje něco vyzkoušet a teď stojí před komplexností svý infrastruktury a říká si, abych tohle vyzkoušel a nerozbil tamto. A když to vyzkouším na nějakém testovacím serveru a pak to dám na ostrý, tak s překvapením zjistím, že jsem zapomněl zase na tamto a ono to kvůli tomu nefunguje.
Ale jasně, vždy je spousta možných cest a třeba pomocí ansiblu lez v podstatě dosáhnu téhož cíle.
Pořád řešíme rovnici o x neznámých a výsledkem vždy bude množina možných řešení. Nixos je jen jedním z možných řešení. Nebo vzhledem k tomu, že i s nixos se dá dělat různě, tak je to nejspíš zase množina dalších řešení jak tu infrastrukturu vybudovat.
Sám jsem zvědavý, co v podaní nixos znamená to slovo "reprodukovatelný", kterým s etak zašťituje. Zatím myslím, že to znamená opravdu hodně a že to funguje.
Na to aby si nastavil server cez ssh netreba nic nikam kopirovat rsyncom:
nixos-rebuild switch \ --build-host $ssh_url \ --target-host $ssh_url \ --use-remote-sudo \ --flake .#$target_hostname
Inak dobre vyladeny Ansible tiez nie je na zahodenie. Jedna vec ktora mi pride v Nixe ako achylova pata je sprava secrets. Su na to kdejake nastroje a podobne, ale ansible-vault je v tomto IMO omnoho lepsie.
Cize je to ako so vsetkym. Right tool for the job. Niektore veci su v Nixe extremne jednoduche (v porovnani napriklad s tym Ansible) ine extremne narocne.
Agenix poznam, je to celkom dobre riesenie, ale proste nix principialne riesi niektore veci inak a dosledok toho je ze je praca s credentials obcas vyrazne zlozitejsia alebo vyzaduje nie celkom idealne riesenie.
Napriklad Tailscale. V Ansible je pomerne jednoduche pocas aplikovania konfiguracie vygenerovat docasny auth key - kludne s platnostou par minut a pri konfiguracii servera ho automaticky registrovat v tailnet. Vysledok je server ktory je automaticky pripojeny do VPN bez toho aby server samotny musel mat niekde ulozeny auth key alebo dokonca bez toho aby vobec nejaky platny auth key po ukonceni ansible existoval.
Naproti tomu nixos toto riesi tak, ze ma extra systemd service ktory vykona tailscale up
a ten kluc je potom vo vysledku potrebny priamo na stroji. Tiez je velmi neprakticke aby to bol nejaky short-lived token, pretoze agenix tak proste nefunguje. Cize vo vysledku je na serveri dlhodobo platny token.
Agenix je dobry na situacie kedy je cielom aby samotne hesla boli priamo niekde na serveri a aj tam si dovolim tvrdit, ze je to extremne kostrbate riesenie v porovnani s Ansible - napriklad ak jeden potrebuje vlozit heslo do konfiguracneho suboru. To co sa v ansible riesi pomerne priamociarym (a velmi flexibilnym) template systemom musi jeden s Agenix riesit rucne.
A takychto prikladov je vela.
Okrem Agenix je vela dalsich rieseni a v podstate vsetky obchadzaju nix nejakym sposobom - casto sposobom kedy je velmi lahke omylom mat secrets roztrusene niekde v nix store alebo commitnute plaintext v gite.
Na druhej strane su veci ktore su v Ansible extremne zlozite, zatial co v Nix je to trivialna zalezitost. Cize netvrdim, ze je jedno lepsie ako druhe, obe pouzivam (aj v kombinacii) ale konkretne sprava hesiel a inych tajnych udajov mi pride v nixe vyrazne zlozitejsia.
ty secrets v nixu jsou nešikovné, ale je to možná tím, že od toho čekáš víc. Používám hashicorp vault, pro službu, která potřebuje credentials generuje before další službu s vaultem, který secrets připraví buď přes šablonu nebo jako environments a až pak se spustí daná službu. Stejně mám řešené aktualizace, přes reload/restart. Něco na způsob https://github.com/DeterminateSystems/nixos-vault-service, ale napsal jsem si to trochu jinak.
Pro offline instalace mám vault server jako službu přímo na daném stroji, teraform jí nastaví při spuštění stejně jako mám nastavený produkční cluster a přes agenix (či něco podobného) tam vložím šifrovaný dump s hesly pro import do vaultu.
Pokud je potřeba služby konfigurovat externě, používám v definici něco jako condition file exists a služba se nespustí dokud někdo externí tam nevloží data. Pak je možné (třeba v rámci CI) jedním příkazem zavolat deploy přes nix a druhým spustit ansible, který to nakonfiguruje a služby spustí. Nebo dokonce deployment přes nix může být součástí ansible playbooku, waitovat na to, až bude ssh ready a pak tam klasicky naspouštět zbylé úlohy. Beru nixos jako generátor stavu OS, ale runtime věci, monitoring a provoz si stejně musím řešit sám.
Ansible používám skoro od počátku, ale musím říct, že mě už pěkně štve. Postupně jsem hodně věcí zmigroval do teraformu, lépe se mi tam řeší clusterové závislosti a konfigurace služeb na více serverech zároveň.
Ano podobne to riesim aj ja. Niektore veci sa daju relativne rozumne riesit aj cez systemd-creds. Ale proste niekedy je to sialene vela prace pre nieco co v Ansible riesi vault.
Asi najblizsie sa k tomu dostava sops-nix, ale tiez plati ze tam jeden musi riesit rovnatka na ohybaky aby to fungovalo.
Pouzivam ako Ansible, tak Terraform a tiez Nix. Vsetko je dobre na nieco ine. Terraform je urcite skvely na infrastrukturu. Nix je fajn na dev shell a aj NixOS samotny je celkom fajn. Ansible je skvele hlavne tam kde nemusis riesit zmeny v case a kde vzdy vsetko zostavujes "od nuly" - napriklad testovacia infrastruktura, pripadne rovno seria testov, tvorba images v kombinacii s Packerom a podobne.
A niekde na hranici tychto vyuziti su tie trecie plochy.
V Nix je to sprava hesiel. A vseobecne problem s tym, ked cast stavu systemu nie je riadena Nix-om. (klasicky priklad pre Nix je Steam, alebo iny externy package manager, Terraform ma tiez s tym problem napriklad pri sprave objektov v k8s)
V Terraform fakt ze musis niekde bezpecne a zdielatelne udrziavat state. A vobec vseobecne sprava state - terraform donedavna nemal moved a removed block, jeden to musel riesit rucne alebo externymi nastrojmi.
Ansible zas neprinasa idempotenciu "out of the box" a casom ti hrozi konfiguracny drift. Tiez casto nie je uplne zjavne co sa stane ked zbehne playbook. Jeden musi mat pomerne slusny test coverage aby sa na Ansible vedel spolahnut.
Kazde ma svoje miesto. Kazde ma svoje problemy.
NixOS je fajn. GuixOS je podobný avšak lepší https://guix.gnu.org/
Už nejaké dva roky používam Guix ako môj main OS.