Frontend React ottimizzato, backend Node.js e MongoDB Atlas - il passo successivo
Dal Single Container all'Architettura Reale
Nel primo articolo abbiamo deployato una semplice app Node.js single-container. Ora affrontiamo il caso reale: un'applicazione completa Goals App con frontend React, backend Express API e database MongoDB.
L'architettura finale sarà:
Il Codice Reale: Goals App
L'applicazione è una semplice todo list dove puoi aggiungere e cancellare obiettivi. Il backend espone API REST:
# Su ECS, environment variables del task definition
MONGODB_USERNAME=your_db_user
MONGODB_PASSWORD=your-secure-password
MONGODB_URL=cluster0.xyz123.mongodb.net # Atlas cluster
MONGODB_NAME=goals
Code language:PHP(php)
Frontend URL - Il Problema React
Il frontend deve chiamare il backend, ma l'URL cambia tra sviluppo e produzione. React ha una peculiarità: gira nel browser, non nel container, quindi le environment variables Docker non funzionano.
# frontend/Dockerfile - Per sviluppo
FROM node
WORKDIR /app
COPY package.json .
RUN npm install
COPY . .
EXPOSE 3000
CMD [ "npm", "start" ]
Code language:PHP(php)
Production - Ottimizzato
# frontend/Dockerfile.prod - Per produzione
FROM node:14-alpine as build
WORKDIR /app
COPY package.json .
RUN npm install
COPY . .
RUN npm run build
# Ci serve node solo per servire i file statici# Ogni istruzione FROM crea un nuovo stage di build
FROM nginx:stable-alpine
# vogliamo usare i file ottimizzati e servirli con nginx
COPY --from=build /app/build /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
Code language:PHP(php)
Risultato del build:
npm run build compila JSX → JavaScript
Minifica CSS e JS
Ottimizza immagini
Crea cartella /build con static files
Task Definitions Reali: Il Cuore dell'Architettura
Perché Servizi ECS Separati
Il punto cruciale: entrambi i container usano porta 80. In ECS, due container nella stessa task non possono mappare la stessa porta host. Soluzione: servizi ECS separati, ciascuno con la propria task definition.
Multi-stage build è obbligatorio per frontend moderni
Environment variables richiedono strategie diverse per React vs Node.js
Servizi ECS separati sono necessari per port conflicts
URL stabili via load balancer eliminano problemi di IP dinamici
Il prossimo step: CI/CD pipeline per automatizzare completamente build e deploy.
Gli screenshot e i dettagli tecnici sono tratti dai miei appunti del corso "Docker & Kubernetes: The Practical Guide" di Maximilian Schwarzmüller su Udemy - un corso che consiglio vivamente a chiunque voglia andare oltre i tutorial base di Docker e capire davvero come funziona in scenari reali.
Perché Rust Sono una principiante assoluta in Rust. Ho deciso di imparare questo linguaggio seguendo il bootcamp di Francesco Ciulla, diviso in due parti: le basi del linguaggio e la costruzione di un vero gioco. Questo post racconta la mia esperienza e i concetti che mi hanno colpita di più. Parte 1: Le Fondamenta di […]
Don't Panic - Il Momento Magico: Quando il Tuo Container Docker Vive su Internet Come Douglas Adams insegnava, l'universo è un posto vasto e complicato. E se pensi che il deploy di un'applicazione sia confuso, aspetta di vedere cosa succede quando una balena piena di container decide di "cadere" dal tuo localhost direttamente su AWS. […]