From 8e583384fbfae1cf6f64ab4e7424a1032b9712f8 Mon Sep 17 00:00:00 2001 From: Sergei Solovev Date: Sat, 5 Aug 2023 18:57:50 +0300 Subject: [PATCH 1/3] Creating an initial skeleton --- install.sh | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 install.sh diff --git a/install.sh b/install.sh new file mode 100644 index 0000000..ab6d824 --- /dev/null +++ b/install.sh @@ -0,0 +1,53 @@ +#!/bin/bash +# Получаем внешний IP-адрес с помощью сервиса ipinfo.io +external_ip=$(curl -s ipinfo.io/ip) + +# Проверяем, является ли полученный IP-адрес действительным IPv4 адресом +if [[ $external_ip =~ ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$ ]]; then + echo "Внешний IP-адрес: $external_ip" +else + echo "Не удалось получить внешний IP-адрес" +fi + +# Обновление таблиц и системы +sysUpdate (){ + apt-get -y update + apt-get -y upgrade +} + +# Установка начальных пакетов +if ! command -v curl &> /dev/null; then + echo "curl не установлен. Выполняется установка..." + apt-get install -y curl +fi + +# Проверка аргументов командной строки +if [ $# -gt 0 ]; then + # Если передан ключ и версия, установить указанную версию + if [ "$1" == "--release" ] && [ $# -gt 1 ]; then + VERSION="$2" + else + # Иначе, вывести справку и выйти + echo "Использование: ./install.sh [--release версия]" + echo " --release версия: установить указанную версию" + exit 1 + fi +else + # Если нет аргументов, получить последнюю версию из файла на сайте + LATEST_URL="https://resources.enginegp.com/latest" + VERSION=$(curl -s "$LATEST_URL" | awk 'NR==1 {print $2}') +fi + +# Вывод версии для информирования пользователя +echo "Устанавливаем версию: $VERSION" + +# Здесь выполняется код установки CMS с использованием заданной или последней версии +# Например: +# wget "https://example.com/cms-$VERSION.tar.gz" +# tar -xzvf "cms-$VERSION.tar.gz" +# cd "cms-$VERSION" +# ./install.sh + +# Примечание: Вам нужно заменить URL и команды установки на соответствующие для вашей CMS + +echo "Установка завершена." \ No newline at end of file From b5ff2262e0dace281f3579f2623be5ac21988003 Mon Sep 17 00:00:00 2001 From: Sergei Solovev Date: Sun, 6 Aug 2023 01:55:44 +0300 Subject: [PATCH 2/3] New Features Added check and installation of required packages Arguments added Menu added --- install.sh | 165 +++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 128 insertions(+), 37 deletions(-) diff --git a/install.sh b/install.sh index ab6d824..feb14d7 100644 --- a/install.sh +++ b/install.sh @@ -1,12 +1,92 @@ #!/bin/bash -# Получаем внешний IP-адрес с помощью сервиса ipinfo.io -external_ip=$(curl -s ipinfo.io/ip) + +# Установка начальных пакетов +required_packages=(sudo curl) + +for package in "${required_packages[@]}"; do + if ! dpkg-query -W -f='${Status}' "$package" 2>/dev/null | grep -q "installed"; then + clear + echo "$package не установлен. Выполняется установка..." + apt-get install -y "$package" + fi +done + +# Определение операционной системы +verOS=`cat /etc/issue.net | awk '{print $1,$3}'` + +# Проверка аргументов командной строки +if [ $# -gt 0 ]; then + # Переменные для хранения + EGP_VERSION="" + PHP_VERSION="" + IP_ADDRESS="" + + # Перебор всех аргументов + while [[ $# -gt 0 ]]; do + key="$1" + + case $key in + --release) + # Если передан аргумент --release, сохранить указанную версию EngineGP + EGP_VERSION="$2" + shift # Пропустить значение версии + shift # Пропустить аргумент --release + ;; + --php) + # Если передан аргумент --php, сохранить указанную версию PHP + PHP_VERSION="$2" + shift # Пропустить значение версии + shift # Пропустить аргумент --php + ;; + --ip) + # Если передан аргумент --ip, сохранить указанный IP-адрес + IP_ADDRESS="$2" + shift # Пропустить значение IP-адреса + shift # Пропустить аргумент --ip + ;; + *) + # Неизвестный аргумент, вывести справку и выйти + clear + echo "Использование: ./install.sh [--release версия] [--php версия] [--ip IP-адрес]" + echo " --release версия: установить указанную версию EngineGP" + echo " --php версия: установить указанную версию PHP" + echo " --ip IP-адрес: использовать указанный IP-адрес" + exit 1 + ;; + esac + done + + # Если версия EngineGP не выбрана, использовать последнюю стабильную версию + if [ -z "$EGP_VERSION" ]; then + LATEST_URL="https://resources.enginegp.com/latest" + EGP_VERSION=$(curl -s "$LATEST_URL" | awk 'NR==1 {print $2}') + fi + + # Если версия PHP не выбрана, использовать PHP 8.0 по умолчанию + if [ -z "$PHP_VERSION" ]; then + PHP_VERSION="8.0" + fi + + # Если IP-адрес не указан, получить внешний IP-адрес с помощью сервиса ipinfo.io + if [ -z "$IP_ADDRESS" ]; then + IP_ADDRESS=$(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) +fi # Проверяем, является ли полученный IP-адрес действительным IPv4 адресом -if [[ $external_ip =~ ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$ ]]; then - echo "Внешний IP-адрес: $external_ip" +if [[ $IP_ADDRESS =~ ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$ ]]; then + sysIP=$IP_ADDRESS else + clear echo "Не удалось получить внешний IP-адрес" + echo "Используй: ./install.sh [--ip IP-адрес]" + exit fi # Обновление таблиц и системы @@ -15,39 +95,50 @@ sysUpdate (){ apt-get -y upgrade } -# Установка начальных пакетов -if ! command -v curl &> /dev/null; then - echo "curl не установлен. Выполняется установка..." - apt-get install -y curl -fi +while true; do + clear + echo "Меню установки EngineGP:" + echo "1. Установка панели управления" + echo "2. Настройка сервера под игры" + echo "3. Установка игровых сборок" + echo "4. Системная информация" + echo "0. Выход" -# Проверка аргументов командной строки -if [ $# -gt 0 ]; then - # Если передан ключ и версия, установить указанную версию - if [ "$1" == "--release" ] && [ $# -gt 1 ]; then - VERSION="$2" - else - # Иначе, вывести справку и выйти - echo "Использование: ./install.sh [--release версия]" - echo " --release версия: установить указанную версию" - exit 1 - fi -else - # Если нет аргументов, получить последнюю версию из файла на сайте - LATEST_URL="https://resources.enginegp.com/latest" - VERSION=$(curl -s "$LATEST_URL" | awk 'NR==1 {print $2}') -fi + read -p "Выберите пункт меню: " choice -# Вывод версии для информирования пользователя -echo "Устанавливаем версию: $VERSION" + case $choice in + 1) + clear + echo "Вы выбрали: Установка панели управления" + # Здесь добавить код для установки панели управления + ;; + 2) + clear + echo "Вы выбрали: Настройка сервера под игры" + # Здесь добавить код для настройки сервера под игры + ;; + 3) + clear + echo "Вы выбрали: Установка игровых сборок" + # Здесь добавить код для установки игровых сборок + ;; + 4) + clear + echo "Последняя версия EngineGP: $EGP_VERSION" + echo "Текущая версия Linux: $verOS" + echo "Внешний IP-адрес: $sysIP" + echo "Версия php: $PHP_VERSION" + ;; + 0) + clear + echo "До свидания!" + exit 0 + ;; + *) + clear + echo "Неверный выбор. Попробуйте еще раз." + ;; + esac -# Здесь выполняется код установки CMS с использованием заданной или последней версии -# Например: -# wget "https://example.com/cms-$VERSION.tar.gz" -# tar -xzvf "cms-$VERSION.tar.gz" -# cd "cms-$VERSION" -# ./install.sh - -# Примечание: Вам нужно заменить URL и команды установки на соответствующие для вашей CMS - -echo "Установка завершена." \ No newline at end of file + read -p "Нажмите Enter, чтобы продолжить..." +done \ No newline at end of file From 9ff3ed147f0e99eb2e1f1d980ebad5ee85d64087 Mon Sep 17 00:00:00 2001 From: Sergei Solovev Date: Mon, 7 Aug 2023 02:47:10 +0300 Subject: [PATCH 3/3] New Features part 2 Added web server configuration Added the installation of EngineGP --- install.sh | 248 ++++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 219 insertions(+), 29 deletions(-) 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