Files
dock/nginx
2025-10-29 21:43:13 +08:00

165 lines
3.5 KiB
Bash

#!/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=(2086 81 2096)
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:
- '2086:80'
- '81:81'
- '2096: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 代理: 2086 → 80"
print_info " - HTTPS 代理: 2096 → 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 "$@"