#!/bin/bash
# ============================================
# 脚本名称: Nginx_ubuntu.sh
# 功能描述: 在 Ubuntu 系统上一键安装 Nginx（完全静默版）
# 使用方法: bash Nginx_ubuntu.sh
# 特点: 屏幕无输出，所有日志保存到文件
# ============================================

# ---------- 日志配置 ----------
LOG_DIR="/var/log/nginx_install"
mkdir -p "$LOG_DIR"
LOG_FILE="$LOG_DIR/install_$(date +%Y%m%d_%H%M%S).log"

# ---------- 重定向所有输出到日志 ----------
exec > >(tee -a "$LOG_FILE") 2>&1

# ---------- 颜色定义 ----------
RESET='\033[0m'
GREEN='\033[32m'
YELLOW='\033[33m'

# ---------- 猫咪提示函数 ----------
cat_say() {
    echo -e "${YELLOW}"
    echo "  /\_/\  "
    echo " ( o.o )  $1"
    echo "  > ^ <  "
    echo -e "${RESET}"
}

# ---------- 开始安装 ----------
echo "========================================="
echo "开始时间: $(date '+%Y-%m-%d %H:%M:%S')"
echo "日志文件: $LOG_FILE"
echo "系统版本: $(lsb_release -ds 2>/dev/null || cat /etc/issue | head -1)"
echo "========================================="

# ------- 1. 更新软件包索引 -------
echo " "
cat_say "更新软件包索引..."

apt-get update -qq > /dev/null 2>&1

if [ $? -eq 0 ]; then
    cat_say "索引更新完成"
else
    cat_say "索引更新失败，检查网络或源配置"
    exit 1
fi

# ------- 2. 安装依赖工具 -------
echo " "
cat_say "安装基础工具..."

apt-get install -y wget curl > /dev/null 2>&1

if [ $? -eq 0 ]; then
    cat_say "基础工具安装完成"
else
    cat_say "基础工具安装失败"
    exit 1
fi

# ------- 3. 配置环境变量 -------
echo " "
cat_say "设置环境变量中..."

if ! grep -q "/usr/local/nginx/sbin" ~/.bashrc 2>/dev/null; then
    echo 'export PATH=$PATH:/usr/local/nginx/sbin' >> ~/.bashrc
    cat_say "环境变量已添加到 ~/.bashrc"
else
    cat_say "环境变量已存在"
fi

export PATH=$PATH:/usr/local/nginx/sbin
cat_say "环境变量已生效"

# ------- 4. 下载 Nginx -------
echo " "
cat_say "下载 Nginx 源码包..."

cd /usr/local/src || exit

if [ ! -f "nginx-1.30.4.tar.gz" ]; then
    wget -q https://nginx.org/download/nginx-1.30.4.tar.gz
    if [ $? -eq 0 ]; then
        cat_say "下载完成 (版本 1.30.4)"
    else
        cat_say "下载失败，请检查网络"
        exit 1
    fi
else
    cat_say "安装包已存在，跳过下载"
fi

# ------- 5. 解压 Nginx -------
echo " "
cat_say "解压 Nginx 源码..."

if [ ! -d "nginx-1.30.4" ]; then
    tar -xf nginx-1.30.4.tar.gz 2>/dev/null
    if [ $? -eq 0 ]; then
        cat_say "解压完成"
    else
        cat_say "解压失败"
        exit 1
    fi
else
    cat_say "已解压，跳过"
fi

# ------- 6. 安装编译环境 -------
echo " "
cat_say "安装编译环境（可能需要几分钟）..."

apt-get install -y build-essential \
    libpcre3 libpcre3-dev \
    zlib1g zlib1g-dev \
    openssl libssl-dev \
    libtool > /dev/null 2>&1

if [ $? -eq 0 ]; then
    cat_say "编译环境安装完成"
else
    cat_say "编译环境安装失败"
    exit 1
fi

# ------- 7. 创建nginx用户（可选，提高安全性） -------
echo " "
cat_say "创建 nginx 用户..."

if ! id -u nginx > /dev/null 2>&1; then
    useradd -r -s /sbin/nologin nginx 2>/dev/null
    cat_say "nginx 用户创建完成"
else
    cat_say "nginx 用户已存在"
fi

# ------- 8. 配置编译参数 -------
echo " "
cat_say "配置编译参数..."

cd nginx-1.30.4 || exit

./configure \
    --prefix=/usr/local/nginx \
    --user=nginx \
    --group=nginx \
    --with-http_ssl_module \
    --with-http_stub_status_module \
    --with-http_v2_module \
    --with-threads \
    --with-file-aio > /dev/null 2>&1

if [ $? -eq 0 ]; then
    cat_say "配置完成"
else
    cat_say "配置失败，查看日志: $LOG_FILE"
    exit 1
fi

# ------- 9. 编译 -------
echo " "
cat_say "开始编译（吃个猫条慢慢等）..."

make -j$(nproc) > /dev/null 2>&1

if [ $? -eq 0 ]; then
    cat_say "编译完成 (使用 $(nproc) 核心)"
else
    cat_say "编译失败"
    exit 1
fi

# ------- 10. 安装到系统 -------
echo " "
cat_say "安装到系统..."

make install > /dev/null 2>&1

if [ $? -eq 0 ]; then
    cat_say "安装完成"
else
    cat_say "安装失败"
    exit 1
fi

# ------- 11. 创建systemd服务文件 -------
echo " "
cat_say "创建 systemd 服务..."

cat > /etc/systemd/system/nginx.service << 'EOF'
[Unit]
Description=nginx - high performance web server
Documentation=https://nginx.org/en/docs/
After=network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target

[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf
ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s stop
PrivateTmp=true

[Install]
WantedBy=multi-user.target
EOF

systemctl daemon-reload
cat_say "systemd 服务创建完成"

# ------- 12. 启动 Nginx -------
echo " "
cat_say "启动 Nginx 服务..."

systemctl start nginx

if [ $? -eq 0 ]; then
    cat_say "🎉 Nginx 启动成功！(●ˇ∀ˇ●)"
else
    cat_say "😭 Nginx 启动失败，查看错误日志"
    tail -20 /usr/local/nginx/logs/error.log
    exit 1
fi

# ------- 13. 设置开机自启 -------
echo " "
cat_say "设置开机自启..."

systemctl enable nginx > /dev/null 2>&1

if [ $? -eq 0 ]; then
    cat_say "开机自启已设置"
else
    cat_say "开机自启设置失败"
fi

# ------- 14. 显示安装信息 -------
echo " "
echo "========================================="
echo "✅ Nginx 安装完成！"
echo "📋 安装信息："
echo "  安装路径: /usr/local/nginx"
echo "  配置文件: /usr/local/nginx/conf/nginx.conf"
echo "  启动命令: systemctl start nginx"
echo "  停止命令: systemctl stop nginx"
echo "  重载命令: systemctl reload nginx"
echo "  开机自启: systemctl enable nginx"
echo "  日志文件: $LOG_FILE"
echo "结束时间: $(date '+%Y-%m-%d %H:%M:%S')"
echo "========================================="
