#!/bin/bash # 设置颜色输出 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' # No Color # 打印颜色信息 print_info() { echo -e "${GREEN}[INFO]${NC} $1" } print_warning() { echo -e "${YELLOW}[WARNING]${NC} $1" } print_error() { echo -e "${RED}[ERROR]${NC} $1" } # 检查端口是否被占用 check_port() { local port=$1 if lsof -Pi :$port -sTCP:LISTEN -t >/dev/null ; then print_error "端口 $port 已被占用" return 1 else print_info "端口 $port 可用" return 0 fi } # 检查所有需要的端口 check_ports() { print_info "检查端口占用情况..." local ports=(80 81 443) local conflict_found=0 for port in "${ports[@]}"; do if ! check_port $port; then conflict_found=1 fi done if [ $conflict_found -eq 1 ]; then print_error "检测到端口冲突,请解决冲突后重新运行脚本" exit 1 else print_info "所有端口检查通过" fi } # 创建必要的目录 create_directories() { print_info "创建数据目录..." mkdir -p ./data mkdir -p ./letsencrypt if [ $? -eq 0 ]; then print_info "目录创建成功" else print_error "目录创建失败" exit 1 fi } # 创建 docker-compose.yml 文件 create_docker_compose() { print_info "创建 docker-compose.yml 文件..." cat > docker-compose.yml << 'EOF' services: app: image: 'docker.io/jc21/nginx-proxy-manager:latest' restart: unless-stopped ports: - '80:80' - '81:81' - '443:443' volumes: - ./data:/data - ./letsencrypt:/etc/letsencrypt EOF if [ -f "docker-compose.yml" ]; then print_info "docker-compose.yml 文件创建成功" else print_error "docker-compose.yml 文件创建失败" exit 1 fi } # 启动服务 start_services() { print_info "启动 Nginx Proxy Manager..." if command -v docker-compose &> /dev/null; then docker-compose up -d elif command -v docker &> /dev/null && docker compose version &> /dev/null; then docker compose up -d else print_error "未找到 docker-compose 或 docker compose 命令" exit 1 fi if [ $? -eq 0 ]; then print_info "Nginx Proxy Manager 启动成功" else print_error "Nginx Proxy Manager 启动失败" exit 1 fi } # 显示安装完成信息 show_completion_info() { echo print_info "=== Nginx Proxy Manager 安装完成 ===" echo print_info "访问地址: http://你的服务器IP:81" print_info "默认登录信息:" print_info " 邮箱: admin@example.com" print_info " 密码: changeme" echo print_warning "首次登录后请立即修改默认密码!" echo print_info "服务端口映射:" print_info " - 管理界面: 81" print_info " - HTTP 代理: 80 → 80" print_info " - HTTPS 代理: 443 → 443" echo } # 主函数 main() { echo print_info "开始安装 Nginx Proxy Manager..." echo # 检查 Docker 是否安装 if ! command -v docker &> /dev/null; then print_error "Docker 未安装,请先安装 Docker" exit 1 fi # 检查端口 check_ports # 创建目录 create_directories # 创建 docker-compose 文件 create_docker_compose # 启动服务 start_services # 显示完成信息 show_completion_info } # 运行主函数 main "$@"