165 lines
3.5 KiB
Bash
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=(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 "$@"
|