refactor: add fallback getIp

This commit is contained in:
Mauricio Siu 2024-12-29 16:08:00 -06:00
parent 74ca743a5e
commit b2dac5e75f
3 changed files with 114 additions and 27 deletions

View File

@ -43,21 +43,50 @@ install_dokploy() {
docker swarm leave --force 2>/dev/null docker swarm leave --force 2>/dev/null
get_ip() { get_ip() {
# Try to get IPv4 local ip=""
local ipv4=$(curl -4s https://ifconfig.io 2>/dev/null)
# 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 # If no IPv4, try IPv6
echo "$ipv4" if [ -z "$ip" ]; then
else # Try IPv6 with ifconfig.io
# Try to get IPv6 ip=$(curl -6s --connect-timeout 5 https://ifconfig.io 2>/dev/null)
local ipv6=$(curl -6s https://ifconfig.io 2>/dev/null)
if [ -n "$ipv6" ]; then # Try IPv6 with icanhazip.com
echo "$ipv6" 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
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=<your-server-ip>" >&2
exit 1
fi
echo "$ip"
} }
advertise_addr="${ADVERTISE_ADDR:-$(get_ip)}" advertise_addr="${ADVERTISE_ADDR:-$(get_ip)}"
echo "Using advertise address: $advertise_addr"
docker swarm init --advertise-addr $advertise_addr docker swarm init --advertise-addr $advertise_addr

View File

@ -43,21 +43,50 @@ install_dokploy() {
docker swarm leave --force 2>/dev/null docker swarm leave --force 2>/dev/null
get_ip() { get_ip() {
# Try to get IPv4 local ip=""
local ipv4=$(curl -4s https://ifconfig.io 2>/dev/null)
# 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 # If no IPv4, try IPv6
echo "$ipv4" if [ -z "$ip" ]; then
else # Try IPv6 with ifconfig.io
# Try to get IPv6 ip=$(curl -6s --connect-timeout 5 https://ifconfig.io 2>/dev/null)
local ipv6=$(curl -6s https://ifconfig.io 2>/dev/null)
if [ -n "$ipv6" ]; then # Try IPv6 with icanhazip.com
echo "$ipv6" 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
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=<your-server-ip>" >&2
exit 1
fi
echo "$ip"
} }
advertise_addr="${ADVERTISE_ADDR:-$(get_ip)}" advertise_addr="${ADVERTISE_ADDR:-$(get_ip)}"
echo "Using advertise address: $advertise_addr"
docker swarm init --advertise-addr $advertise_addr docker swarm init --advertise-addr $advertise_addr

View File

@ -42,21 +42,50 @@ install_dokploy() {
docker swarm leave --force 2>/dev/null docker swarm leave --force 2>/dev/null
get_ip() { get_ip() {
# Try to get IPv4 local ip=""
local ipv4=$(curl -4s https://ifconfig.io 2>/dev/null)
# 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 # If no IPv4, try IPv6
echo "$ipv4" if [ -z "$ip" ]; then
else # Try IPv6 with ifconfig.io
# Try to get IPv6 ip=$(curl -6s --connect-timeout 5 https://ifconfig.io 2>/dev/null)
local ipv6=$(curl -6s https://ifconfig.io 2>/dev/null)
if [ -n "$ipv6" ]; then # Try IPv6 with icanhazip.com
echo "$ipv6" 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
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=<your-server-ip>" >&2
exit 1
fi
echo "$ip"
} }
advertise_addr="${ADVERTISE_ADDR:-$(get_ip)}" advertise_addr="${ADVERTISE_ADDR:-$(get_ip)}"
echo "Using advertise address: $advertise_addr"
docker swarm init --advertise-addr $advertise_addr docker swarm init --advertise-addr $advertise_addr