这个脚本是一个 Bash 脚本,用于在 Debian 系统上自动化安装和配置 GLPI (Gestionnaire Libre de Parc Informatique),一个开源的 IT 资产管理和工单系统。它还配置了中文环境和 LAMP (Linux, Apache, MySQL/MariaDB, PHP) 环境。
脚本功能分解:
-
错误处理和权限检查:
set -e
: 脚本在任何命令失败时立即退出。trap
: 用于捕获错误和调试信息,方便排查问题。- 检查是否以 root 权限运行,因为许多操作需要 root 权限。
-
清理环境:
- 停止并禁用相关的服务(apache2, mysql, mariadb, glpi-agent, php)。
- 卸载相关的软件包及其依赖。
- 删除相关的配置文件和数据目录,确保环境干净。
-
安装基础工具:
- 更新 apt 软件包列表。
- 安装常用的工具,如 curl, wget, git, vim 等,并带有重试机制,以应对网络问题。
-
配置中国区软件源:
- 配置清华大学的 Debian 软件源,如果更新失败则切换到阿里云的源,提高国内下载速度。
-
更新系统:
- 更新系统软件包到最新版本。
-
配置时区和中文支持:
- 设置系统时区为 Asia/Shanghai。
- 安装中文字体和中文语言支持包。
- 配置系统的 locale,使其支持中文。
-
安装 LAMP 环境:
- 安装 Apache Web 服务器。
- 安装 MariaDB 数据库服务器。
- 安装 PHP 及其常用的扩展,包括与数据库连接、处理图像、XML 等的扩展。使用 Sury.org 的仓库安装PHP 8.2。
- 安装其他必要的工具,如 unzip, cron, php-cas。
- 启用 PHP 模块并重启 Apache。
-
配置 MariaDB:
- 运行
mysql_secure_installation
脚本,设置 root 密码和其他安全选项。 - 创建 GLPI 数据库和用户,并授予相应的权限。
- 运行
-
配置 Apache:
- 创建 Apache 配置文件,允许 GLPI 目录的
.htaccess
文件生效。 - 启用 rewrite 模块并重启 Apache。
- 创建 Apache 配置文件,允许 GLPI 目录的
-
下载和安装 GLPI:
- 从 GitHub 获取最新版本的 GLPI 压缩包。
- 解压 GLPI 到 Web 根目录。
- 更改 GLPI 目录的所有者和组为 www-data,以便 Apache 可以访问。
-
下载 GLPI Agent:
- 创建代理程序下载目录。
- 下载 Windows 和 Linux 版本的 GLPI Agent 安装程序。
- 创建 Windows (VBS 和 BAT) 和 Linux 的自动安装脚本,方便客户端部署。
-
配置 GLPI 定时任务:
- 设置 cron 任务,定期运行 GLPI 的 cron 脚本。
-
优化 Apache 和 MariaDB 性能:
- 调整 Apache 的 MPM (Multi-Processing Module) 配置,提高性能。
- 调整 MariaDB 的配置,例如
innodb_buffer_pool_size
和query_cache_size
。
-
完成安装提示:
- 显示 GLPI 的访问地址、数据库信息和代理程序安装文件的位置。
- 建议重启服务器以使所有配置生效。
使用方法:
- 保存脚本: 将脚本保存为一个
.sh
文件,例如install_glpi.sh
。 - 赋予执行权限: 使用
chmod +x install_glpi.sh
命令赋予脚本执行权限。 - 以 root 权限运行: 使用
sudo ./install_glpi.sh
命令以 root 权限运行脚本。 - 访问 GLPI: 安装完成后,通过浏览器访问
http://your_server_ip/glpi
完成 GLPI 的最终配置。请将your_server_ip
替换为服务器的 IP 地址或域名。
重要说明:
- 替换占位符: 脚本中有多处需要替换的占位符,例如
glpi_admin_pass
(MariaDB root 密码)、glpi_pass
(GLPI 数据库用户密码)和http://your_glpi_server/glpi
(GLPI 服务器 URL),请根据实际情况进行修改。 - 网络连接: 脚本需要良好的网络连接才能下载软件包和 GLPI。
- 防火墙: 如果服务器启用了防火墙,请确保开放 80 端口(HTTP)和 443 端口(HTTPS,如果配置了)。
- 服务器资源: 运行 GLPI 需要一定的服务器资源,请根据实际情况进行配置。
- 代理程序安装脚本: 脚本创建了简易的代理程序安装脚本,实际使用中可能需要根据具体需求进行调整。
- 中文环境: 脚本配置了中文环境,但部分 GLPI 界面可能仍然是英文,需要通过 GLPI 的语言设置进行调整。
#!/bin/bash
# 设置错误处理
set -e
trap 'last_command=$current_command; current_command=$BASH_COMMAND' DEBUG
trap 'echo -e "${RED}错误: 命令 \"${last_command}\" 失败,退出代码 $?${NC}"' ERR
# 检查是否以root权限运行
if [[ $EUID -ne 0 ]]; then
echo -e "${RED}此脚本必须以root权限运行${NC}"
exit 1
fi
# 清理环境
echo -e "${GREEN}开始清理环境...${NC}"
# 确保所有服务停止
echo -e "${GREEN}停止所有相关服务...${NC}"
for service in apache2 mysql mysqld mariadb glpi-agent php*; do
systemctl stop $service 2>/dev/null || true
systemctl disable $service 2>/dev/null || true
done
# 完全卸载相关包及其依赖
echo -e "${GREEN}卸载旧软件包...${NC}"
apt-get purge -y apache2* apache* mysql* mariadb* php* glpi* 2>/dev/null || true
apt-get autoremove -y --purge
apt-get clean
# 彻底清理配置文件和数据
echo -e "${GREEN}清理配置文件和数据...${NC}"
directories=(
"/etc/apache2"
"/etc/mysql"
"/etc/php*"
"/var/www/html/*"
"/var/lib/mysql*"
"/var/lib/apache2"
"/var/lib/php*"
"/var/log/apache2"
"/var/log/mysql"
"/var/log/php*"
"/etc/apt/sources.list.d/*"
"/var/cache/apt/*"
"/run/mysqld"
"/run/apache2"
"/run/php*"
)
for dir in "${directories[@]}"; do
rm -rf $dir 2>/dev/null || true
done
# 安装基础工具
echo -e "${GREEN}安装基础工具...${NC}"
# 首先更新apt缓存
apt-get update || {
echo -e "${RED}更新软件源失败,请检查网络连接${NC}"
exit 1
}
# 安装基础工具包,带重试机制
basic_tools=(
"curl"
"wget"
"git"
"vim"
"net-tools"
"sudo"
"lsb-release"
"gnupg2"
"ca-certificates"
"apt-transport-https"
"software-properties-common"
)
for tool in "${basic_tools[@]}"; do
for i in {1..3}; do
echo -e "${GREEN}正在安装 $tool (尝试 $i/3)${NC}"
apt-get install -y $tool && break || {
if [ $i -eq 3 ]; then
echo -e "${RED}安装 $tool 失败${NC}"
exit 1
fi
echo -e "${YELLOW}重试安装 $tool...${NC}"
sleep 5
}
done
done
# 配置中国区软件源
echo -e "${GREEN}配置中国区软件源...${NC}"
cat > /etc/apt/sources.list <<EOF
# 清华大学源
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm main contrib non-free non-free-firmware
deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm main contrib non-free non-free-firmware
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm-updates main contrib non-free non-free-firmware
deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm-updates main contrib non-free non-free-firmware
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm-backports main contrib non-free non-free-firmware
deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm-backports main contrib non-free non-free-firmware
deb https://mirrors.tuna.tsinghua.edu.cn/debian-security bookworm-security main contrib non-free non-free-firmware
deb-src https://mirrors.tuna.tsinghua.edu.cn/debian-security bookworm-security main contrib non-free non-free-firmware
EOF
# 更新软件包列表
echo -e "${GREEN}更新软件包列表...${NC}"
apt-get update || {
echo -e "${RED}更新软件源失败,尝试使用备用源${NC}"
# 启用阿里云源
cat > /etc/apt/sources.list <<EOF
# 阿里云源
deb https://mirrors.aliyun.com/debian/ bookworm main contrib non-free non-free-firmware
deb-src https://mirrors.aliyun.com/debian/ bookworm main contrib non-free non-free-firmware
deb https://mirrors.aliyun.com/debian/ bookworm-updates main contrib non-free non-free-firmware
deb-src https://mirrors.aliyun.com/debian/ bookworm-updates main contrib non-free non-free-firmware
deb https://mirrors.aliyun.com/debian/ bookworm-backports main contrib non-free non-free-firmware
deb-src https://mirrors.aliyun.com/debian/ bookworm-backports main contrib non-free non-free-firmware
deb https://mirrors.aliyun.com/debian-security bookworm-security main contrib non-free non-free-firmware
deb-src https://mirrors.aliyun.com/debian-security bookworm-security main contrib non-free non-free-firmware
EOF
apt-get update || {
echo -e "${RED}更新软件源失败,请检查网络连接${NC}"
exit 1
}
}
# 更新系统
echo -e "${GREEN}正在更新系统...${NC}"
DEBIAN_FRONTEND=noninteractive apt-get upgrade -y || {
echo -e "${RED}系统更新失败${NC}"
exit 1
}
# 设置时区为中国时区
echo -e "${GREEN}设置系统时区为Asia/Shanghai...${NC}"
timedatectl set-timezone Asia/Shanghai || {
echo -e "${RED}时区设置失败${NC}"
exit 1
}
# 安装中文字体和中文语言支持
echo -e "${GREEN}安装中文支持和字体...${NC}"
DEBIAN_FRONTEND=noninteractive apt-get install -y \
locales \
locales-all \
task-chinese-s \
task-chinese-s-desktop \
fonts-wqy-zenhei \
fonts-wqy-microhei \
xfonts-wqy \
fonts-arphic-ukai \
fonts-arphic-uming || {
echo -e "${RED}中文支持安装失败${NC}"
exit 1
}
# 配置中文语言环境
echo -e "${GREEN}配置中文语言环境...${NC}"
if [ ! -f /usr/sbin/locale-gen ]; then
echo -e "${YELLOW}locale-gen 未找到,重新安装 locales...${NC}"
apt-get install --reinstall locales
fi
# 生成中文语言环境
sed -i 's/# zh_CN.UTF-8 UTF-8/zh_CN.UTF-8 UTF-8/' /etc/locale.gen
/usr/sbin/locale-gen || {
echo -e "${RED}生成语言环境失败${NC}"
exit 1
}
# 直接设置默认语言环境
echo -e "${GREEN}设置系统默认语言...${NC}"
cat > /etc/default/locale <<EOF
LANG=zh_CN.UTF-8
LANGUAGE=zh_CN:zh
LC_ALL=zh_CN.UTF-8
EOF
# 配置中文环境变量
cat > /etc/environment <<EOF
LANG=zh_CN.UTF-8
LANGUAGE=zh_CN:zh
LC_ALL=zh_CN.UTF-8
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
EOF
# 立即应用环境变量
export LANG=zh_CN.UTF-8
export LANGUAGE=zh_CN:zh
export LC_ALL=zh_CN.UTF-8
export PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:$PATH"
# 安装LAMP环境
echo -e "${GREEN}正在安装LAMP环境...${NC}"
# 清理PHP相关包
echo -e "${GREEN}清理PHP相关包...${NC}"
apt-get remove -y php* libapache2-mod-php* || true
apt-get autoremove -y
apt-get clean
# 按顺序安装LAMP组件
echo -e "${GREEN}安装Apache...${NC}"
DEBIAN_FRONTEND=noninteractive apt-get install -y apache2 || {
echo -e "${RED}Apache安装失败${NC}"
exit 1
}
echo -e "${GREEN}安装MariaDB...${NC}"
DEBIAN_FRONTEND=noninteractive apt-get install -y mariadb-server mariadb-client || {
echo -e "${RED}MariaDB安装失败${NC}"
exit 1
}
echo -e "${GREEN}安装PHP及其扩展...${NC}"
# 添加PHP 8.2仓库
curl -sSL https://packages.sury.org/php/apt.gpg -o /etc/apt/trusted.gpg.d/php.gpg
echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list
apt-get update
# 一次性安装所有PHP包
DEBIAN_FRONTEND=noninteractive apt-get install -y \
php8.2 \
php8.2-common \
php8.2-cli \
php8.2-mysql \
php8.2-curl \
php8.2-gd \
php8.2-intl \
php8.2-xml \
php8.2-mbstring \
php8.2-zip \
php8.2-bz2 \
php8.2-ldap \
php8.2-apcu \
php8.2-xmlrpc \
php8.2-imap \
libapache2-mod-php8.2 || {
echo -e "${RED}PHP安装失败${NC}"
exit 1
}
# 安装其他必要的包
echo -e "${GREEN}安装其他必要包...${NC}"
DEBIAN_FRONTEND=noninteractive apt-get install -y \
unzip \
cron \
php-cas || {
echo -e "${RED}其他包安装失败${NC}"
exit 1
}
# 配置PHP时区支持
echo -e "${GREEN}配置PHP时区支持...${NC}"
PHP_VERSION=$(php -r "echo PHP_MAJOR_VERSION.'.'.PHP_MINOR_VERSION;")
PHP_INI_DIR="/etc/php/${PHP_VERSION}/apache2"
PHP_INI_CLI_DIR="/etc/php/${PHP_VERSION}/cli"
# 配置Apache PHP
if [ -f "${PHP_INI_DIR}/php.ini" ]; then
sed -i 's/;date.timezone =.*/date.timezone = Asia\/Shanghai/' "${PHP_INI_DIR}/php.ini"
sed -i 's/^date.timezone =.*/date.timezone = Asia\/Shanghai/' "${PHP_INI_DIR}/php.ini"
# 如果没有timezone配置项,则添加
grep -q "date.timezone = Asia/Shanghai" "${PHP_INI_DIR}/php.ini" || \
echo "date.timezone = Asia/Shanghai" >> "${PHP_INI_DIR}/php.ini"
fi
# 配置CLI PHP
if [ -f "${PHP_INI_CLI_DIR}/php.ini" ]; then
sed -i 's/;date.timezone =.*/date.timezone = Asia\/Shanghai/' "${PHP_INI_CLI_DIR}/php.ini"
sed -i 's/^date.timezone =.*/date.timezone = Asia\/Shanghai/' "${PHP_INI_CLI_DIR}/php.ini"
# 如果没有timezone配置项,则添加
grep -q "date.timezone = Asia/Shanghai" "${PHP_INI_CLI_DIR}/php.ini" || \
echo "date.timezone = Asia/Shanghai" >> "${PHP_INI_CLI_DIR}/php.ini"
fi
# 启用PHP模块
a2enmod php8.2
systemctl restart apache2
# 确保MariaDB服务启动
echo -e "${GREEN}启动MariaDB服务...${NC}"
systemctl enable mariadb
systemctl start mariadb
sleep 5 # 等待服务完全启动
# 配置MariaDB
echo -e "${GREEN}配置MariaDB...${NC}"
if ! command -v mysql_secure_installation &> /dev/null; then
echo -e "${RED}mysql_secure_installation 未找到,重新安装MariaDB...${NC}"
apt-get install --reinstall mariadb-server
fi
# 配置MariaDB root密码和安全设置
mysql_secure_installation <<EOD
\n
y
glpi_admin_pass
glpi_admin_pass
y
y
y
y
EOD
# 创建GLPI数据库
echo -e "${GREEN}创建GLPI数据库...${NC}"
mysql -u root -p'glpi_admin_pass' <<EOSQL
CREATE DATABASE IF NOT EXISTS glpi CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER IF NOT EXISTS 'glpi'@'localhost' IDENTIFIED BY 'glpi_pass';
GRANT ALL PRIVILEGES ON glpi.* TO 'glpi'@'localhost';
FLUSH PRIVILEGES;
EOSQL
# 配置Apache
echo -e "${GREEN}配置Apache...${NC}"
cat > /etc/apache2/conf-available/glpi.conf <<EOF
<Directory /var/www/html/glpi>
AllowOverride All
Options -Indexes
</Directory>
EOF
a2enconf glpi
a2enmod rewrite
systemctl restart apache2
# 下载并安装最新版GLPI
echo -e "${GREEN}下载并安装GLPI...${NC}"
cd /tmp
for i in {1..3}; do
echo -e "${GREEN}尝试下载GLPI (尝试 $i/3)${NC}"
GLPI_VERSION=$(curl -m 30 -s https://api.github.com/repos/glpi-project/glpi/releases/latest | grep tag_name | cut -d '"' -f 4)
if [ -n "$GLPI_VERSION" ]; then
wget --timeout=30 --tries=3 -O glpi.tgz \
https://github.com/glpi-project/glpi/releases/download/${GLPI_VERSION}/glpi-${GLPI_VERSION}.tgz && break || {
if [ $i -eq 3 ]; then
echo -e "${RED}下载GLPI失败${NC}"
exit 1
fi
echo -e "${YELLOW}重试下载GLPI...${NC}"
sleep 5
}
else
if [ $i -eq 3 ]; then
echo -e "${RED}获取GLPI版本信息失败${NC}"
exit 1
fi
echo -e "${YELLOW}重试获取GLPI版本信息...${NC}"
sleep 5
fi
done
# 解压和安装GLPI
tar xzf glpi.tgz || {
echo -e "${RED}解压GLPI失败${NC}"
exit 1
}
rm -rf /var/www/html/glpi
mv glpi /var/www/html/
chown -R www-data:www-data /var/www/html/glpi
# 下载GLPI Agent
echo -e "${GREEN}下载GLPI Agent...${NC}"
mkdir -p /var/www/html/glpi/files/_downloads/agents
cd /var/www/html/glpi/files/_downloads/agents
# 下载Windows和Linux客户端
for i in {1..3}; do
echo -e "${GREEN}尝试下载GLPI Agent (尝试 $i/3)${NC}"
AGENT_WIN_VERSION=$(curl -m 30 -s https://api.github.com/repos/glpi-project/glpi-agent/releases/latest | grep tag_name | cut -d '"' -f 4)
if [ -n "$AGENT_WIN_VERSION" ]; then
wget --timeout=30 --tries=3 \
https://github.com/glpi-project/glpi-agent/releases/download/${AGENT_WIN_VERSION}/GLPI-Agent-${AGENT_WIN_VERSION}-x64.msi && \
wget --timeout=30 --tries=3 \
https://github.com/glpi-project/glpi-agent/releases/download/${AGENT_WIN_VERSION}/glpi-agent-${AGENT_WIN_VERSION}-linux-installer.pl && break || {
if [ $i -eq 3 ]; then
echo -e "${RED}下载GLPI Agent失败${NC}"
exit 1
fi
echo -e "${YELLOW}重试下载GLPI Agent...${NC}"
sleep 5
}
else
if [ $i -eq 3 ]; then
echo -e "${RED}获取GLPI Agent版本信息失败${NC}"
exit 1
fi
echo -e "${YELLOW}重试获取GLPI Agent版本信息...${NC}"
sleep 5
fi
done
# 创建Windows自动安装脚本(VBS版本)
cat > /var/www/html/glpi/files/_downloads/agents/install_agent.vbs <<EOF
Option Explicit
Dim objShell, strCommand, strServerUrl, strTag
' 设置GLPI服务器URL
strServerUrl = "http://your_glpi_server/glpi"
' 设置客户端标签(可选)
strTag = "Windows_Client"
' 创建Shell对象
Set objShell = CreateObject("WScript.Shell")
' 构建安装命令,包含所有静默安装参数
strCommand = "msiexec /i GLPI-Agent-" & "${AGENT_WIN_VERSION}" & "-x64.msi" & _
" /quiet" & _
" RUNNOW=1" & _
" SERVER=""" & strServerUrl & """" & _
" TAG=""" & strTag & """" & _
" ACCEPT_LICENSE=1" & _
" SCAN_HOMEDIRS=1" & _
" SCAN_PROFILES=1" & _
" TASKS=""inventory,netdiscovery,netinventory,collect,deploy""" & _
" DEBUG=0"
' 执行安装命令
objShell.Run strCommand, 0, True
Set objShell = Nothing
EOF
# 创建Windows批处理安装脚本
cat > /var/www/html/glpi/files/_downloads/agents/install_agent.bat <<EOF
@echo off
set GLPI_SERVER=http://your_glpi_server/glpi
set CLIENT_TAG=Windows_Client
msiexec /i "GLPI-Agent-${AGENT_WIN_VERSION}-x64.msi" ^
/quiet ^
RUNNOW=1 ^
SERVER="%GLPI_SERVER%" ^
TAG="%CLIENT_TAG%" ^
ACCEPT_LICENSE=1 ^
SCAN_HOMEDIRS=1 ^
SCAN_PROFILES=1 ^
TASKS="inventory,netdiscovery,netinventory,collect,deploy" ^
DEBUG=0
exit /b 0
EOF
# 创建Linux自动安装脚本
cat > /var/www/html/glpi/files/_downloads/agents/install_agent.sh <<EOF
#!/bin/bash
# GLPI服务器URL
GLPI_SERVER="http://your_glpi_server/glpi"
# 客户端标签(可选)
CLIENT_TAG="Linux_Client"
# 检查是否为root用户
if [[ \$EUID -ne 0 ]]; then
echo "此脚本必须以root权限运行"
exit 1
fi
# 下载并安装GLPI Agent
echo "正在安装GLPI Agent..."
perl glpi-agent-${AGENT_WIN_VERSION}-linux-installer.pl \
--quiet \
--server="\${GLPI_SERVER}" \
--tag="\${CLIENT_TAG}" \
--runnow \
--scan-homedirs \
--scan-profiles \
--tasks="inventory,netdiscovery,netinventory,collect,deploy" \
--debug=0
# 设置开机自启动
if [ -f /etc/systemd/system/glpi-agent.service ]; then
systemctl enable glpi-agent
systemctl start glpi-agent
fi
echo "GLPI Agent 安装完成"
EOF
chmod +x /var/www/html/glpi/files/_downloads/agents/install_agent.sh
chown -R www-data:www-data /var/www/html/glpi/files/_downloads
# 配置GLPI定时任务
echo -e "${GREEN}配置GLPI定时任务...${NC}"
echo "*/2 * * * * www-data /usr/bin/php /var/www/html/glpi/front/cron.php" > /etc/cron.d/glpi
# 优化Apache性能
echo -e "${GREEN}优化Apache性能...${NC}"
cat > /etc/apache2/mods-available/mpm_prefork.conf <<EOF
<IfModule mpm_prefork_module>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxRequestWorkers 150
MaxConnectionsPerChild 0
</IfModule>
EOF
# 优化MariaDB性能
echo -e "${GREEN}优化MariaDB性能...${NC}"
cat >> /etc/mysql/mariadb.conf.d/50-server.cnf <<EOF
innodb_buffer_pool_size = 1G
innodb_log_file_size = 256M
innodb_flush_log_at_trx_commit = 2
innodb_flush_method = O_DIRECT
query_cache_type = 1
query_cache_size = 128M
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
EOF
# 配置中文环境变量
cat >> /etc/environment <<EOF
LANG=zh_CN.UTF-8
LANGUAGE=zh_CN:zh
LC_ALL=zh_CN.UTF-8
EOF
# 重启服务
systemctl restart apache2 || echo -e "${YELLOW}警告: Apache重启失败${NC}"
systemctl restart mariadb || echo -e "${YELLOW}警告: MariaDB重启失败${NC}"
echo -e "${GREEN}GLPI安装完成!${NC}"
echo -e "${GREEN}请访问 http://your_server_ip/glpi 完成最终配置${NC}"
echo -e "${GREEN}数据库信息:${NC}"
echo "数据库名:glpi"
echo "用户名:glpi"
echo "密码:glpi_pass"
echo -e "${GREEN}代理程序安装文件位于:/var/www/html/glpi/files/_downloads/agents/${NC}"
echo -e "${GREEN}中文环境配置完成!${NC}"
echo -e "${GREEN}建议重启服务器以确保所有配置生效${NC}"