diff --git a/install.sh b/install.sh index feb14d7..71db9d0 100644 --- a/install.sh +++ b/install.sh @@ -1,10 +1,19 @@ #!/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 echo "$package не установлен. Выполняется установка..." apt-get install -y "$package" @@ -17,9 +26,9 @@ verOS=`cat /etc/issue.net | awk '{print $1,$3}'` # Проверка аргументов командной строки if [ $# -gt 0 ]; then # Переменные для хранения - EGP_VERSION="" - PHP_VERSION="" - IP_ADDRESS="" + verEGP="" + verPHP="" + sysIP="" # Перебор всех аргументов while [[ $# -gt 0 ]]; do @@ -28,19 +37,19 @@ if [ $# -gt 0 ]; then case $key in --release) # Если передан аргумент --release, сохранить указанную версию EngineGP - EGP_VERSION="$2" + verEGP="$2" shift # Пропустить значение версии shift # Пропустить аргумент --release ;; --php) # Если передан аргумент --php, сохранить указанную версию PHP - PHP_VERSION="$2" + verPHP="$2" shift # Пропустить значение версии shift # Пропустить аргумент --php ;; --ip) # Если передан аргумент --ip, сохранить указанный IP-адрес - IP_ADDRESS="$2" + sysIP="$2" shift # Пропустить значение IP-адреса shift # Пропустить аргумент --ip ;; @@ -57,31 +66,31 @@ if [ $# -gt 0 ]; then done # Если версия EngineGP не выбрана, использовать последнюю стабильную версию - if [ -z "$EGP_VERSION" ]; then + if [ -z "$verEGP" ]; then 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 # Если версия PHP не выбрана, использовать PHP 8.0 по умолчанию - if [ -z "$PHP_VERSION" ]; then - PHP_VERSION="8.0" + if [ -z "$verPHP" ]; then + verPHP="8.0" fi # Если IP-адрес не указан, получить внешний IP-адрес с помощью сервиса ipinfo.io - if [ -z "$IP_ADDRESS" ]; then - IP_ADDRESS=$(curl -s ipinfo.io/ip) + if [ -z "$sysIP" ]; then + sysIP=$(curl -s ipinfo.io/ip) fi else # Если нет аргументов, получить последнюю версию EngineGP из файла на сайте LATEST_URL="https://resources.enginegp.com/latest" - EGP_VERSION=$(curl -s "$LATEST_URL" | awk 'NR==1 {print $2}') - PHP_VERSION="8.0" - IP_ADDRESS=$(curl -s ipinfo.io/ip) + verEGP=$(curl -s "$LATEST_URL" | awk 'NR==1 {print $2}') + verPHP="8.0" + sysIP=$(curl -s ipinfo.io/ip) fi # Проверяем, является ли полученный IP-адрес действительным IPv4 адресом -if [[ $IP_ADDRESS =~ ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$ ]]; then - sysIP=$IP_ADDRESS +if [[ $sysIP =~ ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$ ]]; then + sysIP=$sysIP else clear echo "Не удалось получить внешний IP-адрес" @@ -89,11 +98,17 @@ else exit fi -# Обновление таблиц и системы -sysUpdate (){ - apt-get -y update - apt-get -y upgrade -} +# Проверяем условия и записываем версию в переменную +if [[ "verEGP" == 3.* ]]; then + resEGP="EngineGP.v3" +elif [[ "$version" == 4.* ]]; then + resEGP="EngineGP.v4" +else + resEGP="EngineGP.v4" +fi + +# Файловый репозиторий +resURL="https://resources.enginegp.com/" while true; do clear @@ -109,8 +124,183 @@ while true; do case $choice in 1) 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 + + + Listen 443 + + + + Listen 443 + " + + # Конфигурация apache для EngineGP + apache_enginegp=" + ServerName $sysIP + DocumentRoot /var/enginegp + ErrorLog /var/log/enginegp/apache_enginegp_error.log + CustomLog /var/log/enginegp/apache_enginegp_access.log combined + + + AssignUserID www-data www-data + + + + Options FollowSymLinks + AllowOverride All + + + + Options Indexes FollowSymLinks + AllowOverride All + Require all granted + + + SetHandler application/x-httpd-php + + +" + + # Конфигурация 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) clear @@ -124,10 +314,10 @@ while true; do ;; 4) clear - echo "Последняя версия EngineGP: $EGP_VERSION" + echo "Последняя версия EngineGP: $verEGP" echo "Текущая версия Linux: $verOS" echo "Внешний IP-адрес: $sysIP" - echo "Версия php: $PHP_VERSION" + echo "Версия php: $verPHP" ;; 0) clear