New Features part 2

Added web server configuration
Added the installation of EngineGP
This commit is contained in:
Sergei Solovev 2023-08-07 02:47:10 +03:00
parent b5ff2262e0
commit 9ff3ed147f

View File

@ -1,10 +1,19 @@
#!/bin/bash #!/bin/bash
# Обновление таблиц и системы
sysUpdate (){
apt-get -y update
apt-get -y upgrade
}
# Обновление системы
sysUpdate
# Установка начальных пакетов # Установка начальных пакетов
required_packages=(sudo curl) pkgsREQ=(sudo curl)
for package in "${required_packages[@]}"; do # Цикл установки пакетов
if ! dpkg-query -W -f='${Status}' "$package" 2>/dev/null | grep -q "installed"; then for package in "${pkgsREQ[@]}"; do
if ! dpkg-query -W -f='${Status}' "$package" 2>/dev/null | grep -q "install ok installed"; then
clear clear
echo "$package не установлен. Выполняется установка..." echo "$package не установлен. Выполняется установка..."
apt-get install -y "$package" apt-get install -y "$package"
@ -17,9 +26,9 @@ verOS=`cat /etc/issue.net | awk '{print $1,$3}'`
# Проверка аргументов командной строки # Проверка аргументов командной строки
if [ $# -gt 0 ]; then if [ $# -gt 0 ]; then
# Переменные для хранения # Переменные для хранения
EGP_VERSION="" verEGP=""
PHP_VERSION="" verPHP=""
IP_ADDRESS="" sysIP=""
# Перебор всех аргументов # Перебор всех аргументов
while [[ $# -gt 0 ]]; do while [[ $# -gt 0 ]]; do
@ -28,19 +37,19 @@ if [ $# -gt 0 ]; then
case $key in case $key in
--release) --release)
# Если передан аргумент --release, сохранить указанную версию EngineGP # Если передан аргумент --release, сохранить указанную версию EngineGP
EGP_VERSION="$2" verEGP="$2"
shift # Пропустить значение версии shift # Пропустить значение версии
shift # Пропустить аргумент --release shift # Пропустить аргумент --release
;; ;;
--php) --php)
# Если передан аргумент --php, сохранить указанную версию PHP # Если передан аргумент --php, сохранить указанную версию PHP
PHP_VERSION="$2" verPHP="$2"
shift # Пропустить значение версии shift # Пропустить значение версии
shift # Пропустить аргумент --php shift # Пропустить аргумент --php
;; ;;
--ip) --ip)
# Если передан аргумент --ip, сохранить указанный IP-адрес # Если передан аргумент --ip, сохранить указанный IP-адрес
IP_ADDRESS="$2" sysIP="$2"
shift # Пропустить значение IP-адреса shift # Пропустить значение IP-адреса
shift # Пропустить аргумент --ip shift # Пропустить аргумент --ip
;; ;;
@ -57,31 +66,31 @@ if [ $# -gt 0 ]; then
done done
# Если версия EngineGP не выбрана, использовать последнюю стабильную версию # Если версия EngineGP не выбрана, использовать последнюю стабильную версию
if [ -z "$EGP_VERSION" ]; then if [ -z "$verEGP" ]; then
LATEST_URL="https://resources.enginegp.com/latest" LATEST_URL="https://resources.enginegp.com/latest"
EGP_VERSION=$(curl -s "$LATEST_URL" | awk 'NR==1 {print $2}') verEGP=$(curl -s "$LATEST_URL" | awk 'NR==1 {print $2}')
fi fi
# Если версия PHP не выбрана, использовать PHP 8.0 по умолчанию # Если версия PHP не выбрана, использовать PHP 8.0 по умолчанию
if [ -z "$PHP_VERSION" ]; then if [ -z "$verPHP" ]; then
PHP_VERSION="8.0" verPHP="8.0"
fi fi
# Если IP-адрес не указан, получить внешний IP-адрес с помощью сервиса ipinfo.io # Если IP-адрес не указан, получить внешний IP-адрес с помощью сервиса ipinfo.io
if [ -z "$IP_ADDRESS" ]; then if [ -z "$sysIP" ]; then
IP_ADDRESS=$(curl -s ipinfo.io/ip) sysIP=$(curl -s ipinfo.io/ip)
fi fi
else else
# Если нет аргументов, получить последнюю версию EngineGP из файла на сайте # Если нет аргументов, получить последнюю версию EngineGP из файла на сайте
LATEST_URL="https://resources.enginegp.com/latest" LATEST_URL="https://resources.enginegp.com/latest"
EGP_VERSION=$(curl -s "$LATEST_URL" | awk 'NR==1 {print $2}') verEGP=$(curl -s "$LATEST_URL" | awk 'NR==1 {print $2}')
PHP_VERSION="8.0" verPHP="8.0"
IP_ADDRESS=$(curl -s ipinfo.io/ip) sysIP=$(curl -s ipinfo.io/ip)
fi fi
# Проверяем, является ли полученный IP-адрес действительным IPv4 адресом # Проверяем, является ли полученный IP-адрес действительным IPv4 адресом
if [[ $IP_ADDRESS =~ ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$ ]]; then if [[ $sysIP =~ ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
sysIP=$IP_ADDRESS sysIP=$sysIP
else else
clear clear
echo "Не удалось получить внешний IP-адрес" echo "Не удалось получить внешний IP-адрес"
@ -89,11 +98,17 @@ else
exit exit
fi fi
# Обновление таблиц и системы # Проверяем условия и записываем версию в переменную
sysUpdate (){ if [[ "verEGP" == 3.* ]]; then
apt-get -y update resEGP="EngineGP.v3"
apt-get -y upgrade elif [[ "$version" == 4.* ]]; then
} resEGP="EngineGP.v4"
else
resEGP="EngineGP.v4"
fi
# Файловый репозиторий
resURL="https://resources.enginegp.com/"
while true; do while true; do
clear clear
@ -109,8 +124,183 @@ while true; do
case $choice in case $choice in
1) 1)
clear clear
echo "Вы выбрали: Установка панели управления" # Список пакетов для установки
# Здесь добавить код для установки панели управления pkgsALL=(ufw memcached unzip bc cron apache2 libapache2-mpm-itk php$verPHP php$verPHP-common php$verPHP-cli php$verPHP-memcache php$verPHP-memcached php$verPHP-mysql php$verPHP-xml php$verPHP-mbstring php$verPHP-gd php$verPHP-imagick php$verPHP-zip php$verPHP-curl php$verPHP-ssh2 php$verPHP-xml libapache2-mod-php$verPHP nginx mariadb-server)
apache_ports="Listen 8080
<IfModule ssl_module>
Listen 443
</IfModule>
<IfModule mod_gnutls.c>
Listen 443
</IfModule>"
# Конфигурация apache для EngineGP
apache_enginegp="<VirtualHost *:8080>
ServerName $sysIP
DocumentRoot /var/enginegp
ErrorLog /var/log/enginegp/apache_enginegp_error.log
CustomLog /var/log/enginegp/apache_enginegp_access.log combined
<IfModule mpm_itk_module>
AssignUserID www-data www-data
</IfModule>
<Directory />
Options FollowSymLinks
AllowOverride All
</Directory>
<Directory /var/enginegp/>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
<FilesMatch \.php$>
SetHandler application/x-httpd-php
</FilesMatch>
</Directory>
</VirtualHost>"
# Конфигурация nginx для EngineGP
nginx_enginegp="server {
listen 80;
server_name $sysIP;
root /var/enginegp;
charset utf-8;
access_log /var/log/enginegp/nginx_enginegp_access.log combined buffer=64k;
error_log /var/log/enginegp/nginx_enginegp_error.log error;
index index.php index.htm index.html;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host \$host;
proxy_set_header X-Real-IP \$remote_addr;
proxy_set_header X-Forwarded-For \$remote_addr;
proxy_connect_timeout 120;
proxy_send_timeout 120;
proxy_read_timeout 180;
}
location ~* \.(gif|jpeg|jpg|txt|png|tif|tiff|ico|jng|bmp|doc|pdf|rtf|xls|ppt|rar|rpm|swf|zip|bin|exe|dll|deb|cur)$ {
access_log off;
expires 3d;
}
location ~* \.(css|js)$ {
access_log off;
expires 180m;
}
location ~ /\.ht {
deny all;
}
}"
# Цикл установки пакетов
for package in "${pkgsALL[@]}"; do
# Проверяем наличие php
if [ ! -f "/etc/apt/sources.list.d/php.list" ]; then
# Добавляем репозиторий php
sudo curl -sSL https://packages.sury.org/php/README.txt | sudo bash -x
# Обновление таблиц
apt-get -y update
fi
# Проверка на наличие и установка пакетов
if ! dpkg-query -W -f='${Status}' "$package" 2>/dev/null | grep -q "install ok installed"; then
echo "$package не установлен. Выполняется установка..."
apt-get install -y "$package"
fi
# Проверяем установку apache
if dpkg-query -W -f='${Status}' "libapache2-mod-php$verPHP" 2>/dev/null | grep -q "install ok installed"; then
if [ ! -f /etc/apache2/sites-available/enginegp.conf ]; then
# Разрешаем доступ к портам
sudo ufw allow 80 >> "$(dirname "$0")/enginegp_install.log" 2>&1
sudo ufw allow 443 >> "$(dirname "$0")/enginegp_install.log" 2>&1
# Изменяем порт, на котором слушает Apache
echo -e "$apache_ports" | sudo tee /etc/apache2/ports.conf >> "$(dirname "$0")/enginegp_install.log" 2>&1
# Создаём папку для записи логов, если ещё не создана
sudo mkdir /var/log/enginegp >> "$(dirname "$0")/enginegp_install.log" 2>&1
# Отключаем конфигурационный файл 000-default.conf
sudo a2dissite 000-default.conf >> "$(dirname "$0")/enginegp_install.log" 2>&1
# Создаем виртуальный хостинг для EngineGP
echo -e "$apache_enginegp" | sudo tee /etc/apache2/sites-available/enginegp.conf >> "$(dirname "$0")/enginegp_install.log" 2>&1
# Проверяем конфиг apache и выводим в логи
sudo apachectl configtest >> "$(dirname "$0")/enginegp_install.log" 2>&1
# Включаем конфигурацию
sudo a2ensite enginegp.conf >> "$(dirname "$0")/enginegp_install.log" 2>&1
# Включаем rewrite
sudo a2enmod rewrite >> "$(dirname "$0")/enginegp_install.log" 2>&1
# Включаем MPM-ITK
sudo a2enmod mpm_itk >> "$(dirname "$0")/enginegp_install.log" 2>&1
# Включаем mod_php
sudo a2enmod php$verPHP >> "$(dirname "$0")/enginegp_install.log" 2>&1
# Перезапускаем apache
sudo systemctl restart apache2 >> "$(dirname "$0")/enginegp_install.log" 2>&1
fi
fi
# Проверяем установку nginx
if dpkg-query -W -f='${Status}' "nginx" 2>/dev/null | grep -q "install ok installed"; then
if [ ! -f /etc/nginx/sites-available/enginegp.conf ]; then
# Создаём папку для записи логов, если ещё не создана
sudo mkdir /var/log/enginegp >> "$(dirname "$0")/enginegp_install.log" 2>&1
# Создаем виртуальный хостинг для EngineGP
echo -e "$nginx_enginegp" | sudo tee /etc/nginx/sites-available/enginegp.conf >> "$(dirname "$0")/enginegp_install.log" 2>&1
# Создаём симлинк конфига NGINX
sudo ln -s /etc/nginx/sites-available/enginegp.conf /etc/nginx/sites-enabled/ >> "$(dirname "$0")/enginegp_install.log" 2>&1
# Проверяем конфиг nginx и выводим в логи
sudo nginx -t >> "$(dirname "$0")/enginegp_install.log" 2>&1
# Перезапускаем nginx
sudo systemctl restart nginx >> "$(dirname "$0")/enginegp_install.log" 2>&1
fi
fi
# Устанавливаем панель
if dpkg-query -W -f='${Status}' "php$verPHP-xml" 2>/dev/null | grep -q "install ok installed"; then
if [ ! -d /var/enginegp/ ]; then
# Закачиваем и распаковываем панель
sudo curl -sSL -o /var/enginegp.zip "$resURL/$resEGP/$verEGP/$verEGP.zip" >> "$(dirname "$0")/enginegp_install.log" 2>&1
sudo unzip /var/enginegp.zip -d /var/ >> "$(dirname "$0")/enginegp_install.log" 2>&1
sudo mv /var/EngineGP-* /var/enginegp >> "$(dirname "$0")/enginegp_install.log" 2>&1
sudo rm /var/enginegp.zip >> "$(dirname "$0")/enginegp_install.log" 2>&1
# Задаём права на каталог
chown www-data:www-data -R /var/enginegp/ >> "$(dirname "$0")/enginegp_install.log" 2>&1
# Установка и настрока composer
curl -o composer-setup.php https://getcomposer.org/installer >> "$(dirname "$0")/enginegp_install.log" 2>&1
php composer-setup.php --install-dir=/usr/local/bin --filename=composer >> "$(dirname "$0")/enginegp_install.log" 2>&1
cd /var/enginegp >> "$(dirname "$0")/enginegp_install.log" 2>&1
sudo composer install --no-interaction >> "$(dirname "$0")/enginegp_install.log" 2>&1
cd >> "$(dirname "$0")/enginegp_install.log" 2>&1
fi
fi
done
# Перезапускаем apache
sudo systemctl restart apache2 >> "$(dirname "$0")/enginegp_install.log" 2>&1
;; ;;
2) 2)
clear clear
@ -124,10 +314,10 @@ while true; do
;; ;;
4) 4)
clear clear
echo "Последняя версия EngineGP: $EGP_VERSION" echo "Последняя версия EngineGP: $verEGP"
echo "Текущая версия Linux: $verOS" echo "Текущая версия Linux: $verOS"
echo "Внешний IP-адрес: $sysIP" echo "Внешний IP-адрес: $sysIP"
echo "Версия php: $PHP_VERSION" echo "Версия php: $verPHP"
;; ;;
0) 0)
clear clear