Đánh giá Hosting

Menu
  • Home
  • Tin tức
  • Đánh giá
    • Dịch vụ hosting chia sẻ
    • Dịch vụ máy chủ ảo
    • Dịch vụ máy chủ riêng
  • Quản trị
  • Khuyến mãi
  • Làm Web
  • Thủ thuật
  • MMO
Home
Quản trị
Script Tự Động Cài Đặt IonCube Loader cho Webinoly
Quản trị

Script Tự Động Cài Đặt IonCube Loader cho Webinoly

Hoàng Trung October 7, 2025

Bạn đang sử dụng Webinoly để quản lý server LEMP (Linux, Nginx, MySQL/MariaDB, PHP) trên Ubuntu và cần triển khai IonCube Loader để chạy các ứng dụng PHP mã hóa? Script tự động cài đặt IonCube Loader phiên bản 1.0 là giải pháp hoàn hảo, giúp bạn cài đặt IonCube một cách nhanh chóng, an toàn và hiệu quả.

Ioncube loader

IonCube Loader là một extension PHP cần thiết để chạy các file PHP được mã hóa, thường được yêu cầu bởi các ứng dụng thương mại như WHMCS, phần mềm quản lý hosting, hoặc các plugin/theme WordPress cao cấp. Mặc dù Webinoly cung cấp một stack LEMP mạnh mẽ với các lệnh đơn giản để quản lý Nginx, PHP, và MariaDB, nó không tích hợp sẵn IonCube Loader. Việc cài đặt IonCube Loader không quá phức tạp, tuy nhiên nếu cài đặt thủ công có thể tốn thời gian, dễ xảy ra lỗi, và đòi hỏi kiến thức về cấu hình PHP. Script install_ioncube_webinoly_v1.0.sh ra đời để tự động hóa toàn bộ quy trình, từ phát hiện phiên bản PHP, tải file, cấu hình, đến xác nhận hoạt động. Với script này, bạn có thể cài đặt IonCube Loader chỉ trong vài phút, ngay cả khi mới làm quen với quản trị server, mang lại sự tiện lợi vượt trội cho các ứng dụng yêu cầu IonCube như WHMCS hay plugin WordPress mã hóa.

Tính năng nổi bật của Script v1.0

  • Tự động phát hiện và cài đặt: Tự động nhận diện phiên bản PHP (7.4–8.3) và chọn file IonCube Loader phù hợp. Nếu không tìm thấy loader chính xác, script sẽ fallback sang phiên bản gần nhất hoặc mới nhất, đảm bảo tương thích tối đa.
  • Cấu hình chuẩn hóa: Tạo file cấu hình 20-ioncube.ini trong thư mục mods-available và sử dụng symlink cho cả PHP-FPM và CLI, tuân theo chuẩn cấu hình PHP trên Ubuntu, dễ dàng bảo trì và gỡ bỏ.
  • Kiểm tra toàn diện: Kiểm tra quyền root, kết nối mạng, trạng thái PHP-FPM, cấu hình Nginx, và quyền ghi thư mục extension, đảm bảo quá trình cài đặt diễn ra suôn sẻ.
  • Ghi log chi tiết: Lưu toàn bộ quá trình vào /var/log/ioncube_install.log với dấu thời gian, giúp dễ dàng theo dõi và xử lý sự cố.
  • Dọn dẹp an toàn: Tự động xóa file tạm sau khi hoàn tất hoặc khi gặp lỗi, giữ server sạch sẽ.
  • Hỗ trợ tùy chỉnh: Cho phép chỉ định phiên bản PHP qua tham số (ví dụ: ./script.sh 8.1), phù hợp với server chạy nhiều phiên bản PHP.

Hướng dẫn sử dụng

Cài đặt IonCube Loader với script v1.0 rất đơn giản. Dưới đây là các bước chi tiết, với mã nguồn được định dạng để hiển thị đẹp mắt bằng plugin Enlighter:

1. Tạo script:

Lưu script vào file install_ioncube_webinoly_v1.0.sh:

sudo nano install_ioncube_webinoly_v1.0.sh

Dán nội dung script dưới đây, lưu và thoát.

#!/bin/bash
# ==========================================================
# Script: Cài đặt IonCube Loader cho Webinoly (v1.0)
# Mục đích: Hỗ trợ PHP 7.4–8.3, dò loader mới nhất, fallback, log chi tiết
# Phiên bản: v1.0 (07/10/2025)
# Log: /var/log/ioncube_install.log
# ==========================================================

set -euo pipefail
trap 'rm -rf "/tmp/ioncube" "ioncube_loaders.tar.gz" 2>/dev/null' EXIT

LOG_FILE="/var/log/ioncube_install.log"
mkdir -p "$(dirname "$LOG_FILE")"
chmod 644 "$LOG_FILE" 2>/dev/null || true
exec > >(tee -a "$LOG_FILE") 2>&1
echo "=== IONCUBE INSTALL START: $(date '+%Y-%m-%d %H:%M:%S') ==="

# --- Root check ---
if [[ $EUID -ne 0 ]]; then
    echo "❌ Lỗi: script phải chạy với quyền root."
    exit 1
fi

# --- PHP version param or autodetect ---
if [[ ${1-} ]]; then
    PHP_VERSION="$1"
    if [[ ! -d "/etc/php/$PHP_VERSION" ]]; then
        echo "❌ Lỗi: PHP $PHP_VERSION không tồn tại tại /etc/php/$PHP_VERSION"
        exit 1
    fi
else
    PHP_VERSION=$(ls /etc/php | grep -E '^[0-9]+\.[0-9]+$' | sort -V | tail -n1 || true)
fi

if [[ -z "${PHP_VERSION:-}" ]]; then
    echo "❌ Lỗi: Không tìm thấy PHP trên hệ thống. Cài đặt PHP trước (VD: sudo webinoly -stack)."
    exit 1
fi

echo "🔹 Target PHP version: $PHP_VERSION"
echo "🔹 PHP CLI: $(php -v | head -n1 || true)"

# --- Kiểm tra binary PHP-FPM (gợi ý 3) ---
FPM_BIN=$(command -v "php-fpm${PHP_VERSION//./}" || command -v php-fpm || true)
if [[ -x "$FPM_BIN" ]]; then
    echo "🔹 PHP-FPM binary: $FPM_BIN"
    echo "🔹 PHP-FPM version: $($FPM_BIN -v | head -n1 || true)"
else
    echo "⚠️ Không tìm thấy php-fpm binary, bỏ qua kiểm tra."
fi

# --- Ensure php-fpm service exists / start if necessary ---
if systemctl list-units --full -all | grep -q "php${PHP_VERSION}-fpm.service"; then
    if ! systemctl is-active --quiet "php${PHP_VERSION}-fpm"; then
        echo "⚠️ php${PHP_VERSION}-fpm không active, thử khởi động..."
        systemctl start "php${PHP_VERSION}-fpm" || {
            echo "❌ Không thể khởi động php${PHP_VERSION}-fpm; kiểm tra bằng: systemctl status php${PHP_VERSION}-fpm"
            exit 1
        }
    fi
else
    echo "⚠️ Không tìm thấy php${PHP_VERSION}-fpm.service — tiếp tục nhưng có thể cần cấu hình thủ công."
fi

# --- Version numeric compare (warn for >8.1) ---
PHP_MAJOR=$(echo "$PHP_VERSION" | cut -d. -f1)
PHP_MINOR=$(echo "$PHP_VERSION" | cut -d. -f2)
if (( PHP_MAJOR > 8 || (PHP_MAJOR == 8 && PHP_MINOR > 1) )); then
    echo "⚠️ Cảnh báo: IonCube có thể chưa hỗ trợ đầy đủ PHP $PHP_VERSION. Kiểm tra https://www.ioncube.com/loaders.php"
    read -p "→ Có tiếp tục? (y/N): " CONF
    [[ "$CONF" != "y" && "$CONF" != "Y" ]] && { echo "Huỷ bỏ."; exit 1; }
fi

# --- Network check (gợi ý 1: thay ping bằng curl) ---
echo "🔹 Kiểm tra kết nối tới downloads.ioncube.com..."
if ! curl -Is https://downloads.ioncube.com | head -n1 | grep -q "200"; then
    echo "❌ Không thể kết nối tới downloads.ioncube.com (HTTP không trả về 200 OK) — kiểm tra DNS/kết nối/firewall."
    exit 1
fi

# --- Determine extension_dir using php-config for target PHP if available ---
PHP_CONFIG_BIN="/usr/bin/php-config${PHP_VERSION//./}"
if [[ -x "$PHP_CONFIG_BIN" ]]; then
    EXT_DIR=$("$PHP_CONFIG_BIN" --extension-dir 2>/dev/null || true)
fi
if [[ -z "$EXT_DIR" ]]; then
    EXT_DIR=$(php -i 2>/dev/null | awk -F ' => ' '/^extension_dir/ {print $2; exit}' || true)
fi
if [[ -z "$EXT_DIR" ]]; then
    echo "❌ Không xác định được extension_dir từ php-config hoặc php -i"
    exit 1
fi
echo "🔹 extension_dir: $EXT_DIR"

if [[ ! -w "$EXT_DIR" ]]; then
    echo "❌ Không có quyền ghi vào $EXT_DIR. Kiểm tra quyền hoặc chạy script với sudo/root."
    exit 1
fi

# --- Prepare temp dir and download ---
TEMP_DIR="/tmp/ioncube"
mkdir -p "$TEMP_DIR"
cd "$TEMP_DIR" || exit 1

IONCUBE_URL="https://downloads.ioncube.com/loader_downloads/ioncube_loaders_lin_x86-64.tar.gz"
echo "🔸 Downloading ioncube loaders..."
if ! wget --no-cache -q "$IONCUBE_URL" -O ioncube_loaders.tar.gz; then
    echo "❌ Lỗi: không tải được gói từ $IONCUBE_URL. Kiểm tra https://www.ioncube.com/loaders.php"
    exit 1
fi

if [[ ! -s ioncube_loaders.tar.gz ]]; then
    echo "❌ File tải về rỗng/hỏng."
    exit 1
fi

# --- Extract ---
tar xzf ioncube_loaders.tar.gz

# --- Find best loader file ---
TARGET_SO="ioncube/ioncube_loader_lin_${PHP_VERSION}.so"
if [[ -f "$TARGET_SO" ]]; then
    SELECTED="$TARGET_SO"
else
    echo "⚠️ Không tìm thấy loader chính xác cho PHP $PHP_VERSION — tìm bản fallback..."
    MAJ="${PHP_MAJOR}."
    mapfile -t candidates < <(ls ioncube/ioncube_loader_lin_${MAJ}*.so 2>/dev/null | sort -V || true)
    if [[ ${#candidates[@]} -gt 0 ]]; then
        SELECTED=$(printf "%s\n" "${candidates[@]}" | sort -V | tail -n1)
    else
        SELECTED=$(ls ioncube/ioncube_loader_lin_*.so 2>/dev/null | sort -V | tail -n1 || true)
    fi
fi

if [[ -z "${SELECTED:-}" || ! -f "$SELECTED" ]]; then
    echo "❌ Không tìm thấy bất kỳ loader phù hợp nào trong gói đã tải."
    exit 1
fi

SELECTED_VERSION=$(basename "$SELECTED" | grep -oE '[0-9]+\.[0-9]+')
echo "🔹 Đã chọn loader: ioncube_loader_lin_${SELECTED_VERSION}.so (cho PHP $PHP_VERSION)"

# --- Cảnh báo fallback (gợi ý 2) ---
if [[ "$SELECTED_VERSION" != "$PHP_VERSION" ]]; then
    echo "⚠️ Loader không trùng khớp hoàn toàn: dùng bản $SELECTED_VERSION cho PHP $PHP_VERSION. Có thể gặp vấn đề tương thích, kiểm tra https://www.ioncube.com/loaders.php"
fi

# --- Copy into extension dir ---
DEST_SO="$EXT_DIR/ioncube_loader_lin_${PHP_VERSION}.so"
cp "$SELECTED" "$DEST_SO"
chmod 644 "$DEST_SO"
echo "🔸 Copy tới $DEST_SO"

# --- Create mods-available conf and enable for fpm/cli (gợi ý 4: kiểm tra và thông báo nếu tạo mới) ---
MODS_DIR="/etc/php/${PHP_VERSION}/mods-available"
if [[ ! -d "$MODS_DIR" ]]; then
    echo "⚠️ Không tìm thấy $MODS_DIR, tạo mới..."
    mkdir -p "$MODS_DIR"
fi
IONCUBE_INI="${MODS_DIR}/20-ioncube.ini"
echo "zend_extension=${DEST_SO}" > "$IONCUBE_INI"
echo "🔸 Tạo $IONCUBE_INI"

for TYPE in fpm cli; do
    CONF_D="/etc/php/${PHP_VERSION}/${TYPE}/conf.d"
    if [[ -d "$CONF_D" ]]; then
        ln -sf "$IONCUBE_INI" "${CONF_D}/20-ioncube.ini"
        echo "🔸 Enabled ioncube for $TYPE (symlink -> ${CONF_D}/20-ioncube.ini)"
    else
        echo "⚠️ Thư mục conf.d không tồn tại: $CONF_D — bỏ qua."
    fi
done

# --- Test nginx config before restart ---
echo "🔹 Kiểm tra cấu hình Nginx..."
if ! nginx -t &>/dev/null; then
    echo "❌ Cấu hình Nginx không hợp lệ. Kiểm tra /var/log/nginx/error.log"
    exit 1
fi

# --- Restart services ---
echo "🔄 Restarting php-fpm (if exists) and nginx..."
if systemctl list-units --full -all | grep -q "php${PHP_VERSION}-fpm.service"; then
    systemctl restart "php${PHP_VERSION}-fpm" || {
        echo "❌ Không thể restart php${PHP_VERSION}-fpm. Xem /var/log/php${PHP_VERSION}-fpm.log"
        exit 1
    }
fi
systemctl restart nginx || {
    echo "❌ Không thể restart nginx. Xem /var/log/nginx/error.log"
    exit 1
}

# --- Verify loader loaded in CLI ---
echo "🔹 Kiểm tra ioncube trong PHP CLI modules..."
if php -m 2>/dev/null | grep -qi ioncube; then
    echo "✅ IonCube đã nạp trong CLI."
else
    echo "⚠️ IonCube chưa xuất hiện trong CLI. Kiểm tra php -i | grep ioncube, hoặc xem /var/log/php${PHP_VERSION}-fpm.log"
fi

# --- Final check and instructions ---
echo "🎉 Hoàn tất: IonCube Loader đã được cài đặt cho PHP $PHP_VERSION."
echo "🔎 Kiểm tra PHP-FPM bằng cách tạo file /var/www/html/phpinfo.php với nội dung '<?php phpinfo(); ?>'"
echo "Log chi tiết: $LOG_FILE"
echo "=== IONCUBE INSTALL END: $(date '+%Y-%m-%d %H:%M:%S') ==="

2. Cấp quyền thực thi:

sudo chmod +x install_ioncube_webinoly_v1.0.sh

3. Chạy script:

Tự động chọn PHP mới nhất:

sudo ./install_ioncube_webinoly_v1.0.sh

Chỉ định phiên bản PHP (ví dụ: PHP 8.1):

sudo ./install_ioncube_webinoly_v1.0.sh 8.1

4. Kiểm tra kết quả:

Script hiển thị trạng thái cài đặt và ghi log vào /var/log/ioncube_install.log.

Tạo file phpinfo.php để kiểm tra qua trình duyệt:

<?php phpinfo(); ?>

Lưu file vào /var/www/html/phpinfo.php, truy cập qua trình duyệt (ví dụ: http://your-domain/phpinfo.php), và xóa file sau khi kiểm tra để đảm bảo an toàn:

sudo rm /var/www/html/phpinfo.php

5. Khắc phục sự cố

Lỗi tải file: Nếu không tải được IonCube Loader, kiểm tra URL mới nhất tại https://www.ioncube.com/loaders.php và cập nhật biến IONCUBE_URL trong script:

IONCUBE_URL="https://downloads.ioncube.com/loader_downloads/ioncube_loaders_lin_x86-64.tar.gz"

PHP không hỗ trợ: Script cảnh báo nếu dùng PHP 8.2+, cho phép chọn tiếp tục hoặc downgrade phiên bản PHP:

sudo webinoly -php-ver=8.1

Lỗi dịch vụ: Kiểm tra log được script ghi tại:

cat /var/log/php${PHP_VERSION}-fpm.log
cat /var/log/nginx/error.log

Khôi phục cấu hình: Script tự động backup cấu hình và sử dụng file 20-ioncube.ini riêng. Để gỡ cài đặt, xóa file:

sudo rm /etc/php/${PHP_VERSION}/mods-available/20-ioncube.ini
sudo rm /etc/php/${PHP_VERSION}/fpm/conf.d/20-ioncube.ini
sudo rm /etc/php/${PHP_VERSION}/cli/conf.d/20-ioncube.ini

Script install_ioncube_webinoly_v1.0.sh là công cụ tốt để tích hợp IonCube Loader vào server Webinoly, giúp bạn triển khai các ứng dụng PHP mã hóa như WHMCS hay plugin WordPress một cách dễ dàng và hiệu quả. Với khả năng tự động hóa, kiểm tra thông minh, và cấu hình chuẩn hóa, script này không chỉ tiết kiệm thời gian mà còn đảm bảo độ tin cậy cho các dự án hosting hoặc phát triển web. Nếu bạn cần sử dụng IonCube Loader trên Webinoly, đây là giải pháp không thể bỏ qua!

Share
Tweet
Email
Prev Article

Related Articles

Hướng dẫn cấu hình tối ưu Nginx và PHP-FPM
Bài viết này sẽ hướng dẫn các bạn cấu hình …

Hướng dẫn cấu hình tối ưu Nginx và PHP-FPM

Servertut Script bài 3: Hướng dẫn sử dụng các chức năng trong menu chính
Trong hai bài trước, tôi đã hướng dẫn cài đặt …

Servertut Script bài 3: Hướng dẫn sử dụng các chức năng trong menu chính

About The Author

danhgiahost
Hoàng Trung

Leave a Reply Cancel Reply

InterServer Web Hosting and VPS

CHUYÊN MỤC

  • Thông tin – Kiến thức
    • Kiến thức
    • Thông tin nhà cung cấp
  • Đánh giá
    • Dịch vụ máy chủ riêng
    • Dịch vụ máy chủ ảo
    • Dịch vụ hosting chia sẻ
    • Các dịch vụ khác
  • Khuyến mãi
  • Quản trị
  • Thủ thuật – Tiện ích
    • Làm Web
  • MMO
  • Video

ĐƯỢC QUAN TÂM

  • Hawk Host Khuyến Mãi Hong Kong – Giảm Tới 75% Hosting & VPS Cloud | Cơ Hội Vàng Cuối Năm!
    Hawk Host Khuyến Mãi Hong Kong – Giảm Tới 75% Hosting & VPS Cloud | Cơ Hội Vàng Cuối Năm!
  • Chuyển tên miền về Namecheap chỉ từ 4,68 USD – Giảm tới 70% dịch vụ kèm theo
    Chuyển tên miền về Namecheap chỉ từ 4,68 USD – Giảm tới 70% dịch vụ kèm theo
  • Khuyến mãi cực HOT tại Netcup – 24 Giờ Vàng Giảm Giá tới 50% Server, Hosting Và Domain
    Khuyến mãi cực HOT tại Netcup – 24 Giờ Vàng Giảm Giá tới 50% Server, Hosting Và Domain
  • CloudBlast tung khuyến mãi 50% nạp tiền
    CloudBlast tung khuyến mãi 50% nạp tiền
  • Gigahost Autumn Sale – Giảm giá cực lớn lên đến 35% cho máy chủ Dedicated tại Na Uy!
    Gigahost Autumn Sale – Giảm giá cực lớn lên đến 35% cho máy chủ Dedicated tại Na Uy!

KHUYẾN MÃI

  • Khuyến Mãi của InterServer: Giảm 20 khi mua VPS + Mua 1 Tháng – Tặng 2 Tháng
    Khuyến Mãi của InterServer: Giảm 20 khi mua VPS + Mua 1 Tháng – Tặng 2 Tháng
  • Hawk Host Khuyến Mãi Hong Kong – Giảm Tới 75% Hosting & VPS Cloud | Cơ Hội Vàng Cuối Năm!
    Hawk Host Khuyến Mãi Hong Kong – Giảm Tới 75% Hosting & VPS Cloud | Cơ Hội Vàng Cuối Năm!
  • DartNode Dart-a-Thon 2025: Giảm Giá Cực Sốc + Tặng 6 Máy Chủ Dedicated Miễn Phí
    DartNode Dart-a-Thon 2025: Giảm Giá Cực Sốc + Tặng 6 Máy Chủ Dedicated Miễn Phí
  • Ưu đãi từ Namecheap chào mừng sinh nhật thứ 25 năm
    Ưu đãi từ Namecheap chào mừng sinh nhật thứ 25 năm
  • Mã giảm giá khi gia hạn tên miền tại NameCheap
    Mã giảm giá khi gia hạn tên miền tại NameCheap

ĐÁNH GIÁ

  • Đánh giá, so sánh hiệu suất Disk và CPU của Linode, DigitalOcean, UpCloud, Hetzner, Terrahost và Scaleway
    Đánh giá, so sánh hiệu suất Disk và CPU của Linode, DigitalOcean, UpCloud, Hetzner, Terrahost và Scaleway
  • 10 nhà cung cấp dich vụ CDN tốt nhất thế giới
    10 nhà cung cấp dich vụ CDN tốt nhất thế giới
  • Tham khảo kết quả đánh giá VPS 512Mb, 1Gb và 2Gb RAM của DigitalOcean
    Tham khảo kết quả đánh giá VPS 512Mb, 1Gb và 2Gb RAM của DigitalOcean
  • Tham khảo kết quả benchmark đánh giá dịch vụ SSD VPS của Vultr
    Tham khảo kết quả benchmark đánh giá dịch vụ SSD VPS của Vultr
  • Top 10 nhà cung cấp dịch vụ VPS giá rẻ quý I/2014
    Top 10 nhà cung cấp dịch vụ VPS giá rẻ quý I/2014

LIÊN QUAN

  • So sánh các LEM stack: EasyEngine, Centmin Mod, RunCloud và Webinoly
    So sánh các LEM stack: EasyEngine, Centmin Mod, RunCloud và Webinoly
  • Hướng dẫn đăng ký tài khoản mới tại Vultr
    Hướng dẫn đăng ký tài khoản mới tại Vultr
  • Hướng dẫn cài đặt phpMyAdmin cho CentminMod
    Hướng dẫn cài đặt phpMyAdmin cho CentminMod
  • Hướng dẫn sử dụng chức năng chuyển Shapshot giữa các người dùng DigitalOcean khác nhau
    Hướng dẫn sử dụng chức năng chuyển Shapshot giữa các người dùng DigitalOcean khác nhau
  • Hướng dẫn sử dụng HTTP Authentication trong Webinoly
    Hướng dẫn sử dụng HTTP Authentication trong Webinoly

Đánh giá Hosting

Copyright © 2025 Đánh giá Hosting

Ad Blocker Detected

Our website is made possible by displaying online advertisements to our visitors. Please consider supporting us by disabling your ad blocker.

Refresh