Update nginx

This commit is contained in:
2025-10-26 16:03:53 +08:00
committed by GitHub
parent 056afdf3a8
commit 2fa02b4492

174
nginx
View File

@@ -1,6 +1,6 @@
#!/bin/bash
# 设置变量,提高可维护性
# 设置变量
DATA_DIR="/data"
SCRIPT_DIR="/boot/脚本"
COMPOSE_FILE="$SCRIPT_DIR/ru.yaml"
@@ -11,25 +11,36 @@ if [ "$EUID" -ne 0 ]; then
exit 1
fi
# 创建目录
echo "创建必要的目录..."
mkdir -p "$DATA_DIR"
mkdir -p "$SCRIPT_DIR"
# 函数:检查端口是否被占用
check_port() {
local port=$1
if netstat -tulpn 2>/dev/null | grep -q ":${port} "; then
return 1 # 端口被占用
else
return 0 # 端口可用
fi
}
# 检查目录是否创建成功
if [ ! -d "$SCRIPT_DIR" ]; then
echo "错误:无法创建目录 $SCRIPT_DIR"
exit 1
fi
# 函数:显示端口占用信息
show_port_info() {
local port=$1
echo "端口 $port 被以下进程占用:"
netstat -tulpn 2>/dev/null | grep ":${port} " || lsof -i :${port} 2>/dev/null
echo "----------------------------------------"
}
# 创建 Docker Compose 配置文件
echo "创建 Docker Compose 配置文件..."
cat > "$COMPOSE_FILE" << 'EOF'
# 函数:生成 Docker Compose 配置
generate_compose_config() {
local http_port=$1
local admin_port=$2
local https_port=$3
cat > "$COMPOSE_FILE" << EOF
# Nginx Proxy Manager 配置
# 初始登录信息:
# 邮箱: admin@example.com
# 密码: changeme
# 管理界面: http://服务器IP:81
# 管理界面: http://服务器IP:${admin_port}
services:
app:
@@ -37,15 +48,136 @@ services:
container_name: nginx-proxy-manager
restart: unless-stopped
ports:
- '80:80' # HTTP 流量
- '81:81' # 管理界面
- '443:443' # HTTPS 流量
- '${http_port}:80' # HTTP 流量
- '${admin_port}:81' # 管理界面
- '${https_port}:443' # HTTPS 流量
volumes:
- ./data:/data
- ./letsencrypt:/etc/letsencrypt
environment:
- DISABLE_IPV6=false
EOF
}
# 创建目录
echo "创建必要的目录..."
mkdir -p "$DATA_DIR"
mkdir -p "$SCRIPT_DIR"
# 默认端口配置
DEFAULT_HTTP_PORT="80"
DEFAULT_ADMIN_PORT="81"
DEFAULT_HTTPS_PORT="443"
# 备用端口配置
ALTERNATE_HTTP_PORT="8080"
ALTERNATE_ADMIN_PORT="8081"
ALTERNATE_HTTPS_PORT="8443"
# 检查默认端口是否可用
echo "检查端口占用情况..."
http_port_used=0
admin_port_used=0
https_port_used=0
check_port $DEFAULT_HTTP_PORT || http_port_used=1
check_port $DEFAULT_ADMIN_PORT || admin_port_used=1
check_port $DEFAULT_HTTPS_PORT || https_port_used=1
# 如果有端口被占用,显示信息
if [ $http_port_used -eq 1 ] || [ $admin_port_used -eq 1 ] || [ $https_port_used -eq 1 ]; then
echo "发现端口被占用:"
[ $http_port_used -eq 1 ] && echo " - 端口 $DEFAULT_HTTP_PORT (HTTP) 被占用" && show_port_info $DEFAULT_HTTP_PORT
[ $admin_port_used -eq 1 ] && echo " - 端口 $DEFAULT_ADMIN_PORT (管理界面) 被占用" && show_port_info $DEFAULT_ADMIN_PORT
[ $https_port_used -eq 1 ] && echo " - 端口 $DEFAULT_HTTPS_PORT (HTTPS) 被占用" && show_port_info $DEFAULT_HTTPS_PORT
echo ""
echo "请选择操作:"
echo "1) 自动使用备用端口 (8080, 8081, 8443)"
echo "2) 手动指定端口"
echo "3) 停止占用端口的进程后重试"
echo "4) 退出脚本"
read -p "请输入选择 (1-4): " choice
case $choice in
1)
HTTP_PORT=$ALTERNATE_HTTP_PORT
ADMIN_PORT=$ALTERNATE_ADMIN_PORT
HTTPS_PORT=$ALTERNATE_HTTPS_PORT
echo "使用备用端口: HTTP=$HTTP_PORT, 管理界面=$ADMIN_PORT, HTTPS=$HTTPS_PORT"
;;
2)
echo "请手动指定端口:"
read -p "HTTP 端口 (默认 $ALTERNATE_HTTP_PORT): " custom_http
read -p "管理界面端口 (默认 $ALTERNATE_ADMIN_PORT): " custom_admin
read -p "HTTPS 端口 (默认 $ALTERNATE_HTTPS_PORT): " custom_https
HTTP_PORT=${custom_http:-$ALTERNATE_HTTP_PORT}
ADMIN_PORT=${custom_admin:-$ALTERNATE_ADMIN_PORT}
HTTPS_PORT=${custom_https:-$ALTERNATE_HTTPS_PORT}
# 检查手动指定的端口是否可用
echo "检查手动指定端口..."
check_port $HTTP_PORT && http_ok=1 || http_ok=0
check_port $ADMIN_PORT && admin_ok=1 || admin_ok=0
check_port $HTTPS_PORT && https_ok=1 || https_ok=0
if [ $http_ok -eq 0 ] || [ $admin_ok -eq 0 ] || [ $https_ok -eq 0 ]; then
echo "错误:以下端口仍被占用:"
[ $http_ok -eq 0 ] && echo " - 端口 $HTTP_PORT" && show_port_info $HTTP_PORT
[ $admin_ok -eq 0 ] && echo " - 端口 $ADMIN_PORT" && show_port_info $ADMIN_PORT
[ $https_ok -eq 0 ] && echo " - 端口 $HTTPS_PORT" && show_port_info $HTTPS_PORT
echo "请重新运行脚本选择其他端口"
exit 1
fi
;;
3)
echo "停止占用端口的进程..."
[ $http_port_used -eq 1 ] && sudo fuser -k $DEFAULT_HTTP_PORT/tcp 2>/dev/null
[ $admin_port_used -eq 1 ] && sudo fuser -k $DEFAULT_ADMIN_PORT/tcp 2>/dev/null
[ $https_port_used -eq 1 ] && sudo fuser -k $DEFAULT_HTTPS_PORT/tcp 2>/dev/null
sleep 2
# 重新检查端口
echo "重新检查端口..."
check_port $DEFAULT_HTTP_PORT && http_port_used=0 || http_port_used=1
check_port $DEFAULT_ADMIN_PORT && admin_port_used=0 || admin_port_used=1
check_port $DEFAULT_HTTPS_PORT && https_port_used=0 || https_port_used=1
if [ $http_port_used -eq 0 ] && [ $admin_port_used -eq 0 ] && [ $https_port_used -eq 0 ]; then
HTTP_PORT=$DEFAULT_HTTP_PORT
ADMIN_PORT=$DEFAULT_ADMIN_PORT
HTTPS_PORT=$DEFAULT_HTTPS_PORT
echo "端口现在可用,使用默认端口"
else
echo "无法释放所有端口,请使用备用端口选项"
exit 1
fi
;;
4)
echo "退出脚本"
exit 0
;;
*)
echo "无效选择,使用备用端口"
HTTP_PORT=$ALTERNATE_HTTP_PORT
ADMIN_PORT=$ALTERNATE_ADMIN_PORT
HTTPS_PORT=$ALTERNATE_HTTPS_PORT
;;
esac
else
# 所有默认端口都可用
HTTP_PORT=$DEFAULT_HTTP_PORT
ADMIN_PORT=$DEFAULT_ADMIN_PORT
HTTPS_PORT=$DEFAULT_HTTPS_PORT
echo "所有默认端口都可用"
fi
# 创建 Docker Compose 配置文件
echo "创建 Docker Compose 配置文件..."
generate_compose_config $HTTP_PORT $ADMIN_PORT $HTTPS_PORT
# 检查文件是否创建成功
if [ ! -f "$COMPOSE_FILE" ]; then
@@ -72,18 +204,22 @@ if [ $? -eq 0 ]; then
echo "等待服务启动..."
sleep 5
SERVER_IP=$(hostname -I | awk '{print $1}')
echo "=================================================="
echo "Nginx Proxy Manager 部署完成!"
echo "管理界面: http://$(hostname -I | awk '{print $1}'):81"
echo "管理界面: http://${SERVER_IP}:${ADMIN_PORT}"
echo "HTTP 端口: ${HTTP_PORT}"
echo "HTTPS 端口: ${HTTPS_PORT}"
echo "初始账号: admin@example.com"
echo "初始密码: changeme"
echo "=================================================="
echo ""
echo "重要提示:"
echo "1. 首次登录后请立即修改密码"
echo "2. 确保防火墙已开放端口 80、81、443"
echo "2. 确保防火墙已开放端口 ${HTTP_PORT}, ${ADMIN_PORT}, ${HTTPS_PORT}"
echo "3. 数据保存在: $SCRIPT_DIR/data"
else
echo "错误:容器启动失败"
echo "请检查 Docker 日志docker logs nginx-proxy-manager"
exit 1
fi