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.
Sì, avete letto bene: due volte. Perché quando decido di complicarmi la vita, lo faccio con una certa eleganza: passare a una tastiera meccanica split con layout americano mentre costruisco un workflow da tastiera con Linux e Neovim. Prima mossa geniale: passare a una tastiera meccanica split, quelle divise in due metà che ti fanno […]
Ore 3 di mattina. Gli occhi si aprono nel buio. Non riprenderò più sonno, lo so. La sveglia è programmata per le 5, ma ormai sono sveglia. Perché una sveglia così presto di sabato? Per prendere un autobus alle 7 e partecipare al Google Development Group di Catania! Quando arrivo in stazione, ancora assonnata, i […]