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