优化PUBLIC_SITE_URL的获取逻辑
This commit is contained in:
parent
9db57a3fcb
commit
fa686fe62f
@ -39,6 +39,48 @@ SERVER_URL="https://admin.jingrow.com"
|
|||||||
API_KEY="535bc122f3e364c"
|
API_KEY="535bc122f3e364c"
|
||||||
API_SECRET="8629a3b12fc1cc2"
|
API_SECRET="8629a3b12fc1cc2"
|
||||||
|
|
||||||
|
# ========================================
|
||||||
|
# 工具函数
|
||||||
|
# ========================================
|
||||||
|
|
||||||
|
# 智能IP选择:优先使用内网IP,没有内网IP时使用公网IP
|
||||||
|
get_optimal_host_ip() {
|
||||||
|
local host_ip=""
|
||||||
|
|
||||||
|
# 方法1: 尝试获取内网IP
|
||||||
|
local private_ip=$(ip route get 8.8.8.8 2>/dev/null | awk '{print $7}' | head -1)
|
||||||
|
if [ -n "$private_ip" ] && [ "$private_ip" != "8.8.8.8" ]; then
|
||||||
|
# 测试内网IP是否可达
|
||||||
|
if ping -c 2 -W 1 "$private_ip" >/dev/null 2>&1; then
|
||||||
|
host_ip="$private_ip"
|
||||||
|
log_success "使用内网IP: $host_ip"
|
||||||
|
else
|
||||||
|
log_warning "内网IP不可达: $private_ip"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 方法2: 如果没有内网IP或内网IP不可达,使用公网IP
|
||||||
|
if [ -z "$host_ip" ]; then
|
||||||
|
if [ -n "$PUBLIC_IP" ]; then
|
||||||
|
host_ip="$PUBLIC_IP"
|
||||||
|
log_info "使用指定的公网IP: $host_ip"
|
||||||
|
else
|
||||||
|
# 尝试自动获取公网IP
|
||||||
|
local auto_public_ip=$(curl -s --max-time 5 ifconfig.me 2>/dev/null || curl -s --max-time 5 ipinfo.io/ip 2>/dev/null)
|
||||||
|
if [ -n "$auto_public_ip" ]; then
|
||||||
|
host_ip="$auto_public_ip"
|
||||||
|
log_info "自动获取公网IP: $host_ip"
|
||||||
|
else
|
||||||
|
# 最后回退:使用第一个可用IP
|
||||||
|
host_ip=$(hostname -I | awk '{print $1}')
|
||||||
|
log_warning "使用备用IP: $host_ip"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "$host_ip"
|
||||||
|
}
|
||||||
|
|
||||||
# 解析命令行参数
|
# 解析命令行参数
|
||||||
while [[ $# -gt 0 ]]; do
|
while [[ $# -gt 0 ]]; do
|
||||||
case $1 in
|
case $1 in
|
||||||
@ -560,8 +602,11 @@ create_env_file() {
|
|||||||
# 获取项目端口
|
# 获取项目端口
|
||||||
local project_port=$(get_or_assign_port "$SITE_NAME")
|
local project_port=$(get_or_assign_port "$SITE_NAME")
|
||||||
|
|
||||||
# 构建本地地址URL(用于PUBLIC_SITE_URL)
|
# 智能IP选择:优先使用内网IP,没有内网IP时使用公网IP(与traefik配置保持一致)
|
||||||
local public_site_url="http://127.0.0.1:$project_port"
|
local host_ip=$(get_optimal_host_ip)
|
||||||
|
|
||||||
|
# 构建PUBLIC_SITE_URL(优先使用内网IP,没有内网IP时使用公网IP)
|
||||||
|
local public_site_url="http://$host_ip:$project_port"
|
||||||
|
|
||||||
# 检查.env文件是否已存在
|
# 检查.env文件是否已存在
|
||||||
if [ -f "/home/jingrow/jsite/$SITE_NAME/.env" ]; then
|
if [ -f "/home/jingrow/jsite/$SITE_NAME/.env" ]; then
|
||||||
@ -909,38 +954,7 @@ create_traefik_website_config() {
|
|||||||
local project_port=$(get_or_assign_port "$SITE_NAME")
|
local project_port=$(get_or_assign_port "$SITE_NAME")
|
||||||
|
|
||||||
# 智能IP选择:优先使用内网IP,没有内网IP时使用公网IP
|
# 智能IP选择:优先使用内网IP,没有内网IP时使用公网IP
|
||||||
local host_ip=""
|
local host_ip=$(get_optimal_host_ip)
|
||||||
|
|
||||||
# 方法1: 尝试获取内网IP
|
|
||||||
local private_ip=$(ip route get 8.8.8.8 2>/dev/null | awk '{print $7}' | head -1)
|
|
||||||
if [ -n "$private_ip" ] && [ "$private_ip" != "8.8.8.8" ]; then
|
|
||||||
# 测试内网IP是否可达
|
|
||||||
if ping -c 2 -W 1 "$private_ip" >/dev/null 2>&1; then
|
|
||||||
host_ip="$private_ip"
|
|
||||||
log_success "使用内网IP: $host_ip"
|
|
||||||
else
|
|
||||||
log_warning "内网IP不可达: $private_ip"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
# 方法2: 如果没有内网IP或内网IP不可达,使用公网IP
|
|
||||||
if [ -z "$host_ip" ]; then
|
|
||||||
if [ -n "$PUBLIC_IP" ]; then
|
|
||||||
host_ip="$PUBLIC_IP"
|
|
||||||
log_info "使用指定的公网IP: $host_ip"
|
|
||||||
else
|
|
||||||
# 尝试自动获取公网IP
|
|
||||||
local auto_public_ip=$(curl -s --max-time 5 ifconfig.me 2>/dev/null || curl -s --max-time 5 ipinfo.io/ip 2>/dev/null)
|
|
||||||
if [ -n "$auto_public_ip" ]; then
|
|
||||||
host_ip="$auto_public_ip"
|
|
||||||
log_info "自动获取公网IP: $host_ip"
|
|
||||||
else
|
|
||||||
# 最后回退:使用第一个可用IP
|
|
||||||
host_ip=$(hostname -I | awk '{print $1}')
|
|
||||||
log_warning "使用备用IP: $host_ip"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
# 生成Host规则
|
# 生成Host规则
|
||||||
local host_rule=$(generate_host_rule "$SITE_URL")
|
local host_rule=$(generate_host_rule "$SITE_URL")
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user