Close

Via Don Minzoni, 59 - 73025 - Martano (LE)

Local development environment with Docker
Software Engineering

Come Configurare un Ambiente di Sviluppo Locale con Docker

By, effelavio
  • 23 Ott, 2024
  • 88 Views
  • 0 Comment

Nel moderno sviluppo software, disporre di un ambiente di sviluppo locale efficiente e replicabile è fondamentale per la produttività. Docker è lo strumento ideale per raggiungere questo obiettivo, permettendo agli sviluppatori di gestire con facilità ambienti multi-container.
In questo articolo ti guideremo nella creazione di un ambiente di sviluppo composto da PostgreSQL 15, Next.js 13 e un server WebSocket, il tutto gestito tramite Docker Compose.

_Perché Usare Docker?

Docker ti consente di eseguire applicazioni in ambienti isolati chiamati container, che includono tutto il necessario per l’esecuzione: dal codice e le librerie alle variabili d’ambiente. Questo garantisce che il tuo ambiente di sviluppo locale sia identico a quello di produzione, eliminando i problemi legati alle differenze di configurazione tra sistemi diversi.

Principali Vantaggi:

  • Coerenza: Lo stesso ambiente su tutte le macchine.
  • Isolamento: Nessun conflitto di dipendenze tra progetti.
  • Scalabilità: Gestione semplice di microservizi e applicazioni complesse.
Local development environment with Docker
Computer monitor with world map on screen at night. 3d rendering

1. Setting up the development environment with Docker Compose

Useremo Docker Compose per orchestrare un ambiente che include PostgreSQL per il database, Next.js per il front-end e un server WebSocket per la comunicazione in tempo reale.

Creare il file docker-compose.yml

Il file docker-compose.yml è il cuore della nostra configurazione. IDefinisce i servizi per il database, il front-end e il server WebSocket. Di seguito è riportata la configurazione aggiornata con PostgreSQL 15 e Next.js 13.

version: '3.8'

services:
  db:
    image: postgres:15
    container_name: postgres_db
    environment:
      POSTGRES_USER: example_user
      POSTGRES_PASSWORD: example_pass
      POSTGRES_DB: example_db
    volumes:
      - pgdata:/var/lib/postgresql/data
    ports:
      - "5432:5432"
      
  nextjs:
    image: node:18
    container_name: nextjs_app
    volumes:
      - .:/app
    working_dir: /app
    command: sh -c "npm install && npm run dev"
    ports:
      - "3000:3000"
    depends_on:
      - db
    environment:
      DATABASE_URL: postgres://example_user:example_pass@db:5432/example_db

  websocket:
    build: .
    command: node websocket-server.js
    ports:
      - "8080:8080"

volumes:
  pgdata:

Spiegazione:

  • Il servizio db utilizza PostgreSQL 15, l’ultima versione stabile. Le credenziali del database sono configurate tramite variabili d’ambiente.
  • Il servizio nextjs si basa su Node.js 18 e monta il codice sorgente locale nella directory /app all’interno del container. Utilizza Next.js 13, che introduce nuove funzionalità come layout annidati e miglioramenti al rendering lato server.
  • Il servizio websocket è un semplice server Node.js che utilizza WebSocket per gestire la comunicazione in tempo reale.

2. Creare il Server WebSocket

Un elemento chiave delle applicazioni moderne è la comunicazione in tempo reale, spesso gestita tramite WebSocket. Vediamo come configurare un server WebSocket per comunicare con il front-end.

Configurazione del server WebSocket:

1. Crea il file websocket-server.js nella directory del progetto:

const WebSocket = require('ws');

const wss = new WebSocket.Server({ port: 8080 });

wss.on('connection', (ws) => {
  console.log('New client connected');

  ws.on('message', (message) => {
    console.log(`Received message: ${message}`);
    ws.send('Response from WebSocket server');
  });

  ws.send('Welcome to the WebSocket server!');
});

2. Aggiorna il Dockerfile per il servizio WebSocket:

Se il tuo progetto non ha un Dockerfile, aggiungine uno per il server WebSocket:

FROM node:18

WORKDIR /app

COPY . .

RUN npm install

CMD ["node", "websocket-server.js"]

Questa configurazione avvia un semplice server WebSocket che risponde a ogni messaggio inviato da un client.

Local development environment with Docker

3. Configurare Next.js per Utilizzare i WebSocket

Dopo aver configurato il server WebSocket, possiamo collegare il client Next.js per comunicare con esso.

Aggiungi la connessione WebSocket in una pagina di Next.js:
Apri un file in Next.js (e.g., pages/index.js) e aggiungi il seguente codice per connetterti al server WebSocket:

import { useEffect } from 'react';

export default function Home() {
  useEffect(() => {
    const ws = new WebSocket('ws://localhost:8080');
    
    ws.onopen = () => {
      console.log('Connected to WebSocket server');
      ws.send('Hello, server!');
    };

    ws.onmessage = (event) => {
      console.log('Message from server:', event.data);
    };

    return () => ws.close();
  }, []);

  return <div>Welcome to the WebSocket system with Next.js!</div>;
}

Questo esempio stabilisce una connessione WebSocket con il server sulla porta 8080 e gestisce la ricezione dei messaggi provenienti dal server.

4. Avviare l’Ambiente di Sviluppo

Una volta configurati tutti i file necessari, puoi avviare l’ambiente di sviluppo con Docker usando il seguente comando:

docker-compose up

Questo comando avvierà tutti i container definiti nel file docker-compose.yml file. Dopo l’avvio:

  • L’app Next.js sarà accessibile all’indirizzo http://localhost:3000.
  • Il server WebSocket sarà in listening su ws://localhost:8080.
  • PostgreSQL sarà in esecuzione sulla porta predefinita 5432.

_Conclusione

Con Docker e Docker Compose, creare un ambiente di sviluppo locale con servizi complessi come un database, un’app Next.js e un server WebSocket diventa un processo semplice e scalabile.
Le versioni aggiornate di PostgreSQL 15 e Next.js 13 offrono funzionalità avanzate che migliorano l’efficienza e la produttività.

Docker garantisce coerenza tra ambiente di sviluppo e produzione, riducendo i problemi di compatibilità e accelerando il flusso di lavoro. Se hai bisogno di supporto nella configurazione o nell’ottimizzazione del tuo ambiente di sviluppo, Fyonda è qui per offrirti soluzioni su misura. Non vediamo l’ora di sentirti!