openresty宝塔一键安装opencc插件
侧边栏壁纸
  • 累计撰写 8 篇文章
  • 累计收到 0 条评论

openresty宝塔一键安装opencc插件

cs76
#
2025-03-21 / 0 评论 / 20 阅读 / 正在检测是否收录...

先安装宝塔,再用编译模式安装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

评论 (0)

取消