Všechny projekty

Infrastruktura · 2024 – dosud Projekt 4 z 20

Vlastní server

Weby, pošta, média a lokální AI na jednom stroji – celé v konfiguraci NixOS.

Ve zkratce

Role
Návrh, správa a provoz
Období
2024 – dosud
Stav
V provozu
Technologie
10 technologií

Server spravuji sám od roku 2024. Na jednom fyzickém stroji běží weby pro mě i pro klienty, poštovní server, mediální knihovna, herní servery, streamovací studio a lokální jazykový model. Celý systém je popsaný v konfiguraci NixOS rozdělené do modulů, takže každou změnu nejdřív sestavím, porovnám s běžícím systémem a teprve pak nasadím. Když se něco pokazí, vrátím předchozí generaci.

Proč je to technicky zajímavé

  • Weby ze seznamu. Přes 30 virtuálních serverů nginx s PHP-FPM se generuje ze seznamu v konfiguraci, takže společná bezpečnostní pravidla platí pro všechny najednou. Certifikáty Let's Encrypt se vydávají přes HTTP-01, interní služby sdílejí wildcard certifikát vydaný přes DNS-01.
  • Interní služby běží na vlastních adresách, které nginx ve výchozím stavu pouští jen z domácí sítě a přes Tailscale.
  • Lokální AI. Ollama v Dockeru s modelem qwen2.5:7b, který celý běží na grafické kartě GTX 1060. Služba poslouchá jen na localhostu a využívá ji například AniMood.
  • Streamovací studio bez monitoru. OBS běží přímo na serveru na virtuálním displeji, přijímá obraz z herního počítače přes NDI, kóduje ho na grafické kartě (NVENC) a ovládá se přes VNC z domácí sítě.
  • Docker pro poštovní server Mailu s antispamem a podpisy DKIM, Strapi a další aplikace.
  • Herní servery jako moduly NixOS; ten nejnovější běží jako izolovaná služba s vlastním uživatelem a limitem paměti.
  • Média a monitoring. Plex s knihovnou na poli ZFS, metriky sbírá Prometheus s node exporterem a zobrazuje je Grafana.

Překážky a jak jsem je vyřešil

  • Grafická karta, kterou nový ovladač vyřadil. NixOS 26.05 přešel na ovladač NVIDIA, který už nepodporuje generaci Pascal, a GTX 1060 zmizela. Konfigurace teď výslovně vybírá starší větev 580, na které karta funguje.
  • GPU v kontejnerech. Původní přepínač pro NVIDIA v Dockeru je zastaralý a parametr --gpus all na Dockeru 29 padá. Grafická karta se proto do kontejnerů předává přes CDI.
  • OBS bez hardwarového kódování. OBS na NixOS nenašel knihovnu NVENC a nabízel jen softwarové x264; pomohlo doplnit cestu k ovladači do jeho prostředí. Plugin pro NDI se zase nedal sestavit, protože výrobce vydává nové SDK na stejné adrese a kontrolní součet v balíčku přestal sedět – konfigurace ho přepisuje na skutečný.
  • Datové pole, které se po restartu nepřipojilo. ZFS pool chyběl v cache importu, takže po restartu zůstal přípojný bod prázdný na systémovém disku a služby, které knihovnu spravují, ji začaly plnit znovu. Pool se teď importuje deklarativně. Obvyklý záznam ve fileSystems by naopak shodil start do nouzového režimu – i to je v konfiguraci zdokumentované.

Co není vidět

  • Zálohy se zkouškou obnovy. Databáze AniMoodu i tohoto webu se každou noc zálohují online zálohou SQLite. Následuje kontrola integrity, komprese zstd, rozbalení hotového archivu a druhá kontrola. Zálohy se drží 30 dní.
  • Úlohy s minimem práv. Zálohy a importy běží jako služby systemd pod uživatelem webu, se systémem jen pro čtení a bez možnosti získat vyšší oprávnění. Produkční databáze se nikdy neotevírá jako root – SQLite by založil pomocné soubory s cizím vlastníkem a web by přestal zapisovat.
  • Společné minimum pro všechny weby. Server nevydá skryté soubory a u webů se soubory na disku ani databáze, logy, konfiguraci a zálohy.
  • Změny s vysvětlením. Konfigurace u neobvyklých řešení říká proč, takže dávají smysl i po měsících.

Technologie

  • NixOS 26.05 – deklarativní konfigurace v modulech a návrat k předchozí generaci jedním příkazem.
  • nginx, PHP-FPM a Let's Encrypt – weby, reverzní proxy a automatické certifikáty.
  • Docker s CDI – kontejnerové služby včetně přístupu ke grafické kartě.
  • Mailu – vlastní poštovní server.
  • Tailscale – přístup k interním službám mimo domov.
  • ZFS – datové pole pro média.
  • Ollama na NVIDIA GTX 1060 – lokální jazykový model.
  • OBS, NDI a NVENC – streamování.
  • Prometheus a Grafana – metriky serveru.

Postaveno na

  • NixOS
  • Docker
  • nginx
  • Ollama
  • ZFS
  • PHP-FPM
  • Tailscale
  • Mailu
  • Prometheus
  • Grafana

Klávesové zkratky.

Klávesové zkratky webu. Při psaní do formuláře nereagují.

Web

?
Tahle nápověda
g
Mřížka 12 sloupců, komponenty a měření stránky
d
Vzhled: podle systému, světlý, tmavý, Linkin Park
Ctrl P
Vytisknout CV místo webu
Esc
Zavřít dialog nebo mřížku

Modrou tečku za jménem v úvodu jde chytit a hodit.

Linkin Park

l setlist lp
Setlist, skladby po albech
papercut
Přes stránku se roztrhne papír
numb
Web na pár vteřin otupí
faint
Stránka omdlí a zase se probere
meteora
Meteorický roj a přímý zásah do tečky za jménem
fromzero emily
Web zhasne do nuly a znovu se zrodí, s díky pro Emily Armstrong
concert koncert
Koncert: web projede barvy všech alb
castleofglass
Stránka zesklovatí, praskne a sklo se sesype
iridescent
Nadpisy a tečky se na chvíli přelijí duhou
breakingthehabit
Co je vidět, se rozsype a zase složí
intheend
Závěrečné titulky jako v kině
victim morethevictim
Web se rozpadne v glitchi a zůstane rozladěný (do obnovení, dalšího slova nebo Esc)
finalmasquerade
Škraboška přes celý web, kamera proletí okem
lost
Odchod na stránku 404

Slova napište kdekoli mimo formulář, velikost písmen ani mezery nevadí. S omezeným pohybem přijde jen krátké oznámení.

Na telefonu otevře setlist pět ťuknutí na modrou tečku za jménem.