73 lines
2.6 KiB
Bash
73 lines
2.6 KiB
Bash
#!/usr/bin/env bash
|
|
set -Eeuo pipefail
|
|
|
|
PRIVATE_IP="${PRIVATE_IP:-192.168.0.5}"
|
|
ROOT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")/.." && pwd)"
|
|
CASTING="${ROOT_DIR}/casting.yaml"
|
|
COMPOSE="${ROOT_DIR}/pours/deployment/compose.yaml"
|
|
|
|
if [[ $EUID -ne 0 ]]; then
|
|
echo "Запустите через sudo: sudo $0" >&2
|
|
exit 1
|
|
fi
|
|
command -v docker >/dev/null || { echo "Сначала установите Docker." >&2; exit 1; }
|
|
ip -4 addr show | grep -Fq "inet ${PRIVATE_IP}/" || {
|
|
echo "На ВМ отсутствует приватный адрес ${PRIVATE_IP}." >&2
|
|
exit 1
|
|
}
|
|
grep -Fq "${PRIVATE_IP}:4317:4317" "$CASTING" || {
|
|
echo "PRIVATE_IP не совпадает с адресом в casting.yaml." >&2
|
|
exit 1
|
|
}
|
|
|
|
if ! command -v foundryctl >/dev/null; then
|
|
installer="$(mktemp)"
|
|
trap 'rm -f "$installer"' EXIT
|
|
curl -fsSL https://signoz.io/foundry.sh -o "$installer"
|
|
bash "$installer"
|
|
if [[ -x /root/.local/bin/foundryctl ]]; then
|
|
install -m 0755 /root/.local/bin/foundryctl /usr/local/bin/foundryctl
|
|
elif [[ ! -x /usr/local/bin/foundryctl ]]; then
|
|
echo "foundryctl не найден после установки." >&2
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
cd "$ROOT_DIR"
|
|
foundryctl gauge -f "$CASTING"
|
|
foundryctl forge -f "$CASTING"
|
|
|
|
[[ -f "$COMPOSE" ]] || { echo "Foundry не создал $COMPOSE" >&2; exit 1; }
|
|
docker compose -f "$COMPOSE" config --quiet
|
|
|
|
# Защита от случайной публикации UI или OTLP на всех интерфейсах.
|
|
grep -Fq "${PRIVATE_IP}:4317:4317" "$COMPOSE"
|
|
grep -Fq "${PRIVATE_IP}:4318:4318" "$COMPOSE"
|
|
grep -Fq "127.0.0.1:8080:8080" "$COMPOSE"
|
|
if grep -Eq '(^|[[:space:]"-])0\.0\.0\.0:(8080|4317|4318):' "$COMPOSE"; then
|
|
echo "Остановка: обнаружена публикация служебного порта на 0.0.0.0." >&2
|
|
exit 1
|
|
fi
|
|
|
|
docker compose -f "$COMPOSE" pull
|
|
docker compose -f "$COMPOSE" up -d --remove-orphans
|
|
|
|
echo "Ожидание SigNoz UI..."
|
|
deadline=$((SECONDS + 300))
|
|
until curl -fsS --max-time 5 http://127.0.0.1:8080/api/v1/health >/dev/null 2>&1; do
|
|
if ((SECONDS >= deadline)); then
|
|
echo "UI не стал готов за 5 минут." >&2
|
|
docker compose -f "$COMPOSE" ps -a
|
|
exit 1
|
|
fi
|
|
sleep 5
|
|
done
|
|
|
|
docker compose -f "$COMPOSE" ps -a
|
|
cat <<'EOF'
|
|
|
|
Базовый SigNoz запущен, но первичная настройка ещё не завершена.
|
|
Откройте UI через SSH-туннель и создайте первого администратора/организацию.
|
|
После этого перезапустите ingester и выполните scripts/30-verify-signoz.sh.
|
|
EOF
|