83 lines
3.3 KiB
Bash
83 lines
3.3 KiB
Bash
#!/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!' |