diff --git a/applications/laravel-roadrunner/install.sh b/applications/laravel-roadrunner/install.sh new file mode 100644 index 0000000..5d79da3 --- /dev/null +++ b/applications/laravel-roadrunner/install.sh @@ -0,0 +1,83 @@ +#!/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!' \ No newline at end of file