husniddin's notes

Shitob Cloud’ni NixOS + systemd + nginx bilan qanday qurganim haqida

Menu

Ancha avval tinchost.uz qurgandim. Odamlar ishlatishgan. Faqatgina static saytlarni host qilish uchun edi. Experiment qilgandim, bo’sh noutbugimdan unumli foydalanish uchun qurgandim bu tizimni. Hozir tinchost.uz dam olyapti). Lekin o’shanda o’zimga yoqqandi. Odamlar haqiqiy loyihalarini ishga tushirishgani, men qurgan narsadan haqiqiy odamlar foydalanishi albatta yoqimli. Lekin ko’p texnik sabablarga ko’ra tinchost o’chdi. shitob uchun reasearch o’sha paytda nboshlangan. Qanday qilib bitta vps ichida ko’plab loyihalarni ishlatish haqida o’yladim. Eng ko’p muammo cheklovlar edi. Men serverning haqiqiy resurslariga egalikni bera olmasdim. Texnik narxi juda qimmatlashib ketardi. Men barcha uchun alohida container hosil qilib, ularni ishga tushirardim bu juda qimmatga tushdi. Bundan ish chiqmasligini bildim va izladim. Menga kerak narsa oddiy: odamlar shunchaki kirib oddiy loyihalarni tez host qilishi kerak. Quyida qanaqa qilib qurganim haqida aytaman. Eng oxirida(agar erinmasdan oxirigacha o’qisangiz, yoki shunchaki menudan “yakun” bo’limiga o’ting) yana gaplarim bor

Men xohlagan narsa:


Qisqa arxitektura

Shitob uchta asosiy qismdan iborat:

backend:


Deploy

Deploy paytida platforma aniq pipeline bo‘yicha ishlaydi:

sequenceDiagram
  participant U as User (Dashboard)
  participant API as Shitob API (Go/Fiber)
  participant DB as Postgres
  participant B as Builder (Nix)
  participant SD as systemd
  participant N as nginx

  U->>API: POST /api/deployments (repo_url, app_type, name, env_vars)
  API->>DB: create deployment (status=deploying, tier, limits)
  API->>API: allocate port (8000-9000), generate subdomain
  API->>B: clone repo + detect type + generate flake + nix build
  B-->>API: nix_store_path (build result)
  API->>SD: systemd-run (DynamicUser, MemoryMax, CPUQuota, sandbox)
  API->>N: write subdomain config -> localhost:PORT
  API->>N: reload nginx
  API->>API: health-check / waitForService
  API->>DB: status=running, expires_at (tierga qarab)
  API-->>U: URL: https://subdomain.shitob.live

Oddiy deploy bosqichlari

1) Repo’ni olish (clone)

2) Build (Nix bilan)

3) Ishga tushirish (systemd-run)

Har bur deployment systemd unit:

Web app unit’da IPAddressAllow=localhost kabi cheklovlar bor: tashqaridan trafik nginx orqali kiradi

4) Routing (nginx)

5) Health‑check

status=running faqat service start bo‘lganda emas, port tekshirilgandan keyin yoziladi(yaxshigina muammo bo’ldi. zombie protses qolibi ketsa crash bo’lmasligi uchun)


Static site va botlar

Static site

Telegram bot


Loglar va CI/CD

Loglar

CI/CD

Judayam minimal. Hozircha so’rovlar yukini kamaytirish uchun limit qo’yilgan. Githubdan so’rovlar kelishini cheklash uchun

Xavfsizlik

Men havfsizlik haqida keyinroq o’ylashni boshladim. Men uchun eng muhimi shunchaki loyiha ishlasa edi. Agar buzmoqchi bo’lsangiz yoki muammo ko’rsangiz menga yozing(mehmonov.husniddin1@gmail.com). Rahmat

Hozir bor himoya


Yakun

Shitob’ni qurishda maqsadim “katta platforma” emas, oddiy, tez loyihalarni onlayn qilish mumkin bo’lgan xizmat yaratish. Eng asosiysi yangi narsalarni bilan tajriba qilib ko’rish. Va qilib ko’rdim ham

Yoshlik, kitoblar va o'qish haqida