Un'applicazione Angular pronta per il deployment su OpenShift utilizzando immagini container certificate Red Hat.
- Angular 17+ con TypeScript e architettura standalone
- Container multi-stage con immagini Red Hat UBI9 certificate
- Nginx ottimizzato per applicazioni SPA (configurazione in
nginx/) - Configurazioni OpenShift complete (Deployment, Service, Route, BuildConfig)
- Security best practices con utente non-root e security context
- Health checks configurati per liveness e readiness probe
- TLS termination configurata per traffico HTTPS
- Build Stage:
registry.access.redhat.com/ubi9/nodejs-20(pinnare la patch versione) - Runtime Stage:
registry.access.redhat.com/ubi9/nginx-124(pinnare la patch versione)
- Deployment: Gestione dei pod con 2 repliche
- Service: Esposizione interna sulla porta 8080
- Route: Esposizione esterna con TLS edge termination
- BuildConfig: Build automatico da repository Git
- ImageStream: Gestione delle immagini container
- Node.js 18+
- npm o yarn
- Docker (per build locale)
- OpenShift CLI (oc)
# Installa le dipendenze
npm install
# Avvia il server di sviluppo
npm start
# Build per produzione
npm run build:prod# Build dell'immagine
npm run docker:build
# Run locale del container
npm run docker:runoc login <your-openshift-cluster>
oc new-project angular-app# Applica tutte le configurazioni
oc apply -f openshift/
# Verifica la creazione delle risorse
oc get all -l app=angular-openshift-appAggiorna il BuildConfig con il tuo repository Git:
oc patch bc/angular-openshift-app-build -p '{"spec":{"source":{"git":{"uri":"https://github.com/your-username/your-repo.git"}}}}'# Build manuale
oc start-build angular-openshift-app-build --follow
# Webhook per build automatico
oc describe bc/angular-openshift-app-build | grep -A5 webhook# Controlla i pod
oc get pods -l app=angular-openshift-app
# Verifica i log
oc logs -l app=angular-openshift-app -f
# Ottieni l'URL dell'applicazione
oc get route angular-openshift-app-routeβββ src/
β βββ app/
β β βββ components/
β β β βββ home/
β β β βββ about/
β β βββ app.component.ts
β β βββ app.config.ts
β β βββ app.routes.ts
β βββ assets/
β βββ index.html
β βββ main.ts
β βββ styles.scss
βββ openshift/
β βββ deployment.yaml
β βββ service.yaml
β βββ route.yaml
β βββ buildconfig.yaml
β βββ imagestream.yaml
βββ Dockerfile
βββ nginx.conf
βββ package.json
βββ angular.json
I file di configurazione Nginx sono presenti nella cartella nginx/ e sono ottimizzati per:
- Serving di applicazioni SPA
- Compressione gzip
- Security headers
- Cache delle risorse statiche
- Health check endpoint
In particolare:
nginx/nginx.confcontiene la configurazione principale (log JSON per stdout/stderr)nginx/default.confcontiene il server block (routing SPA, /health, caching)nginx/generate-config.shcrea dinamicamente/opt/app-root/src/assets/config.jsonal runtime usando le environment variables fornite dal pod
Esempio di runtime config generation:
# alla partenza del container lo script `generate-config.sh` legge le env e scrive
/opt/app-root/src/assets/config.json- Container eseguito come utente non-root (UID 1001)
- Security context configurato
- Capabilities ridotte al minimo
- Network policies compatibili
resources:
limits:
cpu: 500m
memory: 512Mi
requests:
cpu: 100m
memory: 128MiL'applicazione espone un endpoint di health check:
- URL:
/health - Response:
200 OKcon bodyhealthy - Uso: Liveness e readiness probe di OpenShift
- Immagini Red Hat certificate e supportate
- Scansione vulnerabilitΓ automatica
- Utente non privilegiato
- Filesystem read-only quando possibile
- TLS termination a livello di route
- Security headers configurati
- CORS policies per API esterne
# Logs applicazione
oc logs -l app=angular-openshift-app -f
# Logs specifico pod
oc logs <pod-name> -fOpenShift fornisce automaticamente:
- CPU e memoria usage
- Network traffic
- Response times
- Error rates
# Scale a 3 repliche
oc scale deployment/angular-openshift-app --replicas=3apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: angular-openshift-app-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: angular-openshift-app
minReplicas: 2
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 70Il BuildConfig Γ¨ configurato per trigger automatici su:
- Push al repository Git
- Webhook GitHub/GitLab
- Cambiamenti alla base image
# Setup webhook
oc set triggers bc/angular-openshift-app-build --from-github
# Deploy pipeline
oc create -f pipeline/tekton-pipeline.yaml- OpenShift Documentation
- Red Hat Container Catalog
- Angular Documentation
- Container Security Best Practices
- Fork del progetto
- Crea un feature branch (
git checkout -b feature/amazing-feature) - Commit delle modifiche (
git commit -m 'Add amazing feature') - Push al branch (
git push origin feature/amazing-feature) - Apri una Pull Request
Questo progetto Γ¨ sotto licenza MIT. Vedi il file LICENSE per i dettagli.