Blog/devops/Docker ilə Next.js App Deployment — Addım-Addım Bələdçi
devops

Docker ilə Next.js App Deployment — Addım-Addım Bələdçi

B
Baku Stack AI
·12 aprel 2026·4 dəq oxuma·12 baxış
devops.ascii
▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
▓ ■ ■ ■ DEVOPS ▓
▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
▓ $ docker build . ▓
▓ → deps ▓▓▓▓░░ 60% ▓
▓ → build ▓▓▓▓▓░ 80% ▓
▓ → runner ▓▓▓▓▓▓ ✓ ▓
▓ ● Image: 130 MB ▓
▓ ● Port: 3000 ▓
▓ ● User: nextjs ▓
▓ ──────────────────── ▓
▓ $ docker run -p 3000 ▓
▓ ✓ Ready on :3000 ▓
▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓

Next.js layihəni Docker ilə containerləşdirib production-a çıxarmağın ən sadə və düzgün yolu — real kod nümunələri ilə.

Docker ilə Next.js App Deployment — Addım-Addım Bələdçi

Salam, developer dostum! 👋

Bakıda iş müsahibələrinə gedirsənsə, son 1-2 ildə bir şeyi mütləq görmüsən: vakansiyaların 70%-də Docker tələb olunur. ABB, Kapital Bank, Pasha Holding, SOCAR-ın texnoloji departamentləri — hamısı containerization biliyini soruşur. Əgər freelance işləyirsənsə, Upwork-də "Next.js + Docker" combo ilə saatlıq $25-40 arası rate tutmaq mümkündür.

Bu gün sənə Next.js appini Docker ilə necə deployment-ə hazırlayacağını sıfırdan, addım-addım göstərəcəm. Məqalənin sonunda production-ready bir setup-ın olacaq.


Niyə Docker? Niyə indi?

Klassik ssenari tanışdır: "Məndə işləyir" sindromu. Sən Bakıda oturub development edirsən, server Frankfurtda və ya İstanbulda. Node versiyası fərqlidir, dependency-lər uyğun gəlmir, OS başqadır. Docker bütün bunları həll edir — "bir dəfə yaz, hər yerdə işlət".

Statistikaya baxaq:

  • Stack Overflow 2025 Survey: Developer-lərin 59%-i Docker-dən istifadə edir
  • Azərbaycanda: LinkedIn-də "Docker" tələb edən vakansiyaların orta maaşı 2500-4500 AZN arasıdır (Junior-Middle)
  • Build vaxtı qənaəti: Multi-stage build ilə image ölçüsü ~85% azalır

Addım 0: Nə lazımdır?

  • Node.js 18+ quraşdırılmış kompüter
  • Docker Desktop (Windows/Mac) və ya Docker Engine (Linux)
  • Hazır Next.js layihə (yoxdursa, indi yaradacağıq)

Terminalı aç:

bash
npx create-next-app@latest my-baku-app cd my-baku-app npm run dev

http://localhost:3000-da işləyirsə — əladır, davam edirik.


Addım 1: .dockerignore faylı yarat

Layihənin root qovluğunda .dockerignore faylı yarat. Bu fayl Docker-ə lazımsız faylları göndərməməyi deyir:

node_modules
.next
.git
.gitignore
README.md
docker-compose*.yml
.env*.local

Bu addımı unutma — node_modules qovluğunu context-ə göndərmək build vaxtını 3-5 dəqiqə artırır.


Addım 2: Dockerfile yarat (Multi-Stage Build)

Bu ən vacib hissədir. Multi-stage build istifadə edirik ki, final image kiçik olsun. Layihənin root-unda Dockerfile yarat:

dockerfile
# ========== Stage 1: Dependencies ========== FROM node:18-alpine AS deps WORKDIR /app COPY package.json package-lock.json* ./ RUN npm ci --only=production # ========== Stage 2: Build ========== FROM node:18-alpine AS builder WORKDIR /app COPY --from=deps /app/node_modules ./node_modules COPY . . # Next.js telemetry-ni söndürürük ENV NEXT_TELEMETRY_DISABLED 1 RUN npm run build # ========== Stage 3: Production ========== FROM node:18-alpine AS runner WORKDIR /app ENV NODE_ENV production ENV NEXT_TELEMETRY_DISABLED 1 # Təhlükəsizlik üçün non-root user yaradırıq RUN addgroup --system --gid 1001 nodejs RUN adduser --system --uid 1001 nextjs COPY --from=builder /app/public ./public # Standalone output üçün lazım olan fayllar COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./ COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static USER nextjs EXPOSE 3000 ENV PORT 3000 ENV HOSTNAME "0.0.0.0" CMD ["node", "server.js"]

Addım 3: next.config faylını yenilə

Standalone output aktiv etmək lazımdır. next.config.mjs faylını belə redaktə et:

javascript
/** @type {import('next').NextConfig} */ const nextConfig = { output: 'standalone', // Bakıdakı API server-inə proxy (misal) // async rewrites() { // return [ // { // source: '/api/:path*', // destination: 'http://your-baku-api:8080/:path*', // }, // ]; // }, }; export default nextConfig;

output: 'standalone' — bu seçim Next.js-ə deyir ki, bütün lazımi faylları bir qovluğa yığsın. Docker image ölçüsünü ~1.2 GB-dan ~150 MB-a endirir.


Addım 4: Build et və işə sal

Terminalda bu əmrləri yaz:

bash
# Image-i build et docker build -t my-baku-app:latest . # Container-i işə sal docker run -p 3000:3000 my-baku-app:latest

Brauzerə gir: http://localhost:3000təbriklər, Docker-ləşdirilmiş Next.js appın işləyir! 🎉


Addım 5: docker-compose ilə real setup

Production-da adətən tək container olmur. docker-compose.yml faylı yarat:

yaml
version: '3.8' services: web: build: context: . dockerfile: Dockerfile ports: - "3000:3000" environment: - DATABASE_URL=postgresql://user:pass@db:5432/mydb - NEXT_PUBLIC_API_URL=https://api.example.az depends_on: - db restart: unless-stopped db: image: postgres:16-alpine environment: - POSTGRES_USER=user - POSTGRES_PASSWORD=pass - POSTGRES_DB=mydb volumes: - pgdata:/var/lib/postgresql/data ports: - "5432:5432" volumes: pgdata:

İndi bir əmrlə hər şeyi qaldır:

bash
docker compose up -d --build

Image ölçülərini müqayisə edək

MetodImage ÖlçüsüBuild Vaxtı
Sadə Dockerfile (node:18)~1.4 GB~3 dəq
Alpine + multi-stage~180 MB~2 dəq
Alpine + standalone output~130 MB~1.5 dəq

Bizim yanaşma ilə image 10 dəfədən çox kiçilir.


Deployment: Hara deploy edək?

Azərbaycandan işləyən developer-lər üçün populyar seçimlər:

  • Railway / Render — pulsuz tier var, Docker dəstəyi əla, başlayanlar üçün ideal
  • DigitalOcean App Platform — aylıq $5-dan başlayır (~8.5 AZN), Dockerfile-dan avtomatik deploy
  • AWS ECS / Google Cloud Run — böyük layihələr üçün, Kapital Bank və PASHA kimi şirkətlər istifadə edir
  • VPS + Docker — Hetzner-dən aylıq €4-a server alıb, docker compose up -d ilə deploy etmək ən ucuz yoldur

Tez-tez edilən səhvlər

  1. .dockerignore yazmamaqnode_modules context-ə düşür, build 5x yavaşlayır
  2. Root user ilə container işlətmək → təhlükəsizlik riski, biz yuxarıda nextjs user yaratdıq
  3. output: 'standalone' unutmaq → image nəhəng olur
  4. ENV dəyişənləri hardcode etmək.env faylını Docker-ə göndərmə, environment bölməsindən istifadə et
  5. Health check qoymamaq → production-da container crash olsa, bilməzsən

Health check əlavə etmək istəyirsənsə, Dockerfile-a bu sətri əlavə et:

dockerfile
HEALTHCHECK --interval=30s --timeout=3s \ CMD wget --no-verbose --tries=1 --spider http://localhost:3000/ || exit 1

Son söz

Docker bilmək artıq "plus" deyil, tələbdir. Bakıda müsahibəyə girəndə "Docker istifadə etmişəm" demək, CV-ni digər namizədlərdən fərqləndirən ən asan yoldur. Bu məqalədəki setup-ı öz portfolio layihənə tətbiq et, GitHub-a push et və LinkedIn-də paylaş.

Sualın varsa, kommentlərdə yaz — cavablandıracam. 🚀

Müəllif: Baku Stack redaksiyası | 12 Aprel 2026

Teqlər

Paylaş:𝕏 Twitter✈ Telegram
Bəyəndim

Oxşar məqalələr

devops.ascii
▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
▓ ■ ■ ■ CI/CD PIPELINE ▓
▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
▓ git push → trigger ▓
▓ ↓ ▓
▓ ● checkout ✓ ▓
▓ ● npm ci ✓ ▓
▓ ● npm test ✓ ▓
▓ ● npm build ✓ ▓
▓ ● deploy ✓ ▓
▓ ↓ ▓
▓ PROGRESS ▓▓▓▓▓▓▓▓ 100%▓
▓ → SAYT CANLIDIR! ░░░ ▓
▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓

GitHub Actions ilə Avtomatik Deploy — Pulsuz Hosting, Sıfır Stress

Hər git push əmrindən sonra saytın avtomatik deploy olsun, həm də pulsuz? GitHub Actions + GitHub Pages ilə bunu 10 dəqiqəyə qurursan.

devops.ascii
▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
▓ ■ ■ ■ DEVOPS ▓
▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
▓ $ minikube start ▓
▓ ✓ cluster ready ▓
▓ ▓
▓ PODs: ●●●●●○○○ ▓
▓ NODES: ●●● ▓
▓ CPU: ▓▓▓▓▓░░░ 65% ▓
▓ MEM: ▓▓▓▓░░░░ 48% ▓
▓ ▓
▓ → scaling: 2 → 20 ▓
▓ → downtime: 0 sec ▓
▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓

Kubernetes başlanğıcı — nə vaxt lazım olur, nə vaxt yox?

Hər layihəyə Kubernetes lazım deyil. Gəl birlikdə baxaq: K8s nə vaxt həqiqətən işə yarayır, nə vaxt isə vaxt itkisidir.

devops.ascii
▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
▓ ■ ■ ■ SECURITY ▓
▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓
▓ .env → ⚠ LEAKED! ▓
▓ API_KEY=sk-proj-4f.. ▓
▓ DB_PASS=super_sec... ▓
▓ ░░░░░░░░░░░░░░░░░░░ ▓
▓ ● Scan: gitleaks ▓
▓ ● Risk: ▓▓▓▓▓▓▓▓░░ ▓
▓ ● Leaks: 12.8M/year ▓
▓ ░░░░░░░░░░░░░░░░░░░ ▓
▓ ✓ .gitignore → .env ▓
▓ ✓ Rotate keys 90d ▓
▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓

Environment Variables Təhlükəsizliyi — Developer-lərin Buraxdığı Səhvlər

Hər il minlərlə API key GitHub-da açıq qalır. Azərbaycanlı developer-lər olaraq biz də bu səhvləri edirik — gəlin real nümunələrlə öyrənək və qorunaq.

← Bloqa qayıt