先安装宝塔,再用编译模式安装openresty
再执行以下一键脚本即可完成opencc的安装
#!/bin/bash
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[0;33m'
NC='\033[0m' # 无颜色
# 日志函数
log_info() {
echo -e "${GREEN}[INFO]${NC} $1"
}
log_warn() {
echo -e "${YELLOW}[WARN]${NC} $1"
}
log_error() {
echo -e "${RED}[ERROR]${NC} $1"
}
# 检查命令执行结果
check_result() {
if [ $? -ne 0 ]; then
log_error "$1"
exit 1
else
log_info "$2"
fi
}
# 检测操作系统类型和版本
detect_os() {
if [ -f /etc/os-release ]; then
. /etc/os-release
OS=$ID
VERSION_ID=$VERSION_ID
log_info "检测到操作系统: $OS $VERSION_ID"
else
log_error "无法检测操作系统类型"
exit 1
fi
# 检查支持的操作系统
case "$OS" in
"centos"|"rhel"|"almalinux"|"rocky")
if [[ "$VERSION_ID" =~ ^[789].*$ ]]; then
PACKAGE_MANAGER="yum"
else
log_error "不支持的 $OS 版本: $VERSION_ID (需要 7/8/9)"
exit 1
fi
;;
"debian")
if [[ "$VERSION_ID" =~ ^1[012].*$ ]]; then
PACKAGE_MANAGER="apt-get"
else
log_error "不支持的 Debian 版本: $VERSION_ID (需要 10/11/12)"
exit 1
fi
;;
"ubuntu")
PACKAGE_MANAGER="apt-get"
;;
*)
log_error "不支持的操作系统: $OS"
exit 1
;;
esac
}
# 安装依赖
install_dependencies() {
log_info "正在安装编译依赖..."
if [ "$PACKAGE_MANAGER" = "yum" ]; then
yum update -y
check_result "系统更新失败" "系统更新成功"
yum install -y git wget curl make gcc gcc-c++ pcre-devel openssl-devel zlib-devel cmake autoconf automake libtool perl-devel
check_result "依赖安装失败" "依赖安装成功"
else
apt-get update
check_result "系统更新失败" "系统更新成功"
apt-get install -y git wget curl build-essential libpcre3-dev libssl-dev zlib1g-dev cmake autoconf automake libtool perl libperl-dev
check_result "依赖安装失败" "依赖安装成功"
fi
}
# 安装 OpenCC 1.1.8
install_opencc() {
log_info "开始安装 OpenCC 1.1.8..."
cd /tmp
wget https://github.com/BYVoid/OpenCC/archive/refs/tags/ver.1.1.8.tar.gz -O opencc-1.1.8.tar.gz
check_result "下载 OpenCC 失败" "OpenCC 源码下载成功"
tar xf opencc-1.1.8.tar.gz
check_result "解压 OpenCC 失败" "OpenCC 源码解压成功"
cd OpenCC-ver.1.1.8
mkdir build
cd build
cmake -DCMAKE_INSTALL_PREFIX=/usr -DBUILD_SHARED_LIBS=ON -DENABLE_DOXYGEN_DOC=OFF ..
check_result "OpenCC 配置失败" "OpenCC 配置成功"
make -j$(nproc)
check_result "OpenCC 编译失败" "OpenCC 编译成功"
make install
check_result "OpenCC 安装失败" "OpenCC 1.1.8 安装成功"
ldconfig
log_info "OpenCC 1.1.8 库已添加到系统路径"
}
# 安装最新版 LuaJIT
install_luajit() {
log_info "开始安装最新版 LuaJIT..."
cd /tmp
git clone https://github.com/LuaJIT/LuaJIT.git
check_result "克隆 LuaJIT 仓库失败" "LuaJIT 仓库克隆成功"
cd LuaJIT
make -j$(nproc)
check_result "LuaJIT 编译失败" "LuaJIT 编译成功"
make install PREFIX=/usr/local
check_result "LuaJIT 安装失败" "LuaJIT 安装成功"
ln -sf /usr/local/lib/libluajit-5.1.so.2 /usr/lib/libluajit-5.1.so.2
ln -sf /usr/local/lib/libluajit-5.1.so.2 /usr/lib64/libluajit-5.1.so.2 2>/dev/null || true
ldconfig
log_info "LuaJIT 库已添加到系统路径"
}
# 下载并编译 OpenResty
download_and_compile_openresty() {
log_info "开始下载和编译 OpenResty..."
# 获取最新稳定版 OpenResty 版本
LATEST_VERSION=$(curl -s https://openresty.org/en/download.html | grep -o "openresty-[0-9.]*\.tar\.gz" | head -1 | sed 's/openresty-//;s/\.tar\.gz//')
if [ -z "$LATEST_VERSION" ]; then
LATEST_VERSION="1.21.4.2" # 默认版本,以防无法获取最新版本
log_warn "无法获取最新 OpenResty 版本,将使用默认版本: $LATEST_VERSION"
else
log_info "获取到最新 OpenResty 版本: $LATEST_VERSION"
fi
cd /tmp
wget "https://openresty.org/download/openresty-$LATEST_VERSION.tar.gz"
check_result "下载 OpenResty 失败" "OpenResty 源码下载成功"
tar xf "openresty-$LATEST_VERSION.tar.gz"
check_result "解压 OpenResty 失败" "OpenResty 源码解压成功"
cd "openresty-$LATEST_VERSION"
# 配置 OpenResty,增加 OpenCC 和 LuaJIT 支持
./configure \
--prefix=/www/server/openresty \
--with-luajit=/usr/local \
--with-cc-opt="-I/usr/local/include" \
--with-ld-opt="-Wl,-rpath,/usr/local/lib" \
--with-http_ssl_module \
--with-http_v2_module \
--with-http_realip_module \
--with-http_addition_module \
--with-http_sub_module \
--with-http_dav_module \
--with-http_flv_module \
--with-http_mp4_module \
--with-http_gunzip_module \
--with-http_gzip_static_module \
--with-http_auth_request_module \
--with-http_random_index_module \
--with-http_secure_link_module \
--with-http_stub_status_module
check_result "OpenResty 配置失败" "OpenResty 配置成功"
make -j$(nproc)
check_result "OpenResty 编译失败" "OpenResty 编译成功"
# 如果已安装 OpenResty 或 Nginx,先停止
if [ -f "/www/server/nginx/sbin/nginx" ]; then
log_info "检测到已安装 Nginx,准备停止服务..."
/etc/init.d/nginx stop 2>/dev/null || true
fi
if [ -f "/www/server/openresty/nginx/sbin/nginx" ]; then
log_info "检测到已安装 OpenResty,准备停止服务..."
/etc/init.d/openresty stop 2>/dev/null || true
fi
# 如果存在旧的 Nginx 目录,备份
if [ -d "/www/server/nginx" ]; then
log_info "备份现有 Nginx 目录..."
mv /www/server/nginx /www/server/nginx.bak.$(date +%Y%m%d%H%M%S)
fi
# 如果存在旧的 OpenResty 目录,备份
if [ -d "/www/server/openresty" ]; then
log_info "备份现有 OpenResty 目录..."
mv /www/server/openresty /www/server/openresty.bak.$(date +%Y%m%d%H%M%S)
fi
make install
check_result "OpenResty 安装失败" "OpenResty 安装成功"
# 创建从 OpenResty 到 Nginx 的符号链接
ln -sf /www/server/openresty/nginx /www/server/nginx
check_result "创建 Nginx 符号链接失败" "创建 Nginx 符号链接成功"
# 如果有旧的配置,复制回来
if [ -d "/www/server/nginx.bak.*/conf" ]; then
LATEST_BACKUP=$(ls -td /www/server/nginx.bak.* | head -1)
log_info "从备份 $LATEST_BACKUP 恢复 Nginx 配置..."
cp -rf $LATEST_BACKUP/conf/* /www/server/nginx/conf/
check_result "恢复 Nginx 配置失败" "恢复 Nginx 配置成功"
fi
# 创建启动脚本
cat > /etc/init.d/nginx << 'EOL'
#!/bin/bash
# chkconfig: 2345 55 25
# description: Nginx Service Control Script
# processname: nginx
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
NGINX_PATH=/www/server/nginx
case "$1" in
start)
echo -n "Starting Nginx... "
$NGINX_PATH/sbin/nginx
echo "done"
;;
stop)
echo -n "Stopping Nginx... "
$NGINX_PATH/sbin/nginx -s stop
echo "done"
;;
restart)
echo -n "Restarting Nginx... "
$NGINX_PATH/sbin/nginx -s stop
sleep 1
$NGINX_PATH/sbin/nginx
echo "done"
;;
reload)
echo -n "Reloading Nginx configuration... "
$NGINX_PATH/sbin/nginx -s reload
echo "done"
;;
status)
if pidof nginx > /dev/null; then
echo "Nginx is running"
else
echo "Nginx is not running"
exit 1
fi
;;
*)
echo "Usage: $0 {start|stop|restart|reload|status}"
exit 1
;;
esac
exit 0
EOL
chmod +x /etc/init.d/nginx
# 创建 OpenResty 的启动脚本链接
ln -sf /etc/init.d/nginx /etc/init.d/openresty
# 设置开机启动
if [ "$PACKAGE_MANAGER" = "yum" ]; then
chkconfig --add nginx
chkconfig nginx on
else
update-rc.d nginx defaults
fi
# 启动 Nginx 服务
/etc/init.d/nginx start
check_result "启动 Nginx 服务失败" "启动 Nginx 服务成功"
log_info "OpenResty 已安装并配置为 Nginx 服务"
}
# 主函数
main() {
log_info "开始执行 OpenResty 环境配置脚本..."
# 检查是否具有 root 权限
if [ "$(id -u)" != "0" ]; then
log_error "此脚本需要 root 权限执行"
exit 1
fi
# 检查宝塔面板是否已安装
if [ ! -d "/www/server/panel" ]; then
log_warn "未检测到宝塔面板,将继续执行但某些功能可能受限"
fi
# 执行安装流程
detect_os
install_dependencies
install_opencc
install_luajit
download_and_compile_openresty
log_info "======================================"
log_info "安装完成! OpenResty 已配置以下组件:"
log_info "- OpenCC 1.1.8"
log_info "- 最新版 LuaJIT"
log_info "- OpenResty 已安装到 /www/server/openresty"
log_info "- Nginx 符号链接已创建在 /www/server/nginx"
log_info "======================================"
log_info "您可以使用以下命令控制服务:"
log_info "- 启动: /etc/init.d/nginx start"
log_info "- 停止: /etc/init.d/nginx stop"
log_info "- 重启: /etc/init.d/nginx restart"
log_info "- 重载配置: /etc/init.d/nginx reload"
log_info "======================================"
}
# 执行主函数
main
评论 (0)