📦
Hosting

Next.js standalone build: kam resurs bilan ishlatish va kichik serverga joylash

10.11.2026
← Barcha maqolalar

Oddiy usulda joylangan Next.js loyihasi serverda butun node_modules papkasini talab qiladi. Bu papkada build uchun kerak bo'lgan, lekin ishlash vaqtida hech qachon ishlatilmaydigan yuzlab paketlar bor: TypeScript, linterlar, test kutubxonalari va boshqalar. Kichik VPS'da bu disk joyini egallaydi, deploy vaqtini uzaytiradi va Docker image'larini og'irlashtiradi. Next.js'ning standalone rejimi aynan shu muammoni hal qiladi: build vaqtida u ilova haqiqatan ishlatadigan fayllarni kuzatib, ularni alohida papkaga yig'adi.

Standalone rejim qanday ishlaydi

Build paytida Next.js har bir sahifa va API route qaysi modullarni import qilishini tahlil qiladi. Standalone yoqilgan bo'lsa, natijada .next/standalone papkasi paydo bo'ladi. Uning ichida minimal server.js fayli va faqat zarur paketlardan iborat qisqartirilgan node_modules bo'ladi. Bu papka next start buyrug'iga muhtoj emas, u oddiy node server.js bilan ishga tushadi. Shu sababli serverga butun loyihani emas, faqat shu papkani ko'chirish kifoya.

Standalone'ni yoqish

Sozlash bitta qatordan iborat. Loyihaning next.config.js yoki next.config.mjs fayliga output parametrini qo'shing va build'ni qayta bajaring.

// next.config.mjs
const nextConfig = {
  output: "standalone",
};

export default nextConfig;
npm ci
npm run build
ls .next/standalone

Build tugagach, .next/standalone papkasida server.js, package.json, node_modules va .next ichki papkasini ko'rasiz. Hajmni solishtirish uchun du -sh node_modules .next/standalone buyrug'ini bajarib ko'ring, farq loyihaga qarab har xil bo'ladi, lekin odatda sezilarli.

Eng ko'p unutiladigan qadam: public va static

Standalone papkasiga ikki narsa avtomatik qo'shilmaydi: public papkasi va .next/static ichidagi CSS, JavaScript bo'laklari. Next.js bu fayllarni ataylab tashlab ketadi, chunki ularni Nginx yoki CDN orqali to'g'ridan-to'g'ri berish samaraliroq deb hisoblaydi. Agar ularni ko'chirmasangiz, sayt ochiladi, lekin dizaynsiz, rasmlarsiz va tugmalar ishlamaydigan holda bo'ladi. Ko'pchilik birinchi marta aynan shu yerda adashadi.

cp -r public .next/standalone/
cp -r .next/static .next/standalone/.next/

Bu ikki buyruqni build skriptiga qo'shib qo'yish yaxshi odat, shunda keyingi deploy'larda ular unutilmaydi. package.json da shunday yozish mumkin.

"scripts": {
  "build": "next build",
  "postbuild": "cp -r public .next/standalone/ && cp -r .next/static .next/standalone/.next/"
}

Serverda ishga tushirish

Standalone server port va manzilni muhit o'zgaruvchilari orqali oladi. PORT qaysi portda tinglashni, HOSTNAME esa qaysi manzilda tinglashni belgilaydi. Nginx orqasida ishlatilganda 127.0.0.1 ni ko'rsatish xavfsizroq, Docker ichida esa 0.0.0.0 kerak bo'ladi.

cd /var/www/misol-next/.next/standalone
PORT=3000 HOSTNAME=127.0.0.1 NODE_ENV=production node server.js

Doimiy ishlashi uchun PM2 ecosystem fayli qulay. U ilovani fonda ushlaydi, yiqilsa qayta ko'taradi va xotira chegarasidan oshsa qayta ishga tushiradi.

// ecosystem.config.js
module.exports = {
  apps: [{
    name: "misol-next",
    cwd: "/var/www/misol-next/.next/standalone",
    script: "server.js",
    max_memory_restart: "400M",
    env: { NODE_ENV: "production", PORT: 3000, HOSTNAME: "127.0.0.1" }
  }]
};

Build'ni serverdan tashqarida qilish

Standalone rejimning eng katta afzalligi shundaki, build'ni kuchli kompyuterda yoki CI'da bajarib, serverga tayyor papkani yuborish mumkin. Kichik VPS build paytida xotira yetishmasligidan qiynalmaydi, server faqat tayyor ilovani ishlatadi. Muhim shart bitta: build qilinadigan mashinaning operatsion tizimi va protsessor arxitekturasi server bilan mos bo'lishi kerak, chunki ba'zi paketlarda, masalan rasmlarni qayta ishlovchi sharp'da, platformaga bog'liq binar fayllar bor.

npm run build
tar -czf release.tar.gz -C .next/standalone .
scp release.tar.gz deploy@example.uz:/var/www/misol-next/releases/

Docker bilan ishlatish

Docker'da standalone ayniqsa foydali, chunki yakuniy image'da faqat ishlash uchun kerakli fayllar qoladi. Quyida ko'p bosqichli Dockerfile'ning soddalashtirilgan varianti keltirilgan. Birinchi bosqichda build bajariladi, ikkinchisida esa faqat natija ko'chiriladi.

FROM node:20-alpine AS build
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build

FROM node:20-alpine
WORKDIR /app
ENV NODE_ENV=production PORT=3000 HOSTNAME=0.0.0.0
COPY --from=build /app/.next/standalone ./
COPY --from=build /app/.next/static ./.next/static
COPY --from=build /app/public ./public
EXPOSE 3000
CMD ["node", "server.js"]

Amaliy misol: Namangandagi mebel do'koni

Namangandagi mebel do'koni katalog saytini Next.js'da ishlatadi va uni 1 GB xotirali kichik VPS'da ushlaydi. Avval build to'g'ridan-to'g'ri serverda bajarilardi va har safar xotira tugab, sayt bir necha daqiqa ishlamay qolardi. Standalone rejimga o'tgandan keyin build dasturchining kompyuterida bajariladi, serverga faqat tayyor arxiv yuboriladi va PM2 ilovani qayta yuklaydi. Serverda endi butun node_modules o'rniga faqat kerakli paketlar turadi, deploy esa bir daqiqadan kamroq vaqt oladi.

Tez-tez uchraydigan muammolar

Kam resursli serverda Next.js ishlatmoqchi bo'lsangiz, sayt.uz kabinetidan kichik VPS olib, standalone rejim bilan boshlash yaxshi variant. Resurs yetmay qolsa, tarifni keyinchalik kattalashtirish mumkin.

O'xshash maqolalar

🚦 "Too many connections" xatosi: sabab va yechim 📁 FileZilla va WinSCP bilan hostingga SFTP orqali ulanish 🗄️ ISPmanager'da ma'lumotlar bazasi va foydalanuvchi yaratish 🔤 utf8mb4: emoji va o'zbek harflari buzilmasligi uchun MySQL kodirovkasi
🌐 Til
🇺🇿 O'zbek ✓ 🇺🇿 Ўзбек 🇷🇺 Русский 🇬🇧 English