#!/bin/bash # Function to ensure a setting is present, uncommented, and correctly set set_php_ini_value() { local ini_file=$1 local key=$2 local value=$3 if grep -qE "^\s*;?\s*${key}\s*=" "$ini_file"; then sed -i "s/^\s*;?\s*${key}\s*=.*/${key} = ${value}/" "$ini_file" else echo "${key} = ${value}" >> "$ini_file" fi } # Step 1 - Components Installation echo "Installing required packages..." apt-get install -y apt-transport-https curl debian-archive-keyring debian-keyring software-properties-common bzip2 gettext git gnupg2 net-tools pv redis unzip wget whois ca-certificates cron gnupg lsb-release nginx curl -sSLo /usr/share/keyrings/deb.sury.org-php.gpg https://packages.sury.org/php/apt.gpg echo "deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main" | tee /etc/apt/sources.list.d/php.list apt-get update -y echo "Installing PHP and required extensions..." apt-get install -y php8.2 php8.2-mysql php8.2-cli php8.2-common php8.2-curl php8.2-ds php8.2-fpm php8.2-gd php8.2-gmp php8.2-gnupg php8.2-igbinary php8.2-imap php8.2-intl php8.2-mbstring php8.2-opcache php8.2-readline php8.2-redis php8.2-soap php8.2-swoole php8.2-uuid php8.2-xml phpIniCli='/etc/php/8.2/cli/php.ini' phpIniFpm='/etc/php/8.2/fpm/php.ini' phpIniOpcache='/etc/php/8.2/mods-available/opcache.ini' # Update php.ini files set_php_ini_value "$phpIniCli" "opcache.enable" "1" set_php_ini_value "$phpIniCli" "opcache.enable_cli" "1" set_php_ini_value "$phpIniCli" "opcache.jit_buffer_size" "100M" set_php_ini_value "$phpIniCli" "opcache.jit" "1255" set_php_ini_value "$phpIniCli" "session.cookie_secure" "1" set_php_ini_value "$phpIniCli" "session.cookie_httponly" "1" set_php_ini_value "$phpIniCli" "session.cookie_samesite" "\"Strict\"" set_php_ini_value "$phpIniCli" "memory_limit" "2G" # Repeat the same settings for php-fpm set_php_ini_value "$phpIniFpm" "opcache.enable" "1" set_php_ini_value "$phpIniFpm" "opcache.enable_cli" "1" set_php_ini_value "$phpIniFpm" "opcache.jit_buffer_size" "100M" set_php_ini_value "$phpIniFpm" "opcache.jit" "1255" set_php_ini_value "$phpIniFpm" "session.cookie_secure" "1" set_php_ini_value "$phpIniFpm" "session.cookie_httponly" "1" set_php_ini_value "$phpIniFpm" "session.cookie_samesite" "\"Strict\"" set_php_ini_value "$phpIniFpm" "memory_limit" "2G" # Update opcache.ini set_php_ini_value "$phpIniOpcache" "opcache.jit" "1255" set_php_ini_value "$phpIniOpcache" "opcache.jit_buffer_size" "100M" echo "PHP configuration update complete!" curl -sS https://getcomposer.org/installer -o composer-setup.php EXPECTED_SIGNATURE="$(wget -q -O - https://composer.github.io/installer.sig)" ACTUAL_SIGNATURE="$(php -r "echo hash_file('sha384', 'composer-setup.php');")" if [ "$EXPECTED_SIGNATURE" != "$ACTUAL_SIGNATURE" ] then >&2 echo 'ERROR: Invalid installer signature' rm composer-setup.php exit 1 fi echo 'Composer installer verified' php composer-setup.php --quiet rm composer-setup.php mv composer.phar /usr/local/bin/composer echo 'Composer installed' echo 'Installing RoadRunner' curl --proto '=https' --tlsv1.2 -sSf https://raw.githubusercontent.com/roadrunner-server/roadrunner/master/download-latest.sh | sh systemctl daemon-reload systemctl enable nginx.service echo 'Base Packages Installed!'