#!/bin/bash
# Eric · 凉城
# phpMyAdmin 一键安装脚本 241209

# 确保脚本以 root 用户运行
if [ "$(id -u)" -ne 0 ]; then
  echo "此脚本需要以 root 用户运行。"
  exit 1
fi

# 自动获取 PHP 版本
PHP_VERSION=$(php -v | head -n 1 | awk '{print $2}' | cut -d '.' -f1,2)

# 更新系统并安装必要的依赖
echo "更新系统并安装依赖..."
apt update && apt install -y wget unzip php-mbstring

# 设置 phpMyAdmin 版本
PHPMYADMIN_VERSION="5.2.1"
PHPMYADMIN_DIR="/www/phpMyAdmin"

# 创建 /www 目录并下载 phpMyAdmin
echo "创建目录 /www 并下载 phpMyAdmin..."
mkdir -p /www
cd /www
rm -f phpMyAdmin-${PHPMYADMIN_VERSION}-all-languages.zip
wget https://files.phpmyadmin.net/phpMyAdmin/${PHPMYADMIN_VERSION}/phpMyAdmin-${PHPMYADMIN_VERSION}-all-languages.zip

# 解压并移动到正确的目录
echo "解压 phpMyAdmin 并重命名目录..."
unzip phpMyAdmin-${PHPMYADMIN_VERSION}-all-languages.zip
mv phpMyAdmin-${PHPMYADMIN_VERSION}-all-languages phpMyAdmin
rm phpMyAdmin-${PHPMYADMIN_VERSION}-all-languages.zip

# 设置权限
echo "设置目录权限..."
mkdir -p $PHPMYADMIN_DIR/tmp
chown -R www-data:www-data $PHPMYADMIN_DIR/tmp

# 复制并修改 config.inc.php
echo "配置 phpMyAdmin..."
cp $PHPMYADMIN_DIR/config.sample.inc.php $PHPMYADMIN_DIR/config.inc.php

# 生成 blowfish_secret
BLOWFISH_SECRET=$(openssl rand -hex 16)

# 修正sed命令，使用|作为分隔符
sed -i "s|\$cfg\['blowfish_secret'\] = ''|\$cfg\['blowfish_secret'\] = '${BLOWFISH_SECRET}'|" $PHPMYADMIN_DIR/config.inc.php


# 获取 MySQL socket 路径
MYSQL_SOCKET=$(mysql -u root -p -e "SHOW VARIABLES LIKE 'socket';" 2>/dev/null | grep socket | awk '{print $2}')

# 如果找不到 socket，默认使用 /tmp/mysql.sock
if [ -z "$MYSQL_SOCKET" ]; then
  echo "无法获取 MySQL socket 路径，使用默认路径 /tmp/mysql.sock"
  MYSQL_SOCKET="/tmp/mysql.sock"
fi

echo "MySQL socket 路径为：$MYSQL_SOCKET"

# 修改配置文件，设置 MySQL socket
sed -i "s|\$cfg\['Servers'\]\[\$i\]\['host'\] = '127.0.0.1';|\$cfg\['Servers'\]\[\$i\]\['socket'\] = '${MYSQL_SOCKET}';|" $PHPMYADMIN_DIR/config.inc.php
sed -i "s|^mysqli\.default_socket =.*|mysqli.default_socket = '${MYSQL_SOCKET}';|" /etc/php/${PHP_VERSION}/fpm/php.ini

# 设置临时目录
echo "\$cfg['TempDir'] = 'tmp';" >> $PHPMYADMIN_DIR/config.inc.php

# 配置 Nginx
echo "配置 Nginx..."

NGINX_SITES_AVAILABLE="/usr/local/nginx/conf/sites-available"
NGINX_SITES_ENABLED="/usr/local/nginx/conf/sites-enabled"

# 检查是否已经配置了 phpMyAdmin，如果没有则添加
if [ ! -f "$NGINX_SITES_AVAILABLE/phpmyadmin" ]; then
  # 自动获取 PHP-FPM 使用的连接方式（TCP 或 Unix 套接字）
  PHP_FPM_SOCKET=$(grep -E '^listen' /etc/php/*/fpm/pool.d/www.conf | head -n 1 | awk '{print $3}')

  if [[ "$PHP_FPM_SOCKET" == *"sock"* ]]; then
    # 如果使用 Unix 套接字，配置为套接字路径
    FASTCGI_PASS="unix:$PHP_FPM_SOCKET"
  else
    # 如果使用 TCP，配置为 127.0.0.1:9000
    FASTCGI_PASS="127.0.0.1:9000"
  fi

  cat <<EOL > $NGINX_SITES_AVAILABLE/phpmyadmin
server {
    listen 8081;
    server_name localhost;
    root $PHPMYADMIN_DIR;
    
    index index.php;
    
    location /phpMyAdmin {
        try_files \$uri \$uri/ /phpMyAdmin/index.php\$is_args\$args;
    }

    location ~ \.php$ {
        include fastcgi_params;
        fastcgi_pass $FASTCGI_PASS;  # 使用自动配置的 PHP-FPM 地址
        fastcgi_param SCRIPT_FILENAME $PHPMYADMIN_DIR\$fastcgi_script_name;
        include fastcgi.conf;
    }

    location ~ /\.ht {
        deny all;
    }
}
EOL

  # 创建符号链接到 sites-enabled
  ln -s $NGINX_SITES_AVAILABLE/phpmyadmin $NGINX_SITES_ENABLED/phpmyadmin

else
  echo "Nginx 配置文件已包含 phpMyAdmin 配置。"
fi

# 重启 PHP-FPM 和 Nginx
echo "重启 PHP-FPM 和 Nginx..."
service php${PHP_VERSION}-fpm restart   # 自动获取 PHP 版本并重启相应的 PHP-FPM
service nginx restart

# 完成
echo "phpMyAdmin 安装完成！请访问 http://localhost:8081 来使用 phpMyAdmin。"
echo "您也可以修改 $NGINX_SITES_AVAILABLE/phpmyadmin 来绑定新的域名/端口"
