Files
primefaces-freya-extension/DEPLOYMENT.md

6.6 KiB

Guide de Déploiement

Ce guide explique comment déployer PrimeFaces Freya Extension en production.

📦 Build de Production

1. Compiler le projet

# Nettoyer et compiler
mvn clean install

# Compiler sans les tests (plus rapide)
mvn clean install -DskipTests

# Compiler avec profil de production
mvn clean install -Pproduction

2. Vérifier les artefacts

Les artefacts sont générés dans :

runtime/target/primefaces-freya-extension-runtime-1.0.0-SNAPSHOT.jar
integration-tests/target/primefaces-freya-extension-integration-tests-1.0.0-SNAPSHOT.jar

🚀 Déploiement sur différentes plateformes

Quarkus en mode JVM

cd integration-tests

# Build
mvn clean package

# Lancer
java -jar target/quarkus-app/quarkus-run.jar

Quarkus en mode natif

cd integration-tests

# Build natif (nécessite GraalVM)
mvn clean package -Pnative

# Lancer
./target/primefaces-freya-extension-integration-tests-1.0.0-SNAPSHOT-runner

Docker

Créer l'image Docker

cd integration-tests

# Build avec Docker
mvn clean package -Dquarkus.container-image.build=true

# Ou utiliser le Dockerfile
docker build -f src/main/docker/Dockerfile.jvm -t primefaces-freya-extension:latest .

Lancer le conteneur

docker run -i --rm -p 8080:8080 primefaces-freya-extension:latest

Docker Compose

version: '3.8'

services:
  app:
    image: primefaces-freya-extension:latest
    ports:
      - "8080:8080"
    environment:
      - QUARKUS_PROFILE=prod
      - QUARKUS_HTTP_PORT=8080
    restart: unless-stopped

Kubernetes

Deployment YAML

apiVersion: apps/v1
kind: Deployment
metadata:
  name: primefaces-freya-extension
spec:
  replicas: 3
  selector:
    matchLabels:
      app: primefaces-freya-extension
  template:
    metadata:
      labels:
        app: primefaces-freya-extension
    spec:
      containers:
      - name: app
        image: primefaces-freya-extension:latest
        ports:
        - containerPort: 8080
        env:
        - name: QUARKUS_PROFILE
          value: "prod"
        resources:
          requests:
            memory: "256Mi"
            cpu: "250m"
          limits:
            memory: "512Mi"
            cpu: "500m"
---
apiVersion: v1
kind: Service
metadata:
  name: primefaces-freya-extension
spec:
  selector:
    app: primefaces-freya-extension
  ports:
  - port: 80
    targetPort: 8080
  type: LoadBalancer

Serveur d'applications (WildFly, Tomcat, etc.)

# Build WAR
mvn clean package -Dquarkus.package.type=legacy-jar

# Déployer sur WildFly
cp target/*.war $WILDFLY_HOME/standalone/deployments/

# Déployer sur Tomcat
cp target/*.war $TOMCAT_HOME/webapps/

⚙️ Configuration de Production

application.properties (Production)

# Mode production
quarkus.faces.project-stage=Production
quarkus.faces.state-saving-method=server

# Logging
quarkus.log.level=INFO
quarkus.log.console.enable=true
quarkus.log.console.format=%d{HH:mm:ss} %-5p [%c{2.}] (%t) %s%e%n

# HTTP
quarkus.http.port=8080
quarkus.http.host=0.0.0.0
quarkus.http.cors=true

# PrimeFaces
primefaces.THEME=freya
primefaces.FONT_AWESOME=true
primefaces.CLIENT_SIDE_VALIDATION=true
primefaces.MOVE_SCRIPTS_TO_BOTTOM=true
primefaces.SUBMIT=partial
primefaces.UPLOADER=auto

# Cache
quarkus.http.enable-compression=true
quarkus.http.compress-media-types=text/html,text/css,application/javascript

# Security (si applicable)
quarkus.http.ssl.certificate.file=/path/to/certificate.crt
quarkus.http.ssl.certificate.key-file=/path/to/private.key

🔒 Sécurité

1. HTTPS

Toujours utiliser HTTPS en production :

quarkus.http.ssl-port=8443
quarkus.http.insecure-requests=redirect

2. Headers de sécurité

quarkus.http.header."X-Frame-Options".value=DENY
quarkus.http.header."X-Content-Type-Options".value=nosniff
quarkus.http.header."X-XSS-Protection".value=1; mode=block
quarkus.http.header."Strict-Transport-Security".value=max-age=31536000; includeSubDomains

3. CSP (Content Security Policy)

quarkus.http.header."Content-Security-Policy".value=default-src 'self'; script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline'

📊 Monitoring

Health Checks

quarkus.smallrye-health.root-path=/health

Endpoints disponibles :

  • /health - Health check global
  • /health/live - Liveness probe
  • /health/ready - Readiness probe

Metrics

quarkus.micrometer.enabled=true
quarkus.micrometer.export.prometheus.enabled=true

Endpoint : /metrics

🔧 Optimisations

1. Minification des ressources

primefaces.MOVE_SCRIPTS_TO_BOTTOM=true
primefaces.SUBMIT=partial

2. Compression

quarkus.http.enable-compression=true

3. Cache

<!-- Dans web.xml -->
<context-param>
    <param-name>javax.faces.FACELETS_REFRESH_PERIOD</param-name>
    <param-value>-1</param-value>
</context-param>

📈 Performance

Recommandations JVM

java -Xms256m -Xmx512m \
     -XX:+UseG1GC \
     -XX:MaxGCPauseMillis=200 \
     -jar target/quarkus-app/quarkus-run.jar

Mode natif (meilleure performance)

# Build natif
mvn clean package -Pnative

# Temps de démarrage : ~0.05s
# Mémoire : ~50MB

🌐 Reverse Proxy (Nginx)

server {
    listen 80;
    server_name example.com;
    
    location / {
        proxy_pass http://localhost:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

📝 Checklist de déploiement

  • Tests passent (mvn test)
  • Build réussit (mvn clean install)
  • Configuration de production validée
  • HTTPS configuré
  • Headers de sécurité configurés
  • Health checks fonctionnels
  • Logs configurés
  • Monitoring en place
  • Backup configuré
  • Documentation à jour

🆘 Dépannage

Problème : Application ne démarre pas

# Vérifier les logs
tail -f logs/application.log

# Vérifier le port
netstat -an | grep 8080

Problème : Ressources non chargées

Vérifier que les ressources Freya sont accessibles :

  • /resources/freya-layout/css/layout-light.css
  • /resources/freya-layout/css/primeicons.css

Problème : Performance lente

  1. Activer la compression
  2. Utiliser le mode natif
  3. Augmenter la mémoire JVM
  4. Vérifier les requêtes N+1

📧 Support

Pour toute question sur le déploiement :