#!/bin/bash set -euo pipefail PROFILE=${SPRING_PROFILES_ACTIVE:-prod} if [[ "$PROFILE" == "dev" ]]; then APISIX_ADMIN_URL=http://${LAN_IP:-127.0.0.1}:9180/apisix/admin else APISIX_ADMIN_URL=http://apisix:9180/apisix/admin fi API_KEY=${APISIX_ADMIN_KEY:?APISIX_ADMIN_KEY is required} DOZZLE_HOST=${DOZZLE_SUBDOMAIN:-dozzle.iklim.co} DOZZLE_NODE=${DOZZLE_NODE:-dozzle:8080} ERRORS=0 call_api() { local label="$1"; shift local http_code http_code=$(curl -sS -o /tmp/apisix_dozzle_resp.json -w "%{http_code}" "$@") if [[ "$http_code" -ge 400 ]]; then echo "ERROR: $label (HTTP $http_code)" cat /tmp/apisix_dozzle_resp.json echo ERRORS=$((ERRORS + 1)) fi } until curl -sf -o /dev/null -H "X-API-KEY: $API_KEY" "$APISIX_ADMIN_URL/upstreams"; do echo "APISIX not ready, retrying in 3s..." sleep 3 done HC='"checks":{"active":{"type":"http","http_path":"/","timeout":5,"healthy":{"interval":10,"successes":1},"unhealthy":{"interval":5,"http_failures":3}},"passive":{"healthy":{"http_statuses":[200,201,204,302],"successes":2},"unhealthy":{"http_statuses":[429,500,502,503,504],"http_failures":3,"tcp_failures":3}}}' if [[ "$PROFILE" != "dev" ]]; then DOZZLE_ROUTE_PLUGINS=',"plugins":{"limit-count":{"count":120,"time_window":60,"key":"remote_addr","rejected_code":429,"policy":"local"}}' else DOZZLE_ROUTE_PLUGINS="" fi call_api "upstream dozzle" -X PUT "$APISIX_ADMIN_URL/upstreams/dozzle-upstream" \ -H "X-API-KEY: $API_KEY" -H "Content-Type: application/json" \ -d '{"name":"dozzle-upstream","type":"roundrobin","nodes":{"'"$DOZZLE_NODE"'":1},'"$HC"'}' call_api "service dozzle" -X PUT "$APISIX_ADMIN_URL/services/dozzle-service" \ -H "X-API-KEY: $API_KEY" -H "Content-Type: application/json" \ -d '{"name":"dozzle-service","upstream_id":"dozzle-upstream","enable_websocket":true}' call_api "route dozzle" -X PUT "$APISIX_ADMIN_URL/routes/dozzle-route" \ -H "X-API-KEY: $API_KEY" -H "Content-Type: application/json" \ -d '{"name":"dozzle-route","hosts":["'"$DOZZLE_HOST"'"],"uri":"/*","methods":["GET","POST","PUT","DELETE","PATCH","OPTIONS"],"service_id":"dozzle-service","enable_websocket":true'"$DOZZLE_ROUTE_PLUGINS"'}' if [ "$ERRORS" -gt 0 ]; then echo "Dozzle APISIX init completed with $ERRORS error(s)." exit 1 fi echo "Dozzle APISIX route configured for https://${DOZZLE_HOST}"