From b2dac5e75ffc68c6c4eced18c7e2d32a60a9ad21 Mon Sep 17 00:00:00 2001 From: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com> Date: Sun, 29 Dec 2024 16:08:00 -0600 Subject: [PATCH] refactor: add fallback getIp --- apps/website/public/canary.sh | 47 +++++++++++++++++++++++++++------- apps/website/public/feature.sh | 47 +++++++++++++++++++++++++++------- apps/website/public/install.sh | 47 +++++++++++++++++++++++++++------- 3 files changed, 114 insertions(+), 27 deletions(-) diff --git a/apps/website/public/canary.sh b/apps/website/public/canary.sh index b1074ca..2bd2d8c 100644 --- a/apps/website/public/canary.sh +++ b/apps/website/public/canary.sh @@ -43,21 +43,50 @@ install_dokploy() { docker swarm leave --force 2>/dev/null get_ip() { - # Try to get IPv4 - local ipv4=$(curl -4s https://ifconfig.io 2>/dev/null) + local ip="" + + # Try IPv4 first + # First attempt: ifconfig.io + ip=$(curl -4s --connect-timeout 5 https://ifconfig.io 2>/dev/null) + + # Second attempt: icanhazip.com + if [ -z "$ip" ]; then + ip=$(curl -4s --connect-timeout 5 https://icanhazip.com 2>/dev/null) + fi + + # Third attempt: ipecho.net + if [ -z "$ip" ]; then + ip=$(curl -4s --connect-timeout 5 https://ipecho.net/plain 2>/dev/null) + fi - if [ -n "$ipv4" ]; then - echo "$ipv4" - else - # Try to get IPv6 - local ipv6=$(curl -6s https://ifconfig.io 2>/dev/null) - if [ -n "$ipv6" ]; then - echo "$ipv6" + # If no IPv4, try IPv6 + if [ -z "$ip" ]; then + # Try IPv6 with ifconfig.io + ip=$(curl -6s --connect-timeout 5 https://ifconfig.io 2>/dev/null) + + # Try IPv6 with icanhazip.com + if [ -z "$ip" ]; then + ip=$(curl -6s --connect-timeout 5 https://icanhazip.com 2>/dev/null) + fi + + # Try IPv6 with ipecho.net + if [ -z "$ip" ]; then + ip=$(curl -6s --connect-timeout 5 https://ipecho.net/plain 2>/dev/null) fi fi + + if [ -z "$ip" ]; then + echo "Error: Could not determine server IP address automatically (neither IPv4 nor IPv6)." >&2 + echo "Please set the ADVERTISE_ADDR environment variable manually." >&2 + echo "Example: export ADVERTISE_ADDR=" >&2 + exit 1 + fi + + echo "$ip" } advertise_addr="${ADVERTISE_ADDR:-$(get_ip)}" + echo "Using advertise address: $advertise_addr" docker swarm init --advertise-addr $advertise_addr diff --git a/apps/website/public/feature.sh b/apps/website/public/feature.sh index 5acd76f..db4116b 100644 --- a/apps/website/public/feature.sh +++ b/apps/website/public/feature.sh @@ -43,21 +43,50 @@ install_dokploy() { docker swarm leave --force 2>/dev/null get_ip() { - # Try to get IPv4 - local ipv4=$(curl -4s https://ifconfig.io 2>/dev/null) + local ip="" + + # Try IPv4 first + # First attempt: ifconfig.io + ip=$(curl -4s --connect-timeout 5 https://ifconfig.io 2>/dev/null) + + # Second attempt: icanhazip.com + if [ -z "$ip" ]; then + ip=$(curl -4s --connect-timeout 5 https://icanhazip.com 2>/dev/null) + fi + + # Third attempt: ipecho.net + if [ -z "$ip" ]; then + ip=$(curl -4s --connect-timeout 5 https://ipecho.net/plain 2>/dev/null) + fi - if [ -n "$ipv4" ]; then - echo "$ipv4" - else - # Try to get IPv6 - local ipv6=$(curl -6s https://ifconfig.io 2>/dev/null) - if [ -n "$ipv6" ]; then - echo "$ipv6" + # If no IPv4, try IPv6 + if [ -z "$ip" ]; then + # Try IPv6 with ifconfig.io + ip=$(curl -6s --connect-timeout 5 https://ifconfig.io 2>/dev/null) + + # Try IPv6 with icanhazip.com + if [ -z "$ip" ]; then + ip=$(curl -6s --connect-timeout 5 https://icanhazip.com 2>/dev/null) + fi + + # Try IPv6 with ipecho.net + if [ -z "$ip" ]; then + ip=$(curl -6s --connect-timeout 5 https://ipecho.net/plain 2>/dev/null) fi fi + + if [ -z "$ip" ]; then + echo "Error: Could not determine server IP address automatically (neither IPv4 nor IPv6)." >&2 + echo "Please set the ADVERTISE_ADDR environment variable manually." >&2 + echo "Example: export ADVERTISE_ADDR=" >&2 + exit 1 + fi + + echo "$ip" } advertise_addr="${ADVERTISE_ADDR:-$(get_ip)}" + echo "Using advertise address: $advertise_addr" docker swarm init --advertise-addr $advertise_addr diff --git a/apps/website/public/install.sh b/apps/website/public/install.sh index 826f2eb..c22a215 100644 --- a/apps/website/public/install.sh +++ b/apps/website/public/install.sh @@ -42,21 +42,50 @@ install_dokploy() { docker swarm leave --force 2>/dev/null get_ip() { - # Try to get IPv4 - local ipv4=$(curl -4s https://ifconfig.io 2>/dev/null) + local ip="" + + # Try IPv4 first + # First attempt: ifconfig.io + ip=$(curl -4s --connect-timeout 5 https://ifconfig.io 2>/dev/null) + + # Second attempt: icanhazip.com + if [ -z "$ip" ]; then + ip=$(curl -4s --connect-timeout 5 https://icanhazip.com 2>/dev/null) + fi + + # Third attempt: ipecho.net + if [ -z "$ip" ]; then + ip=$(curl -4s --connect-timeout 5 https://ipecho.net/plain 2>/dev/null) + fi - if [ -n "$ipv4" ]; then - echo "$ipv4" - else - # Try to get IPv6 - local ipv6=$(curl -6s https://ifconfig.io 2>/dev/null) - if [ -n "$ipv6" ]; then - echo "$ipv6" + # If no IPv4, try IPv6 + if [ -z "$ip" ]; then + # Try IPv6 with ifconfig.io + ip=$(curl -6s --connect-timeout 5 https://ifconfig.io 2>/dev/null) + + # Try IPv6 with icanhazip.com + if [ -z "$ip" ]; then + ip=$(curl -6s --connect-timeout 5 https://icanhazip.com 2>/dev/null) + fi + + # Try IPv6 with ipecho.net + if [ -z "$ip" ]; then + ip=$(curl -6s --connect-timeout 5 https://ipecho.net/plain 2>/dev/null) fi fi + + if [ -z "$ip" ]; then + echo "Error: Could not determine server IP address automatically (neither IPv4 nor IPv6)." >&2 + echo "Please set the ADVERTISE_ADDR environment variable manually." >&2 + echo "Example: export ADVERTISE_ADDR=" >&2 + exit 1 + fi + + echo "$ip" } advertise_addr="${ADVERTISE_ADDR:-$(get_ip)}" + echo "Using advertise address: $advertise_addr" docker swarm init --advertise-addr $advertise_addr