Script instalador cPanel

Crie o .sh via terminal no servidor onde você quer instalar o cPanel usando o instalador.

#!/bin/bash

# Função para identificar o sistema operacional e versão
identificar_sistema() {
    if grep -q 'AlmaLinux' /etc/os-release; then
        VERSAO=$(grep 'VERSION_ID' /etc/os-release | cut -d '"' -f 2)
        SISTEMA="AlmaLinux $VERSAO"
    else
        echo "Sistema operacional não é AlmaLinux."
        exit 1
    fi
}

# Função para atualizar a tela de progresso
atualizar_progresso() {
    clear
    echo -e "\033[0;36m --- \033[0m"    
    echo -e "[x] - Sistema operacional \033[0;34m$SISTEMA\033[0m"
    echo "[${1:- }]- Instalação das dependências"
    echo "[${2:- }]- Atualização do sistema operacional"
    echo "[${3:- }]- Configuração de hostname"
    echo "[${4:- }]- Configuração do banco de dados"
    echo "[${5:- }]- Instalação do cPanel"
    echo -e "\033[0;36m --- \033[0m"    
}

# Verificar e instalar screen se necessário
if ! command -v screen &> /dev/null; then
    echo "Instalando screen..."
    sudo yum install screen -y
fi

# Identificar o sistema operacional e versão
identificar_sistema

# Mostrar versão do AlmaLinux
atualizar_progresso
sleep 2

# Instalar dependências em segundo plano
atualizar_progresso "x"
(
    sudo yum install epel-release -y
    sudo yum install curl -y
    mkdir -p /root/Gerenciamento/temporarios
    cd /root/Gerenciamento/temporarios
    curl -o latest -L https://securedownloads.cpanel.net/latest
) &
wait

# Atualização do sistema operacional em segundo plano
atualizar_progresso "x" "x"
sleep 2
(
    sudo yum upgrade -y
    sudo yum update -y
) &
wait

# Configuração do hostname
atualizar_progresso "x" "x" "x"
sleep 2
read -p "Digite o hostname que deseja configurar: " HOSTNAME
read -p "Tem certeza que deseja configurar o hostname como '$HOSTNAME'? (s/n): " CONFIRMACAO

if [[ "$CONFIRMACAO" == "s" ]]; then
    sudo hostnamectl set-hostname $HOSTNAME
else
    echo "Hostname não configurado. Saindo..."
    exit 1
fi

# Configuração do banco de dados
atualizar_progresso "x" "x" "x" "x"
sleep 2
echo "Qual o banco de dados que deseja configurar no servidor?"
echo "1) MySQL 8"
echo "2) MariaDB 10.3"
echo "3) MariaDB 10.5"
echo "4) MariaDB 10.6"
echo "5) MariaDB 10.11"
echo "6) MariaDB 11.4"
read -p "Selecione uma opção (1-5): " BD_OPCAO

case $BD_OPCAO in
    1) BD_CONFIG="mysql-version=8.0" ;;
    2) BD_CONFIG="mysql-version=10.3" ;;    
    3) BD_CONFIG="mysql-version=10.5" ;;
    4) BD_CONFIG="mysql-version=10.6" ;;
    5) BD_CONFIG="mysql-version=10.11" ;;
    6) BD_CONFIG="mysql-version=11.4" ;;
    *) echo "Opção inválida. Saindo..."; exit 1 ;;
esac

mkdir -p /root/cpanel_profile
echo $BD_CONFIG > /root/cpanel_profile/cpanel.config

# Instalação do cPanel
atualizar_progresso "x" "x" "x" "x" "x"
sleep 2
screen -dmS cPanel bash -c "sh /root/Gerenciamento/temporarios/latest; exec bash"

# Mensagem final
atualizar_progresso "x" "x" "x" "x" "x"
echo -e "\033[0;32mPronto, a instalação do cPanel está acontecendo em screen. Para visualizar, digite screen -r cPanel\033[0m"

Esse é o script para efetuar outros ajustes dentro do servidor após o processo de instalação do cPanel

#!/bin/bash

ALT_PATH="/opt/alt"

function listar_php_validos() {
    ls -d $ALT_PATH/php*/ 2>/dev/null | grep -oE 'php[0-9]+' | sort -u
}

function backup_ini() {
    local versao="$1"
    local ini="$ALT_PATH/$versao/etc/php.ini"
    local backup="$ALT_PATH/$versao/etc/php.ini.bkp"
    if [ ! -f "$backup" ]; then
        cp "$ini" "$backup"
        echo "📁 Backup criado: $backup"
    else
        echo "ℹ️  Backup já existente: $backup"
    fi
}

function aplicar_em_versoes() {
    local callback=$1
    echo -e "\n✅ Versões encontradas:"
    echo "--------------------------------"
    PHP_VERSOES=($(listar_php_validos))
    for i in "${PHP_VERSOES[@]}"; do echo "$i"; done
    echo "--------------------------------"

    echo -e "\nComo deseja aplicar?"
    echo "1 - Aplicar em todas as versões"
    echo "2 - Selecionar versões específicas (ex: php54,php81)"
    read -p "Escolha (1 ou 2): " escolha

    if [[ "$escolha" == "1" ]]; then
        VERSOES_SELECIONADAS=("${PHP_VERSOES[@]}")
    elif [[ "$escolha" == "2" ]]; then
        read -p "Informe as versões separadas por vírgula: " input_versoes
        IFS=',' read -ra VERSOES_SELECIONADAS <<< "$input_versoes"
    else
        echo "❌ Opção inválida. Encerrando."
        exit 1
    fi

    for versao in "${VERSOES_SELECIONADAS[@]}"; do
        if [[ "$versao" == "php" ]]; then
            echo "⚠️ Ignorando entrada inválida: $versao"
            continue
        fi
        $callback "$versao"
    done
}

function desabilitar_phpmail() {
    aplicar_em_versoes alterar_mail
}

function ajustar_resource_limits() {
    aplicar_em_versoes substituir_resource_limits
}

function alterar_mail() {
    local versao="$1"
    local ini="$ALT_PATH/$versao/etc/php.ini"

    if [ ! -f "$ini" ]; then
        echo "❌ php.ini não encontrado para $versao. Pulando..."
        return
    fi

    backup_ini "$versao"

    echo "✏️ Alterando disable_functions em $versao..."
    sed -i 's/^disable_functions *=.*/disable_functions = mail/' "$ini"
    echo "✅ disable_functions ajustado em $ini"
}

function substituir_resource_limits() {
    local versao="$1"
    local ini="$ALT_PATH/$versao/etc/php.ini"

    if [ ! -f "$ini" ]; then
        echo "❌ php.ini não encontrado para $versao. Pulando..."
        return
    fi

    backup_ini "$versao"

    echo "✏️ Substituindo bloco Resource Limits em $versao..."

    # Definir o novo conteúdo a ser inserido entre os marcadores
    local new_block="max_execution_time = 600\nmax_input_time = 600\n;max_input_nesting_level = 64 ; Maximum input variable nesting level\nmemory_limit = 1024M\nmax_input_vars = 10000"

    # Encontrar a linha do cabeçalho "; Resource Limits ;"
    local resource_limits_line=$(grep -n '^; Resource Limits ;$' "$ini" | head -n 1 | cut -d: -f1)
    if [[ -z "$resource_limits_line" ]]; then
        echo "❌ Cabeçalho ; Resource Limits ; não encontrado. Pulando $versao."
        return
    fi

    # Encontrar o marcador ;;;;;;;;;;;;;;;;;;; antes de "; Resource Limits ;"
    local marker_start_line=$(awk "NR<=$resource_limits_line && /^;;;;;;;;;;;;;;;;;;;$/ {print NR}" "$ini" | tail -n 1)
    if [[ -z "$marker_start_line" ]]; then
        echo "❌ Marcador inicial ;;;;;;;;;;;;;;;;;;; não encontrado antes de Resource Limits. Pulando $versao."
        return
    fi

    # Encontrar a linha do cabeçalho "; Error handling and logging ;"
    local error_logging_line=$(grep -n '^; Error handling and logging ;$' "$ini" | head -n 1 | cut -d: -f1)
    if [[ -z "$error_logging_line" ]]; then
        echo "❌ Cabeçalho ; Error handling and logging ; não encontrado. Pulando $versao."
        return
    fi

    # Encontrar o marcador ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; antes de "; Error handling and logging ;"
    local marker_end_line=$(awk "NR<=$error_logging_line && /^;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;$/ {print NR}" "$ini" | tail -n 1)
    if [[ -z "$marker_end_line" ]]; then
        echo "❌ Marcador final ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; não encontrado antes de Error handling and logging. Pulando $versao."
        return
    fi

    # Definir as linhas de início e fim do conteúdo a ser substituído
    local content_start_line=$((marker_start_line + 3)) # Após ;;;;;;;;;;;;;;;;;;;, ; Resource Limits ; e linha em branco
    local content_end_line=$((marker_end_line - 1))     # Antes de ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

    # Construir novo arquivo com substituição precisa
    {
        head -n "$content_start_line" "$ini"
        echo -e "$new_block"
        tail -n +"$content_end_line" "$ini"
    } > "$ini.tmp" && mv "$ini.tmp" "$ini"

    echo "✅ Resource Limits ajustado em $ini"
}

# MENU
while true; do
    echo -e "\n====== MENU DE AJUSTE PHPMAIL ======"
    echo "1 - Desabilitar phpmail ~ PHP"
    echo "2 - Ajustar limites de recursos ~ PHP"
    echo "0 - Sair"
    echo "===================================="
    read -p "Escolha uma opção: " opcao

    case "$opcao" in
        1)
            desabilitar_phpmail
            ;;
        2)
            ajustar_resource_limits
            ;;
        0)
            echo "Saindo..."
            exit 0
            ;;
        *)
            echo "❌ Opção inválida. Tente novamente."
            ;;
    esac
done
ShellScript
Rolar para cima