Docker ilə Next.js App Deployment — Addım-Addım Bələdçi
Next.js layihəni Docker ilə containerize edib production-a çıxarmağın ən sadə və effektiv 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 interview-lara gedirsən, CV-nə "Docker" yazıbsan, amma əslində sadəcə docker run hello-world çalışdırmısan? Narahat olma, bu gün bu vəziyyəti birlikdə düzəldəcəyik.
Bu məqalədə real bir Next.js layihəni sıfırdan Docker ilə containerize edəcəyik, optimize edəcəyik və production-a hazır hala gətirəcəyik. Hər addımı izah edəcəyəm — copy-paste edib işlədə biləcəyin kodlarla.
Niyə Docker? Niyə İndi?
Azərbaycanda IT bazarı sürətlə böyüyür. Bakıdakı şirkətlər — istər ABB, istər Kapital Bank-ın texnoloji komandası, istərsə də PASHA Holding-in digital layihələri — artıq microservice arxitekturasına keçir. Bu o deməkdir ki, Docker bilmək artıq "bonus" deyil, tələbdir.
Statistikaya baxaq:
- Stack Overflow 2025 Survey-ə görə developerlərin 63%-i Docker istifadə edir
- Azərbaycanda Docker bilən backend developer maaşı ortalama 1800-3000 AZN arasıdır, bilməyənlərdə isə bu rəqəm 1200-1800 AZN civarında qalır
- LinkedIn-də Bakı üzrə "Docker" tələb edən vakansiyaların sayı son 1 ildə 2.3x artıb
Qısası: Docker öyrən, maaşına zam al. Sadə riyaziyyat. 😄
Hazırlıq: Nə Lazımdır?
Başlamazdan əvvəl bunlar quraşdırılmış olmalıdır:
- Node.js (v18 və ya v20 LTS)
- Docker Desktop (Windows/Mac) və ya Docker Engine (Linux)
- Hər hansı bir Next.js layihə (yoxdursa, indi yaradacağıq)
Terminalı aç və yeni layihə yarat:
bashnpx create-next-app@latest my-docker-app cd my-docker-app npm run dev
http://localhost:3000 açılırsa — əla, keçirik əsas hissəyə.
Addım 1: Dockerfile Yazmaq
Layihənin root qovluğunda Dockerfile adlı fayl yarat (genişlənməsiz!):
dockerfile# ---------- Build stage ---------- FROM node:20-alpine AS builder WORKDIR /app COPY package.json package-lock.json ./ RUN npm ci COPY . . # Next.js standalone output aktiv edirik RUN npm run build # ---------- Production stage ---------- FROM node:20-alpine AS runner WORKDIR /app ENV NODE_ENV=production ENV PORT=3000 # Təhlükəsizlik: root istifadəçi ilə çalışmırıq RUN addgroup --system --gid 1001 nodejs RUN adduser --system --uid 1001 nextjs COPY /app/public ./public COPY /app/.next/standalone ./ COPY /app/.next/static ./.next/static USER nextjs EXPOSE 3000 CMD ["node", "server.js"]
Bu niyə belədir? Multi-stage build istifadə edirik. Birinci stage-də layihəni build edirik, ikinci stage-də isə yalnız lazımi faylları götürürük. Nəticə: image ölçüsü ~150MB olur, sadə yanaşmada isə 1.2GB+ olardı. Fərqi hiss edirsən?
Addım 2: next.config.js-i Yeniləmək
Standalone output aktiv etmək üçün next.config.mjs faylını aç və bunu əlavə et:
javascript/** @type {import('next').NextConfig} */ const nextConfig = { output: 'standalone', }; export default nextConfig;
Bu bir sətir əlavə Next.js-ə deyir ki, production üçün minimal, öz-özünə işləyən server yarasın. Docker üçün ideal variant budur.
Addım 3: .dockerignore Faylı
Layihə root-unda .dockerignore faylı yarat:
node_modules
.next
.git
.gitignore
README.md
Dockerfile
docker-compose.yml
.env.local
Bu fayl olmasa Docker bütün node_modules qovluğunu context-ə əlavə edəcək və build 3-5 dəqiqə əvəzinə 15-20 dəqiqə çəkəcək. Vaxtın qiymətlidir.
Addım 4: Build və Run
İndi əsl sehri görəcəyik. Terminalda:
bash# Image-i build et docker build -t my-nextjs-app . # Container-i işə sal docker run -p 3000:3000 my-nextjs-app
Brauzerini aç, http://localhost:3000 — təbrik edirəm, Next.js app-ın Docker container içində işləyir! 🎉
Faydalı əmrlər:
bash# Bütün containerləri gör docker ps # Container-i dayandır docker stop <container_id> # Image ölçüsünü yoxla docker images my-nextjs-app
Addım 5: docker-compose ilə Professional Setup
Real layihələrdə adətən database, Redis və başqa servislər də olur. docker-compose.yml yaradaq:
yamlversion: '3.8' services: app: build: context: . dockerfile: Dockerfile ports: - "3000:3000" environment: - DATABASE_URL=postgresql://user:password@db:5432/mydb depends_on: - db restart: unless-stopped db: image: postgres:16-alpine environment: POSTGRES_USER: user POSTGRES_PASSWORD: password POSTGRES_DB: mydb volumes: - postgres_data:/var/lib/postgresql/data ports: - "5432:5432" volumes: postgres_data:
Bir əmrlə hər şeyi qaldır:
bashdocker compose up -d
Bu əmr həm Next.js app-ını, həm də PostgreSQL database-ini eyni anda qaldıracaq. Artıq lokal maşınında tam production mühiti var.
Production Deploy: Hara?
Container hazırdır, amma hara deploy edəcəyik? Azərbaycandan ən rahat variantlar:
| Platform | Aylıq Qiymət | Qeyd |
|---|---|---|
| DigitalOcean App Platform | ~$5-12 | Ən sadə, Dockerfile-ı tanıyır |
| Railway | ~$5-20 | Git push ilə auto-deploy |
| AWS EC2 (Frankfurt region) | ~$8-15 | Bakıya ən yaxın AWS region |
| Hetzner | €4-8 | Qiymət/performans kralı |
Bakıdan latency baxımından Frankfurt və ya İstanbul regionları ən yaxşı nəticə verir (~30-50ms).
Bonus: Optimization Tips
- Layer caching:
package.json-u ayrıca COPY et — dependency dəyişməyibsə, cache-dən gələcək - Alpine image:
node:20-alpineistifadə et,node:20-dən 3x kiçikdir - Health check əlavə et:
dockerfileHEALTHCHECK \ CMD wget --no-verbose --tries=1 --spider http://localhost:3000/ || exit 1
- Environment variable-ları build time-da deyil, runtime-da ver — daha təhlükəsizdir
Son Söz
Docker öyrənmək çətin deyil — sadəcə başlamaq lazımdır. Bu məqalədəki addımları tətbiq etsən, CV-nə əsl Docker təcrübəsi yaza bilərsən, interview-da konkret danışa bilərsən.
Sabahkı müsahibədə "Docker istifadə etmisən?" sualına artıq belə cavab verəcəksən: "Bəli, multi-stage build ilə Next.js standalone output containerize edib, docker-compose ilə PostgreSQL-lə birlikdə deploy etmişəm." Recruiter-in üzündəki ifadəni təsəvvür edə bilərsən. 😎
Sualın varsa, kommentlərdə yaz — hər birinə cavab verəcəyəm.
Kod yazmağa davam! 🚀
Baku Stack — Azərbaycanın developer community-si üçün yazılır, developerlar tərəfindən yazılır.
Oxşar məqalələr
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.
Docker ilə Next.js App Deployment — Addım-Addım Bələdçi
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ə.
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.