eduardweb.
Docker & ContainersÎncepător#docker#nextjs#devops#redis#postgres

Docker Compose curat pentru Next.js, Postgres și Redis (fără node-modules lent)

De Cristian Barbu, 1 iul. 2026 · 17 vizualizări · 2 like-uri

Postat 1 iul. 2026
yaml
version: '3.8'

services:
  db:
    image: postgres:15-alpine
    container_name: nextjs-db
    environment:
      POSTGRES_USER: dev_user
      POSTGRES_PASSWORD: dev_password
      POSTGRES_DB: dev_db
    ports:
      - "5432:5432"
    volumes:
      - pgdata:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U dev_user -d dev_db"]
      interval: 5s
      timeout: 5s
      retries: 5

  redis:
    image: redis:7-alpine
    container_name: nextjs-redis
    ports:
      - "6379:6379"

  web:
    build:
      context: .
      dockerfile: Dockerfile.dev
    container_name: nextjs-web
    ports:
      - "3000:3000"
    volumes:
      - .:/app
      - /app/node_modules
      - /app/.next
    environment:
      DATABASE_URL: postgres://dev_user:dev_password@db:5432/dev_db
      REDIS_URL: redis://redis:6379
    depends_on:
      db:
        condition: service_healthy
      redis:
        condition: service_started

volumes:
  pgdata:

Salutare! Am văzut prea multe proiecte unde setup-ul local e un coșmar de scripturi bash și instrucțiuni de trei pagini în README. Astăzi vă arăt cum configurez eu un mediu local curat cu Docker Compose pentru Next.js, PostgreSQL și Redis, fără bătăi de cap și cu timpi de pornire instantanei.

De ce ne complicăm cu Docker pe local?

Am trecut prin faza în care instalam Postgres direct pe macOS, apoi aveam nevoie de versiunea 14 pentru un client și 16 pentru altul. Un haos total. Docker Compose rezolvă asta elegant. Totuși, marea problemă la Next.js în Docker este viteza de rebuild (hot-reload). Dacă montezi tot folderul orbește, Docker va încerca să sincronizeze node_modules între container și mașina gazdă. Pe Windows sau macOS, asta înseamnă că build-ul va fi incredibil de lent. Am pățit asta la un proiect cu peste 50 de pagini unde un simplu save dura 8 secunde să se vadă în browser.

Soluția? Folosim un volum anonim pentru node_modules. Îi spunem practic lui Docker: „Păstrează modulele de Node în interiorul containerului, nu le aduce pe mașina mea”.

Configurația de la care pornesc mereu

Mai jos aveți un docker-compose.yml pe care l-am rafinat în ultimii doi ani. L-am folosit recent la un startup unde am redus timpul de onboarding pentru un dev nou de la o zi întreagă la doar 5 minute. Dai docker compose up și totul funcționează.

Observați secțiunea de healthcheck pentru baza de date. Next.js are prostul obicei să crape la pornire dacă baza de date nu este complet gata să accepte conexiuni. Cu depends_on configurat corect, containerul de Next.js va aștepta cu răbdare ca Postgres să fie activ.

Compromisul de care trebuie să fii conștient

Merge excelent pentru izolare și onboarding rapid, dar există un trade-off sincer. Dacă folosești un MacBook cu procesor Intel sau un laptop Windows mai vechi, virtualizarea Docker va consuma destul de multe resurse. Pe Apple Silicon (M1/M2/M3) treaba se mișcă brici, dar pe hardware mai vechi s-ar putea să simți o încetinire.

În plus, debugging-ul (breakpoints în VS Code) devine puțin mai greoi când codul rulează în container. De aceea, la proiectele mari, uneori prefer să rulez doar Postgres și Redis în Docker, iar Next.js să îl rulez nativ pe mașina mea cu npm run dev, legat la porturile expuse de containere.

Voi cum procedați? Rulați aplicația de Node/Next direct pe sistemul gazdă sau preferați să aveți absolut totul izolat în Docker Compose?

Răspunsuri 0

Se încarcă răspunsurile…

Loghează-te pentru a răspunde

Doar membrii comunității pot lăsa comentarii.