- Inicio
- Servidor de origen
- Verificar
Verificar
Pruebas de humo
Sección titulada «Pruebas de humo»Ejecute estas comprobaciones después de esperar entre 5 y 10 minutos para que cloud-init finalice.
Endpoint de salud
Sección titulada «Endpoint de salud»ORIGIN_IP=$(terraform output -raw public_ip)
curl -sf "http://${ORIGIN_IP}/health" | jq .Resultado esperado:
{ "status": "healthy", "component": "origin-server", "applications": ["juice-shop", "dvwa", "vampi", "httpbin", "whoami", "csd-demo", "dvga", "restaurant", "crapi"]}Endpoints de la aplicación
Sección titulada «Endpoints de la aplicación»# Página de inicio predeterminadacurl -sf "http://${ORIGIN_IP}/" -o /dev/null -w "Landing: %{http_code}\n"
# Juice Shopcurl -sf "http://${ORIGIN_IP}/juice-shop/" -o /dev/null -w "Juice Shop: %{http_code}\n"
# DVWAcurl -sf "http://${ORIGIN_IP}/dvwa/" -o /dev/null -w "DVWA: %{http_code}\n"
# VAmPIcurl -sf "http://${ORIGIN_IP}/vampi/" -o /dev/null -w "VAmPI: %{http_code}\n"
# httpbincurl -sf "http://${ORIGIN_IP}/httpbin/get" -o /dev/null -w "httpbin: %{http_code}\n"
# whoamicurl -sf "http://${ORIGIN_IP}/whoami/" -o /dev/null -w "whoami: %{http_code}\n"
# DVGAcurl -sf "http://${ORIGIN_IP}/dvga/" -o /dev/null -w "DVGA: %{http_code}\n"
# RESTaurantcurl -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"Todos deberían devolver 200 (DVWA devuelve una redirección 302 al inicio de sesión).
Prueba de humo automatizada
Sección titulada «Prueba de humo automatizada»El repositorio incluye un conjunto de 39 pruebas de humo:
./tests/smoke-test.sh ${ORIGIN_IP}Esto valida las 9 aplicaciones, los endpoints de salud, el registro/inicio de sesión de VAmPI, el ciclo completo de exfiltración de CSD Demo, GraphQL de DVGA, Swagger de RESTaurant, crAPI en el puerto 8888, gzip de nginx y el ocultamiento de versión.
Estado de los contenedores Docker
Sección titulada «Estado de los contenedores Docker»Conéctese por SSH a la VM y verifique que los 41 contenedores estén en ejecución:
ssh azureuser@${ORIGIN_IP} "sudo docker ps --format 'table {{.Names}}\t{{.Status}}\t{{.Ports}}'" | sortResultado esperado (41 contenedores):
NAMES STATUS PORTScrapi-community Up X minutescrapi-identity Up X minutescrapi-mailhog Up X minutes 0.0.0.0:18025->8025/tcpcrapi-mongo Up X minutes 27017/tcpcrapi-postgres Up X minutes 5432/tcpcrapi-web Up X minutes 0.0.0.0:8888->80/tcpcrapi-workshop Up X minutescsd-demo-1 Up X minutes 127.0.0.1:5001->5001/tcpcsd-demo-2 Up X minutes 127.0.0.1:5002->5001/tcpcsd-demo-3 Up X minutes 127.0.0.1:5003->5001/tcpcsd-demo-4 Up X minutes 127.0.0.1:5004->5001/tcpdvga-1 Up X minutes 127.0.0.1:5201->5013/tcpdvga-2 Up X minutes 127.0.0.1:5202->5013/tcpdvga-3 Up X minutes 127.0.0.1:5203->5013/tcpdvga-4 Up X minutes 127.0.0.1:5204->5013/tcpdvwa-1 Up X minutes 127.0.0.1:8101->80/tcpdvwa-2 Up X minutes 127.0.0.1:8102->80/tcpdvwa-3 Up X minutes 127.0.0.1:8103->80/tcpdvwa-4 Up X minutes 127.0.0.1:8104->80/tcpdvwa-db Up X minutes 3306/tcphttpbin-1 Up X minutes 127.0.0.1:8201->80/tcphttpbin-2 Up X minutes 127.0.0.1:8202->80/tcphttpbin-3 Up X minutes 127.0.0.1:8203->80/tcphttpbin-4 Up X minutes 127.0.0.1:8204->80/tcpjuice-shop-1 Up X minutes 127.0.0.1:3001->3000/tcpjuice-shop-2 Up X minutes 127.0.0.1:3002->3000/tcpjuice-shop-3 Up X minutes 127.0.0.1:3003->3000/tcpjuice-shop-4 Up X minutes 127.0.0.1:3004->3000/tcprestaurant-1 Up X minutes 127.0.0.1:8301->8080/tcprestaurant-2 Up X minutes 127.0.0.1:8302->8080/tcprestaurant-3 Up X minutes 127.0.0.1:8303->8080/tcprestaurant-4 Up X minutes 127.0.0.1:8304->8080/tcprestaurant-db Up X minutes 5432/tcpvampi-1 Up X minutes 127.0.0.1:5101->5000/tcpvampi-2 Up X minutes 127.0.0.1:5102->5000/tcpvampi-3 Up X minutes 127.0.0.1:5103->5000/tcpvampi-4 Up X minutes 127.0.0.1:5104->5000/tcpwhoami-1 Up X minutes 127.0.0.1:8082->80/tcpwhoami-2 Up X minutes 127.0.0.1:8083->80/tcpwhoami-3 Up X minutes 127.0.0.1:8084->80/tcpwhoami-4 Up X minutes 127.0.0.1:8085->80/tcpEstado de nginx
Sección titulada «Estado de nginx»ssh azureuser@${ORIGIN_IP} "sudo nginx -t && sudo systemctl status nginx --no-pager"Resolución de problemas
Sección titulada «Resolución de problemas»Cloud-init aún en ejecución
Sección titulada «Cloud-init aún en ejecución»Si los endpoints devuelven 502 o la conexión es rechazada, es posible que cloud-init todavía esté aprovisionando:
ssh azureuser@${ORIGIN_IP} "cloud-init status"status: running— todavía aprovisionando, espere unos minutosstatus: done— aprovisionamiento completado, revise los contenedores Dockerstatus: error— consulte los registros a continuación
Registros de cloud-init
Sección titulada «Registros de cloud-init»ssh azureuser@${ORIGIN_IP} "sudo tail -100 /var/log/cloud-init-output.log"Contenedor que no inicia
Sección titulada «Contenedor que no inicia»# Check container logs (each app has 4 instances: -1 through -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"nginx devuelve 502
Sección titulada «nginx devuelve 502»El contenedor upstream no está listo o se ha detenido inesperadamente:
# Check nginx error logssh azureuser@${ORIGIN_IP} "sudo tail -20 /var/log/nginx/error.log"
# Restart all instances of a specific appssh azureuser@${ORIGIN_IP} "for i in 1 2 3 4; do sudo docker restart juice-shop-\$i; done"
# Rebuild and restart all containersssh azureuser@${ORIGIN_IP} "cd /opt/origin-server && sudo docker compose build && sudo docker compose up -d"Espacio en disco
Sección titulada «Espacio en disco»Las imágenes de Docker consumen aproximadamente 4,7 GiB. El registro de acceso está deshabilitado para evitar el agotamiento del disco durante las pruebas de carga de CDN. Logrotate está configurado como defensa en profundidad (límite de 500 MiB). Verifique el uso del disco:
ssh azureuser@${ORIGIN_IP} "df -h / && sudo docker system df"Memoria de los contenedores
Sección titulada «Memoria de los contenedores»Compruebe si algún contenedor se acerca a sus límites de memoria (riesgo de OOM):
ssh azureuser@${ORIGIN_IP} "sudo docker stats --no-stream --format 'table {{.Name}}\t{{.MemUsage}}\t{{.MemPerc}}' | sort"Reiniciar todo
Sección titulada «Reiniciar todo»Si es necesario, reconstruya y reinicie todos los servicios:
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"