rhelphp/rhelphp.bash
2025-01-27 17:45:12 +08:00

153 lines
5.0 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
# 获取RHEL版本号
rhel_version=$(rpm -E %{rhel}) # 使用rpm命令动态获取当前RHEL版本号
# 获取可用内存大小以MB为单位
available_mem=$(free -m | awk '/^Mem:/ {print $7}')
# 获取硬盘空闲大小以GB为单位
available_disk=$(df -BG / | awk 'NR==2 {print $4}' | sed 's/G//')
# 检查内存是否小于2G且硬盘空闲大小是否大于5G
if [[ "$available_mem" -lt 2048 && "$available_disk" -gt 5 ]]; then
echo "System memory is less than 2G and disk space is greater than 5G. Adding a 4G swap file..."
# 定义swap文件路径和大小
swap_file="/swapfile"
swap_size="4G"
# 创建swap文件
dd if=/dev/zero of=$swap_file bs=1M count=4096 status=progress
# 设置swap文件权限
chmod 600 $swap_file
# 格式化为swap文件
mkswap $swap_file
# 启用swap文件
swapon $swap_file
# 确保开机自动启用
if ! grep -q "$swap_file" /etc/fstab; then
echo "$swap_file none swap sw 0 0" >> /etc/fstab
fi
echo "Swap file of 4G created and activated successfully."
else
echo "System does not meet the criteria (Memory < 2G and Disk > 5G). No swap file created."
fi
# 判断服务器是否位于中国大陆
is_china=$(curl -s ping0.cc/geo | grep -q '中国' && echo "yes" || echo "no") # 调用API接口检查地理位置是否在中国大陆
# 设置对应的安装源URL
if [[ "$is_china" == "yes" && "$rhel_version" -eq 9 ]]; then
# 如果是中国大陆且RHEL版本为9使用特定的国内源
repo_url="https://git.laysense.com/enoch/RemiTuna/raw/branch/main/remi-release-9.4-2.el9.remi.noarch.rpm"
else
# 否则使用TUNA的Remi源根据RHEL版本动态选择
repo_url="https://mirrors.tuna.tsinghua.edu.cn/remi/enterprise/remi-release-$rhel_version.rpm"
fi
# 安装 Remi 仓库
echo "Installing Remi repository from $repo_url..." # 输出安装源信息
yum -y install "$repo_url" # 使用yum安装指定的remi-release包
# 提示用户输入PHP版本
read -p "Enter the PHP version to install (e.g., 80, 8.0, php80, php8.0): " php_version
# 处理用户输入提取PHP版本号
phpversion=$(echo "$php_version" | grep -oE '[0-9]+(\.[0-9]+)?' | tr -d '.') # 提取数字并去掉小数点
# 确保版本号是两位数字
if [[ ${#phpversion} -lt 2 ]]; then
echo "Invalid PHP version. Please specify a valid version like 80 or 8.0."
exit 1
fi
# 替换安装命令中的版本号并执行
packages=(
"php$phpversion"
"php$phpversion-php"
"php$phpversion-php-common"
"php$phpversion-php-cli"
"php$phpversion-php-fpm"
"php$phpversion-build"
"php$phpversion-php-enchant"
"php$phpversion-php-dba"
"php$phpversion-php-pdo"
"php$phpversion-php-devel"
"php$phpversion-php-json"
"php$phpversion-php-gd"
"php$phpversion-php-pgsql"
"php$phpversion-php-pecl-redis5"
"php$phpversion-php-pecl-zip"
"php$phpversion-php-intl"
"php$phpversion-php-xml"
"php$phpversion-php-mbstring"
"php$phpversion-php-mysqli"
"php$phpversion-php-pecl-event"
"php$phpversion-php-process"
"php$phpversion-php-opcache"
)
echo "Installing PHP $phpversion and related packages..." # 输出安装的PHP版本
yum -y install ${packages[@]} # 使用yum安装所有相关PHP包
if [[ $? -eq 0 ]]; then
echo "PHP $phpversion and related packages installed successfully." # 安装成功信息
# 如果PHP安装成功设置默认php路径并安装composer
mv /usr/bin/php /usr/bin/php.back # 备份原有PHP路径
ln -s /usr/bin/php$phpversion /usr/bin/php # 创建新PHP版本的软链接
# 下载并安装Composer
php -r "copy('https://install.phpcomposer.com/installer', 'composer-setup.php');" # 下载Composer安装脚本
php composer-setup.php # 执行Composer安装脚本
mv composer.phar /usr/local/composer # 将Composer可执行文件移动到全局路径
# 如果是中国大陆服务器,配置阿里云镜像
if [[ "$is_china" == "yes" ]]; then
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ # 配置Composer使用阿里云镜像
fi
#开启JIT支持
# 检查 PHP 是否支持 JIT
PHP_BIN="/opt/remi/php${phpversion}/root/usr/bin/php"
if ! $PHP_BIN -v | grep -q "PHP 8."; then
echo "当前 PHP 版本不支持 JIT需要 PHP 8.0 或更高版本)"
exit 1
fi
# 检查是否已安装 opcache 扩展
if ! $PHP_BIN -m | grep -q "opcache"; then
echo "opcache 扩展未安装,无法启用 JIT"
exit 1
fi
# 配置文件路径
OPCACHE_CONF="/etc/opt/remi/php${phpversion}/php.d/10-opcache.ini"
# 确保配置文件存在
if [ ! -f "$OPCACHE_CONF" ]; then
echo "配置文件 $OPCACHE_CONF 不存在,无法修改 JIT 设置"
exit 1
fi
# 删除旧的 JIT 配置并添加新的配置
sudo sed -i '/opcache.jit_buffer_size/d' "$OPCACHE_CONF"
sudo sed -i '/opcache.jit=/d' "$OPCACHE_CONF"
echo -e "\nopcache.jit_buffer_size=100M\nopcache.jit=tracing" | sudo tee -a "$OPCACHE_CONF"
# 提示完成
echo "JIT 配置已成功写入 $OPCACHE_CONF"
else
echo "Failed to install PHP $phpversion. Please check the logs for details." # 安装失败信息
exit 1
fi