2025-01-10 18:09:35 +08:00
|
|
|
|
#!/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
|
2025-01-27 17:45:12 +08:00
|
|
|
|
|
|
|
|
|
#开启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"
|
2025-01-10 18:09:35 +08:00
|
|
|
|
else
|
|
|
|
|
echo "Failed to install PHP $phpversion. Please check the logs for details." # 安装失败信息
|
|
|
|
|
exit 1
|
2025-01-27 17:45:12 +08:00
|
|
|
|
fi
|
|
|
|
|
|