Aller au contenu

Vérifier

Exécutez ces vérifications après avoir attendu 5 à 10 minutes que cloud-init se termine.

Fenêtre de terminal
ORIGIN_IP=$(terraform output -raw public_ip)
curl -sf "http://${ORIGIN_IP}/health" | jq .

Résultat attendu :

{
"status": "healthy",
"component": "origin-server",
"applications": ["juice-shop", "dvwa", "vampi", "httpbin", "whoami", "csd-demo", "dvga", "restaurant", "crapi"]
}
Fenêtre de terminal
# Page d'accueil par défaut
curl -sf "http://${ORIGIN_IP}/" -o /dev/null -w "Landing: %{http_code}\n"
# Juice Shop
curl -sf "http://${ORIGIN_IP}/juice-shop/" -o /dev/null -w "Juice Shop: %{http_code}\n"
# DVWA
curl -sf "http://${ORIGIN_IP}/dvwa/" -o /dev/null -w "DVWA: %{http_code}\n"
# VAmPI
curl -sf "http://${ORIGIN_IP}/vampi/" -o /dev/null -w "VAmPI: %{http_code}\n"
# httpbin
curl -sf "http://${ORIGIN_IP}/httpbin/get" -o /dev/null -w "httpbin: %{http_code}\n"
# whoami
curl -sf "http://${ORIGIN_IP}/whoami/" -o /dev/null -w "whoami: %{http_code}\n"
# DVGA
curl -sf "http://${ORIGIN_IP}/dvga/" -o /dev/null -w "DVGA: %{http_code}\n"
# RESTaurant
curl -sf "http://${ORIGIN_IP}/restaurant/docs" -o /dev/null -w "RESTaurant: %{http_code}\n"
# crAPI (port 8888)
curl -sf "http://${ORIGIN_IP}:8888" -o /dev/null -w "crAPI: %{http_code}\n"

Tous devraient retourner 200 (DVWA retourne une redirection 302 vers la page de connexion).

Le dépôt inclut une suite de tests smoke en 39 points :

Fenêtre de terminal
./tests/smoke-test.sh ${ORIGIN_IP}

Cette suite valide les 9 applications, les points de terminaison de santé, l’inscription/connexion VAmPI, le cycle d’exfiltration CSD Demo, DVGA GraphQL, RESTaurant Swagger, crAPI sur le port 8888, la compression gzip nginx et le masquage de version.

Connectez-vous en SSH à la VM et vérifiez que les 41 conteneurs sont en cours d’exécution :

Fenêtre de terminal
ssh azureuser@${ORIGIN_IP} "sudo docker ps --format 'table {{.Names}}\t{{.Status}}\t{{.Ports}}'" | sort

Résultat attendu (41 conteneurs) :

NAMES STATUS PORTS
crapi-community Up X minutes
crapi-identity Up X minutes
crapi-mailhog Up X minutes 0.0.0.0:18025->8025/tcp
crapi-mongo Up X minutes 27017/tcp
crapi-postgres Up X minutes 5432/tcp
crapi-web Up X minutes 0.0.0.0:8888->80/tcp
crapi-workshop Up X minutes
csd-demo-1 Up X minutes 127.0.0.1:5001->5001/tcp
csd-demo-2 Up X minutes 127.0.0.1:5002->5001/tcp
csd-demo-3 Up X minutes 127.0.0.1:5003->5001/tcp
csd-demo-4 Up X minutes 127.0.0.1:5004->5001/tcp
dvga-1 Up X minutes 127.0.0.1:5201->5013/tcp
dvga-2 Up X minutes 127.0.0.1:5202->5013/tcp
dvga-3 Up X minutes 127.0.0.1:5203->5013/tcp
dvga-4 Up X minutes 127.0.0.1:5204->5013/tcp
dvwa-1 Up X minutes 127.0.0.1:8101->80/tcp
dvwa-2 Up X minutes 127.0.0.1:8102->80/tcp
dvwa-3 Up X minutes 127.0.0.1:8103->80/tcp
dvwa-4 Up X minutes 127.0.0.1:8104->80/tcp
dvwa-db Up X minutes 3306/tcp
httpbin-1 Up X minutes 127.0.0.1:8201->80/tcp
httpbin-2 Up X minutes 127.0.0.1:8202->80/tcp
httpbin-3 Up X minutes 127.0.0.1:8203->80/tcp
httpbin-4 Up X minutes 127.0.0.1:8204->80/tcp
juice-shop-1 Up X minutes 127.0.0.1:3001->3000/tcp
juice-shop-2 Up X minutes 127.0.0.1:3002->3000/tcp
juice-shop-3 Up X minutes 127.0.0.1:3003->3000/tcp
juice-shop-4 Up X minutes 127.0.0.1:3004->3000/tcp
restaurant-1 Up X minutes 127.0.0.1:8301->8080/tcp
restaurant-2 Up X minutes 127.0.0.1:8302->8080/tcp
restaurant-3 Up X minutes 127.0.0.1:8303->8080/tcp
restaurant-4 Up X minutes 127.0.0.1:8304->8080/tcp
restaurant-db Up X minutes 5432/tcp
vampi-1 Up X minutes 127.0.0.1:5101->5000/tcp
vampi-2 Up X minutes 127.0.0.1:5102->5000/tcp
vampi-3 Up X minutes 127.0.0.1:5103->5000/tcp
vampi-4 Up X minutes 127.0.0.1:5104->5000/tcp
whoami-1 Up X minutes 127.0.0.1:8082->80/tcp
whoami-2 Up X minutes 127.0.0.1:8083->80/tcp
whoami-3 Up X minutes 127.0.0.1:8084->80/tcp
whoami-4 Up X minutes 127.0.0.1:8085->80/tcp
Fenêtre de terminal
ssh azureuser@${ORIGIN_IP} "sudo nginx -t && sudo systemctl status nginx --no-pager"

Si les points de terminaison retournent 502 ou une connexion refusée, cloud-init est peut-être encore en train de provisionner :

Fenêtre de terminal
ssh azureuser@${ORIGIN_IP} "cloud-init status"
  • status: running — provisionnement en cours, attendez quelques minutes
  • status: done — provisionnement terminé, vérifiez les conteneurs Docker
  • status: error — consultez les journaux ci-dessous
Fenêtre de terminal
ssh azureuser@${ORIGIN_IP} "sudo tail -100 /var/log/cloud-init-output.log"
Fenêtre de terminal
# Vérifier les journaux des conteneurs (chaque application a 4 instances : -1 à -4)
ssh azureuser@${ORIGIN_IP} "sudo docker logs juice-shop-1 2>&1 | tail -20"
ssh azureuser@${ORIGIN_IP} "sudo docker logs dvwa-1 2>&1 | tail -20"
ssh azureuser@${ORIGIN_IP} "sudo docker logs vampi-1 2>&1 | tail -20"
ssh azureuser@${ORIGIN_IP} "sudo docker logs httpbin-1 2>&1 | tail -20"
ssh azureuser@${ORIGIN_IP} "sudo docker logs csd-demo-1 2>&1 | tail -20"
ssh azureuser@${ORIGIN_IP} "sudo docker logs dvga-1 2>&1 | tail -20"
ssh azureuser@${ORIGIN_IP} "sudo docker logs restaurant-1 2>&1 | tail -20"
ssh azureuser@${ORIGIN_IP} "sudo docker logs crapi-web 2>&1 | tail -20"

Le conteneur en amont n’est pas prêt ou a planté :

Fenêtre de terminal
# Vérifier le journal des erreurs nginx
ssh azureuser@${ORIGIN_IP} "sudo tail -20 /var/log/nginx/error.log"
# Redémarrer toutes les instances d'une application spécifique
ssh azureuser@${ORIGIN_IP} "for i in 1 2 3 4; do sudo docker restart juice-shop-\$i; done"
# Reconstruire et redémarrer tous les conteneurs
ssh azureuser@${ORIGIN_IP} "cd /opt/origin-server && sudo docker compose build && sudo docker compose up -d"

Les images Docker consomment environ 4,7 Gio. La journalisation des accès est désactivée pour éviter l’épuisement du disque lors des tests de charge CDN. Logrotate est configuré en défense en profondeur (limite de 500 Mio). Vérifiez l’utilisation du disque :

Fenêtre de terminal
ssh azureuser@${ORIGIN_IP} "df -h / && sudo docker system df"

Vérifiez les conteneurs approchant de leurs limites de mémoire (risque OOM) :

Fenêtre de terminal
ssh azureuser@${ORIGIN_IP} "sudo docker stats --no-stream --format 'table {{.Name}}\t{{.MemUsage}}\t{{.MemPerc}}' | sort"

Si nécessaire, reconstruisez et redémarrez tous les services :

Fenêtre de terminal
ssh azureuser@${ORIGIN_IP} "cd /opt/origin-server && sudo docker compose down && sudo docker compose build && sudo docker compose up -d && sudo systemctl restart nginx"