در بخش قبل یک سیستم پایه را اعلانی ساختیم. حالا آن را به یک سرور واقعی تبدیل میکنیم: یک وبسرور، یک فایروال محدود، کاربران، یک سرویس systemd سفارشی، و مدیریت امن secretها؛ همه در همان مدل اعلانی و بازگشتپذیر. برای تمیز ماندن، پیکربندی را به چند فایل ماژول تقسیم میکنیم و در configuration.nix آنها را import میکنیم.
یک سرویس و یک فایروال محدود
در NixOS برای راهاندازی nginx کافی است آن را «فعال» اعلام کنیم؛ NixOS خودش unit مربوط به systemd، کاربر سرویس و پوشهها را میسازد. فایروال هم بهصورت پیشفرض همهی پورتها را مسدود میکند و فقط پورتی که صراحتاً باز کنیم در دسترس خواهد بود:
کاربران و یک سرویس systemd سفارشی
کاربران هم اعلانیاند: یک کاربر deploy با کلید SSH خودش تعریف میکنیم. سرویسهای سفارشی هم مستقیماً در همان زبان توصیف میشوند؛ لازم نیست فایل unit جدا بنویسیم. NixOS از توضیح ما یک واحد systemd کامل میسازد:
oneshot سفارشی، هر دو اعلانی. کاربر ساخته میشود و سرویس هنگام بوت اجرا شده و در لاگ نوشته است.مدیریت امن secretها با sops-nix
یک مشکل کلاسیک: پیکربندی سیستم را میخواهیم در Git نگه داریم، اما نمیخواهیم رمزها و توکنها بهصورت متن ساده آنجا باشند. راهحل sops-nix است. secretها بهصورت رمزنگاریشده (با یک کلید age) در repo میمانند و فقط هنگام فعالسازی سیستم، در مسیر /run/secrets و تنها برای root رمزگشایی میشوند:
sops-nix، فایل secret در حالت سکون رمزنگاریشده است (ENC[AES256_GCM,...])، اما پس از nixos-rebuild switch مقدار واقعی فقط در /run/secrets/api_token و با دسترسی محدود به root ظاهر میشود. متن ساده هیچوقت وارد Git یا /nix/store نمیشود.جمعبندی و بخش بعد
حالا یک سرور واقعی داریم که کل وضعیتش (سرویس، فایروال، کاربران، سرویس سفارشی و secretها) اعلانی، قابلبازبینی و بازگشتپذیر است. یک قدم مانده: محیط خودِ کاربر و استقرار این پیکربندی روی یک ماشین دیگر از راه دور.
در بخش پایانی به سراغ home-manager میرویم تا محیط کاربری را هم اعلانی کنیم، و این پیکربندی را از راه دور روی یک ماشین دیگر مستقر میکنیم.
بخشهای این مجموعه
- بخش ۱: مفاهیم Nix، نصب و Nix store
- بخش ۲: زبان Nix و کار با Nixpkgs
- بخش ۳: Flakes و محیطهای توسعهی بازتولیدپذیر
- بخش ۴: نصب و پیکربندی اعلانی NixOS
- بخش ۵: NixOS در عمل؛ سرویسها، کاربران و شبکه (همین بخش)
- بخش ۶: home-manager و استقرار از راه دور