Creare un'applicazione moderna che include un server web, un'applicazione backend, e un database, richiede di coordinare diversi componenti software in modo efficace. Docker Compose è uno strumento che semplifica il processo di definizione e gestione di applicazioni multi-container Docker. In questo articolo, esploreremo come configurare un'applicazione che utilizza Nginx come reverse proxy per un'applicazione Node.js, con MySQL come database backend.
Panoramica dell'Architettura
La nostra applicazione sarà composta da tre servizi principali:
- MySQL: il database che memorizza i dati dell'applicazione.
- Node.js: l'applicazione backend che interagisce con il database.
- Nginx: il server web che funge da reverse proxy per l'applicazione Node.js, migliorando la sicurezza e le prestazioni.
Passo 1: Preparazione del Progetto
Crea una nuova directory per il progetto e al suo interno crea le seguenti sotto-directory e file:
db
: una directory per eventuali script di inizializzazione di MySQL.app
: una directory per il codice sorgente dell'applicazione Node.js.nginx
: una directory per la configurazione di Nginx.docker-compose.yml
: il file di configurazione Docker Compose.
Passo 2: Configurazione di Docker Compose
Il file docker-compose.yml
definisce i servizi, le reti e i volumi che compongono l'applicazione. Ecco un esempio di come potrebbe essere configurato:
version: '3.8'
services:
db:
image: mysql:5.7
volumes:
- db-data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: example
MYSQL_DATABASE: mydatabase
networks:
- app-network
app:
build: ./app
depends_on:
- db
environment:
DB_HOST: db
DB_USER: root
DB_PASSWORD: example
DB_NAME: mydatabase
networks:
- app-network
nginx:
image: nginx:latest
ports:
- "80:80"
volumes:
- ./nginx:/etc/nginx/conf.d
depends_on:
- app
networks:
- app-network
volumes:
db-data:
networks:
app-network:
driver: bridge
Passo 3: Configurazione dell'App Node.js
Nella directory app
, crea un semplice server Node.js che si connette a MySQL e risponde alle richieste HTTP. Usa il modulo express
per il server e mysql
per connetterti a MySQL.
Passo 4: Configurazione di Nginx
Nella directory nginx
, crea un file di configurazione per Nginx, default.conf
, che configura Nginx come reverse proxy per l'applicazione Node.js. Il file dovrà indirizzare le richieste al servizio app
.
Passo 5: Costruzione e Avvio dell'Applicazione
Dopo aver configurato tutti i componenti, puoi costruire e avviare l'applicazione con Docker Compose eseguendo:
docker-compose up --build
Questo comando costruirà l'immagine dell'applicazione Node.js, scaricherà le immagini di MySQL e Nginx se non sono già presenti, e avvierà i container. I servizi saranno ora accessibili: Nginx ascolterà sulla porta 80 del tuo host, facendo da reverse proxy all'applicazione Node.js, che a sua volta interagisce con il database MySQL.
Conclusione
Hai creato con successo un'applicazione multi-container con Docker Compose, che include un server Node.js, un database MySQL e Nginx come reverse proxy. Questa configurazione offre un solido punto di partenza per sviluppare applicazioni robuste e scalabili.