diff --git a/lib/general b/lib/general index 97ecd9b..ef7767d 100644 --- a/lib/general +++ b/lib/general @@ -117,16 +117,19 @@ pre_install() { sudo apt-get -qq update if [[ $(conf_read pre-packs) != true ]]; then # Check for missing essential packages + api_update i1 sudo apt-get -y -qq install software-properties-common sudo apt-get -y -qq install python-software-properties sudo apt-get -y -qq install pwgen sudo apt-get -y -qq install unzip conf_write pre-packs true + api_update i2 fi } mysql_client_install() { + api_update im2 local osname=$(check_osname) # Cases with MariaDB v10.2 support case "$osname" in @@ -143,6 +146,7 @@ mysql_client_install() { sudo apt-get -y install mariadb-client conf_write mysql-client true echo "${gre}MySQL Client has been successfully installed!${end}" + api_update im3 } @@ -163,6 +167,15 @@ tools_port() { } +api_update() { + conf_write status-api $1 + if [[ -a /opt/webinoly/lib/myapi ]]; then + source /opt/webinoly/lib/myapi + api_catch_status $1 + fi +} + + conf_read() { local val=$(grep -w "^${1}:.*" /opt/webinoly/webinoly.conf | cut -f 2 -d ':') echo $val diff --git a/lib/install b/lib/install index 6b00122..aba8f89 100644 --- a/lib/install +++ b/lib/install @@ -15,6 +15,7 @@ app_purge() { linux_optim() { + api_update in4 if [[ $(conf_read linux-optim) == "true" ]]; then exit 1 fi @@ -83,11 +84,13 @@ net.ipv4.tcp_max_syn_backlog = 3240000 sudo kill $(cat /run/nginx.pid) conf_write linux-optim true sudo nginx -t && sudo service nginx start + api_update in7 } linux_purge() { if [[ $(conf_read linux-optim) == "true" ]]; then + api_update pn7 sudo sed -i '/WebinolyStart/,/WebinolyEnd/{/.*/d}' /etc/security/limits.conf sudo sed -i '/WebinolyStart/,/WebinolyEnd/{/.*/d}' /etc/sysctl.conf sudo rm -rf /etc/systemd/system/nginx.service.d @@ -96,6 +99,7 @@ linux_purge() { sudo sysctl -p sudo systemctl daemon-reload conf_write linux-optim purged + api_update pn8 fi } @@ -119,6 +123,7 @@ messagend_install() { nginx_install() { + api_update in1 if [[ ($(conf_read nginx-ppa) == "mainline" || $value == "mainline") && $value != "stable" ]]; then echo | sudo add-apt-repository ppa:nginx/development conf_write nginx-ppa mainline @@ -137,10 +142,12 @@ nginx_install() { sudo nginx -t && sudo service nginx start conf_write nginx true echo "${gre}Nginx has been installed successfully! ${end}" + api_update in2 } php_install() { + api_update ip1 if [[ -n $(conf_read php-ver) && ($(conf_read php-ver) == "7.2" || $(conf_read php-ver) == "7.1" || $(conf_read php-ver) == "7.0" || $(conf_read php-ver) == "5.6") ]]; then echo "${gre}Default PHP version '$(conf_read php-ver)' detected!${end}" else @@ -187,10 +194,12 @@ php_install() { conf_write php true conf_write php-v$ver true echo "${gre}PHP has been installed successfully! ${end}" + api_update ip2 } mysql_install() { + api_update im1 [[ $(conf_read mysql-client) != "true" ]] && mysql_client_install pre_install @@ -226,11 +235,13 @@ _EOF_ conf_write mysql true echo "${gre}MySQL has been installed successfully! ${end}" + api_update im4 } #NGINX OPTIM nginx_optim() { + api_update in3 sudo cp -R /opt/webinoly/templates/nginx/common /etc/nginx/common sudo cp -R /opt/webinoly/templates/nginx/conf.d/* /etc/nginx/conf.d/ @@ -254,12 +265,14 @@ nginx_optim() { linux_optim server_version conf_write nginx-optim true + api_update in8 } # PHP OPTIM php_optim() { + api_update ip3 [[ -n $1 ]] && ver="$1" || ver=$(conf_read php-ver) if [[ -n $(conf_read max-mb-uploads) && $(conf_read max-mb-uploads) =~ ^[0-9]+$ ]]; then @@ -291,6 +304,7 @@ php_optim() { sudo sed -i '/pm.max_requests =/c\pm.max_requests = 500' /etc/php/$ver/fpm/pool.d/www.conf sudo sed -i '/pm.status_path =/c\pm.status_path = /status' /etc/php/$ver/fpm/pool.d/www.conf sudo sed -i '/ping.path =/c\ping.path = /ping' /etc/php/$ver/fpm/pool.d/www.conf + if [[ $(conf_read multi-php) == "true" ]]; then [[ $ver == 7.2 ]] && sudo sed -i '/listen = /c\listen = 127.0.0.1:9000' /etc/php/$ver/fpm/pool.d/www.conf [[ $ver == 7.1 ]] && sudo sed -i '/listen = /c\listen = 127.0.0.1:9002' /etc/php/$ver/fpm/pool.d/www.conf @@ -306,6 +320,7 @@ php_optim() { sudo sed -i '/rlimit_core =/c\rlimit_core = unlimited' /etc/php/$ver/fpm/pool.d/debug.conf sudo sed -i "/slowlog =/c\slowlog = /var/log/php/$ver/slow.log" /etc/php/$ver/fpm/pool.d/debug.conf sudo sed -i '/request_slowlog_timeout =/c\request_slowlog_timeout = 10s' /etc/php/$ver/fpm/pool.d/debug.conf + if [[ $(conf_read multi-php) == "true" ]]; then [[ $ver == 7.2 ]] && sudo sed -i '/listen = /c\listen = 127.0.0.1:9001' /etc/php/$ver/fpm/pool.d/debug.conf [[ $ver == 7.1 ]] && sudo sed -i '/listen = /c\listen = 127.0.0.1:9003' /etc/php/$ver/fpm/pool.d/debug.conf @@ -326,6 +341,7 @@ php_optim() { conf_write php-optim true sudo service php*-fpm reload + api_update ip4 } @@ -339,6 +355,7 @@ nginx_tool_site() { nginx_tool() { + api_update in9 [[ -z $(conf_read tools-port) ]] && tools_port 22222 [[ $(conf_read php) == "true" ]] && nginx_tool_site # in case php was installed before nginx @@ -353,10 +370,12 @@ nginx_tool() { conf_write web-tool true conf_write nginx-tool true + api_update in10 } php_tool_site() { + api_update ip6 # Status pages sudo mkdir -p /var/www/$(conf_read tools-port)/htdocs/fpm/status sudo touch /var/www/$(conf_read tools-port)/htdocs/fpm/status/php @@ -366,10 +385,12 @@ php_tool_site() { sudo mkdir -p /var/www/$(conf_read tools-port)/htdocs/php sudo touch /var/www/$(conf_read tools-port)/htdocs/php/index.php sudo echo '' >> /var/www/$(conf_read tools-port)/htdocs/php/index.php + api_update ip7 } php_tool() { + api_update ip5 # in case nginx was installed before php if [[ $(conf_read nginx-tool) == "true" && ! -a /etc/nginx/sites-available/$(conf_read tools-port) ]]; then nginx_tool_site @@ -394,10 +415,12 @@ php_tool() { sudo service php*-fpm reload conf_write web-tool true conf_write php-tool true + api_update ip8 } mysql_tool() { + api_update im5 #PhpMyAdmin unattended script installation local AUTOGENPASS_PMA=`pwgen -s -1` echo "phpmyadmin phpmyadmin/dbconfig-install boolean true" | debconf-set-selections @@ -413,17 +436,20 @@ mysql_tool() { conf_write mysql-tool true echo "${gre}PhpMyAdmin has been installed successfully! ${end}" + api_update im6 } swap_delete() { local swapkb=$(grep SwapTotal /proc/meminfo | cut -f 2 -d ':' | tr -d ' ' | cut -f 1 -d 'k') if [[ -n $swapkb && $swapkb =~ ^[0-9]+$ && $swapkb -gt 0 && $(conf_read swap-owner) == "webinoly" ]]; then + api_update pn9 sudo swapoff -a -v > /dev/null sudo rm /swapfile sudo sed -i '/\/swapfile/d' /etc/fstab sudo sed -i '/vm.swappiness/d' /etc/sysctl.conf conf_delete swap-owner + api_update pn10 fi } @@ -442,6 +468,7 @@ swap_create() { # https://help.ubuntu.com/community/SwapFaq if [[ -z $swapkb || $swapkb == "0" ]]; then + api_update in5 if [[ -n $(conf_read swap-mem) && $(conf_read swap-mem) =~ ^[0-9]+$ ]]; then local newswap=$(conf_read swap-mem) elif [[ $ram -le 2 ]]; then @@ -488,6 +515,7 @@ swap_create() { echo "${gre} A new SWAP Partion (${newswap}Gb) has been created! ${end}" fi + api_update in6 else if [[ $(conf_read swap-owner) != "webinoly" ]]; then conf_write swap-owner system diff --git a/lib/myapi-sample b/lib/myapi-sample new file mode 100644 index 0000000..b5e14c7 --- /dev/null +++ b/lib/myapi-sample @@ -0,0 +1,60 @@ +#!/bin/bash + +# Installation process +# +# i1 - Common Packages +# i2 - Common Packages Finished +# +# in1 - NGINX Installation +# in2 - NGINX Installation Finished +# in3 - NGINX Optimization +# in4 - Ubuntu Optimization +# in5 - SWAP Creation +# in6 - SWAP Creation Finished +# in7 - Ubuntu Optimization Finished +# in8 - NGINX Optimization Finished +# in9 - NGINX Tools +# in10 - NGINX Tools Finished +# +# ip1 - PHP Installation +# ip2 - PHP Installation Finished +# ip3 - PHP Optimization +# ip4 - PHP Optimization Finished +# ip5 - PHP Tools +# ip6 - PHP Tools site creation +# ip7 - PHP Tools site creation Finished +# ip8 - PHP Tools Finished +# +# im1 - MySQL Installation +# im2 - MySQL Client Installation +# im3 - MySQL Client Installation Finished +# im4 - MySQL Installation Finished +# im5 - MySQL Tool (PhpMyAdmin) +# im6 - MySQL Tool (PhpMyAdmin) Finished +# +# +# Purge (UnInstall) +# +# pn1 - NGINX Purge +# pn2 - NGINX Delete All Sites +# pn3 - NGINX Delete All Sites Finished +# pn4 - NGINX Purge Finished +# pn5 - NGINX Purge Tools +# pn6 - NGINX Purge Tools Finished +# pn7 - Ubuntu Optimization Purge +# pn8 - Ubuntu Optimization Purge Finished +# pn9 - SWAP Purge +# pn10 - SWAP Purge Finished +# +# pp1 - PHP Purge +# pp2 - PHP Purge Finished +# +# pm1 - MySQL Purge +# pm2 - MySQL Tool (PhpMyAdmin) Purge +# pm3 - MySQL Tool (PhpMyAdmin) Purge Finished +# pm4 - MySQL Purge Finished + + +api_catch_status() { + echo "${blu}API Status: $1 ${end}" +} diff --git a/lib/site-ssl b/lib/site-ssl index c4d8f6e..a0c936c 100644 --- a/lib/site-ssl +++ b/lib/site-ssl @@ -67,12 +67,13 @@ site_ssl_on() { if [[ -a /etc/letsencrypt/live/$root/fullchain.pem ]]; then sudo sed -i '/listen 80/c \ listen 443 ssl http2;' /etc/nginx/sites-available/$domain sudo sed -i '/listen \[::\]:80/c \ listen [::]:443 ssl http2;' /etc/nginx/sites-available/$domain - sudo sed -i '/headers-html.conf/a \ include common/headers-https.conf;' /etc/nginx/sites-available/$domain + sudo sed -i '/headers-http.conf/a \ include common/headers-https.conf;' /etc/nginx/sites-available/$domain sudo sed -i '/server_name /r /opt/webinoly/templates/template-site-ssl' /etc/nginx/sites-available/$domain sudo sed -i "/WebinolySSLstart/,/WebinolySSLend/{s/domain.com/$domain/}" /etc/nginx/sites-available/$domain # HTTP to HTTPS Redirection - local sername=$(grep -w "server_name .*;" /etc/nginx/sites-available/$domain) + local sername="server_name $domain www.$domain;" + [[ $subdomflag == 1 ]] && sername="server_name $domain;" sudo sed -i '1r /opt/webinoly/templates/template-site-sslredirect' /etc/nginx/sites-available/$domain sudo sed -i "/#server_name;/c \ $sername" /etc/nginx/sites-available/$domain @@ -107,7 +108,7 @@ site_ssl_off() { answer=="N" else echo "${blu}" - echo " Do you want to delete your certificate files [y/N]? " + echo "Do you want to delete your certificate files [y/N]? " while read -r -n 1 -s answer; do answer=${answer:-n} [[ $answer = [YyNn] ]] && break @@ -120,7 +121,7 @@ site_ssl_off() { rm -rf /etc/letsencrypt/renewal/${domain}.conf rm -rf /etc/letsencrypt/archive/${domain} echo "${gre}" - echo " Certificate for your site $domain has been completely removed!" + echo "Certificate for your site $domain has been completely removed!" echo "${end}" fi echo "${gre}SSL have been successfully disabled for site $domain!${end}" diff --git a/lib/sites b/lib/sites index c5dab0f..790baea 100644 --- a/lib/sites +++ b/lib/sites @@ -538,3 +538,67 @@ createsite() { echo "${gre}Site $domain has been successfully created!${end}" } + + +force_redirect() { + if ! [[ $value =~ ^(www|root|off)$ ]]; then + echo "${red}Please, enter a valid argument!${end}" + exit 1 + fi + if [[ $subdomflag == 1 ]]; then + echo "${red}Please, use the main/root domain, Force-Redirection should not be used in Subdomains!${end}" + exit 1 + fi + + local rediron=$( grep -F "WebinolyWWWredirectStart" /etc/nginx/sites-available/$domain ) + local sername="server_name $domain www.$domain;" + cp /opt/webinoly/templates/template-site-wwwredirect /tmp/template-site-wwwredirect + + case $value in + "www") + [[ -n $rediron ]] && sudo sed -i '/WebinolyWWWredirectStart/,/WebinolyWWWredirectEnd/{/.*/d}' /etc/nginx/sites-available/$domain + sudo sed -i "/#server_name;/c \ server_name $domain;" /tmp/template-site-wwwredirect + sudo sed -i "/#return 301;/c \ return 301 \$scheme://www.${domain}\$request_uri;" /tmp/template-site-wwwredirect + sudo sed -i "/server_name /c \ server_name www.$domain;" /etc/nginx/sites-available/$domain + echo "${gre}Force-Redirection to WWW has been successfully enabled!${end}" + ;; + "root") + [[ -n $rediron ]] && sudo sed -i '/WebinolyWWWredirectStart/,/WebinolyWWWredirectEnd/{/.*/d}' /etc/nginx/sites-available/$domain + sudo sed -i "/#server_name;/c \ server_name www.$domain;" /tmp/template-site-wwwredirect + sudo sed -i "/#return 301;/c \ return 301 \$scheme://${domain}\$request_uri;" /tmp/template-site-wwwredirect + sudo sed -i "/server_name /c \ server_name $domain;" /etc/nginx/sites-available/$domain + echo "${gre}Force-Redirection to non-WWW has been successfully enabled!${end}" + ;; + "off") + if [[ -n $rediron ]]; then + sudo sed -i '/WebinolyWWWredirectStart/,/WebinolyWWWredirectEnd/{/.*/d}' /etc/nginx/sites-available/$domain + sudo sed -i "/server_name /c \ $sername" /etc/nginx/sites-available/$domain + echo "${gre}Force-Redirection has been successfully disabled!${end}" + else + echo "${red}Force-Redirect is already disabled for site $domain!${end}" + fi + ;; + esac + + # If SSL is enabled insert after that - First redirect should be to HTTPS due to HSTS. + isssl=$( grep -F "ssl on;" /etc/nginx/sites-available/$domain ) + if [[ -z $isssl && $value =~ ^(www|root)$ ]]; then + sudo sed -i '1r /tmp/template-site-wwwredirect' /etc/nginx/sites-available/$domain + elif [[ -n $isssl && $value =~ ^(www|root)$ ]]; then + sudo sed -i '/listen 80/c \ listen 443 ssl http2;' /tmp/template-site-wwwredirect + sudo sed -i '/listen \[::\]:80/c \ listen [::]:443 ssl http2;' /tmp/template-site-wwwredirect + + if [[ $cache != "-ignore-ssl" ]]; then + sudo sed -i '/headers-http.conf/a \ include common/headers-https.conf;' /tmp/template-site-wwwredirect + sudo sed -i '/server_name /r /opt/webinoly/templates/template-site-ssl' /tmp/template-site-wwwredirect + sudo sed -i "/WebinolySSLstart/,/WebinolySSLend/{s/domain.com/$domain/}" /tmp/template-site-wwwredirect + fi + + sudo sed -i "/WebinolySSLredirectStart/,/WebinolySSLredirectEnd/s/\(server_name\).*$/$sername/" /etc/nginx/sites-available/$domain + sudo sed -i '/WebinolySSLredirectEnd/r /tmp/template-site-wwwredirect' /etc/nginx/sites-available/$domain + fi + + sudo rm /tmp/template-site-wwwredirect + +} + diff --git a/plugins/site b/plugins/site index dbba6f0..165826c 100644 --- a/plugins/site +++ b/plugins/site @@ -2,8 +2,8 @@ # Site Manager Plugin (Create, delete and de/activate) # Syntax: site