, , , , , , , ,

Apache2 Webserver Manager – Script Installer | Linux Tutorial

Posted by

5
(2)

In diesem Tutorial möchte ich euch mein neues geschriebenes “Apache2 – Jackr Manager” Skript vorstellen und zeigen wie es funktioniert. Den ganzen Installationsvorgang könnt Ihr gerne im Video verfolgen.

Das Apache2 – Jackr Manager Skript, ist ein Tool, wo Ihr ganz einfach auf eurem Linux Server, einen Webserver installieren könnt und diesen sogar noch mit zusatz Tools wie FTP, MySQL & phpmyadmin ausstatten könnt. Zusätzlich könnt Ihr eure Domain mittels vHost, ein Let’s Encrypt Zertifikat ausstellen lassen und die PHP Version auf der einzelnen Domain ändern. Das alles geschieht automatisch in der Konsole wenn das Skript ausgeführt und die Eingaben getroffen wurden.

Nun, man kann gerade als Anfänger das Skript nutzen. Denn der Workflow ist sehr einfach und schnell und zudem braucht es gerade noch nicht so viel Linux Erfahrung als wenn man alles manuell installiert. Die Befehle sind schon vordefiniert im Skript mit Variablen und Ausgaben. Es ist alles im Skript vorhanden was Du brauchst, damit Du einen gut ausgestatten Webserver selbst hosten kannst.

Folgende Funktionen sind in der Version 1.0 vorhanden:

  • Webserver installieren
  • PHP Version wechseln
  • Domain hinzufügen
  • Domain entfernen
  • FTP Konto erstellen
  • FTP Konto löschen
  • MySQL User erstellen
  • MySQL User löschen
  • MySQL Passwort neu setzen

Ja, dieses Skript ist Open Source. Ich bin auf den Wunsch der Leser & Zuschauer gerne eingegangen und möchte meine Skripts, die ich für meinem Blog schreibe, alles offen legen. Das bedeutet, das Skript kann direkt angeschaut und bearbeitet werden. Zudem darf es für die Privatnutzung komplett modifiziert werden. Ich kann nähmlich schon verstehen, dass gerade bei den neuen Lesern die mich finden, ein Verschlüsseltes Skript, gerade nicht so eine Vertrauensbasis aufbaut, anstatt man sich gegenseitig Vertrauen schenkt. Ich möchte nur mit meinen Tools und Anleitungen euch helfen, die Server Welt besser zu verstehen.

Download

				
					nano apache_jackr-manager_1.0.sh
				
			

Mit nano, können wir ein neues Skript / Dokument erstellen und dann das Skript einfügen.

				
					#!/bin/bash

# www.server-verstehen.de
# Coded by CodeJackr

sleep 2;
clear
clear

apt-get update -y && apt-get upgrade -y;

clear
clear

REQUIRED_PKG="unzip"
PKG_OK=$(dpkg-query -W --showformat='${Status}\n' $REQUIRED_PKG|grep "install ok installed")
echo Checking for $REQUIRED_PKG: $PKG_OK
if [ "" = "$PKG_OK" ]; then
  echo "No $REQUIRED_PKG. Setting up $REQUIRED_PKG."
  sudo apt-get --yes install $REQUIRED_PKG
fi

REQUIRED_PKG="sudo"
PKG_OK=$(dpkg-query -W --showformat='${Status}\n' $REQUIRED_PKG|grep "install ok installed")
echo Checking for $REQUIRED_PKG: $PKG_OK
if [ "" = "$PKG_OK" ]; then
  echo "No $REQUIRED_PKG. Setting up $REQUIRED_PKG."
  sudo apt-get --yes install $REQUIRED_PKG
fi

REQUIRED_PKG="lolcat"
PKG_OK=$(dpkg-query -W --showformat='${Status}\n' $REQUIRED_PKG|grep "install ok installed")
echo Checking for $REQUIRED_PKG: $PKG_OK
if [ "" = "$PKG_OK" ]; then
  echo "No $REQUIRED_PKG. Setting up $REQUIRED_PKG."
  sudo apt-get --yes install $REQUIRED_PKG
    mkdir -p /root/tmp_cache
    cd /root/tmp_cache
    wget https://github.com/busyloop/lolcat/archive/master.zip
    unzip master.zip
    cd lolcat-master/bin
    gem install lolcat

fi

REQUIRED_PKG="figlet"
PKG_OK=$(dpkg-query -W --showformat='${Status}\n' $REQUIRED_PKG|grep "install ok installed")
echo Checking for $REQUIRED_PKG: $PKG_OK
if [ "" = "$PKG_OK" ]; then
  echo "No $REQUIRED_PKG. Setting up $REQUIRED_PKG."
  sudo apt-get --yes install $REQUIRED_PKG
fi

for ((i=1 ; i<=9999999 ; i++ )); do

figlet CodeJackr | lolcat

echo "
###################################
#     Apache2 - Jackr Manager     #
#           Version 1.0           #
###################################
#        Basis installation       #
###################################
# 1. Webserver installieren       #
# 2. PHP Version wechseln (vHost) #
###################################
#        Webserver Manager        #
###################################
# 3. Domain hinzufuegen (vHost)   #
# 4. Domain entfernen (vHost)     #
# 5. FTP Konto erstellen          #
# 6. FTP Konto entfernen          #
###################################
#              MySQL              #
###################################
# 7. MySQL User erstellen         #
# 8. MySQL User loeschen          #
# 9. MySQL Passwort neu setzen    #
###################################" | lolcat

    read -p "Geben Sie eine Zahl ein: " options

        if [ $options == "1" ]; then

            apt install ca-certificates apt-transport-https lsb-release gnupg curl nano unzip -y
            wget -q https://packages.sury.org/php/apt.gpg -O- | apt-key add -
            echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" | tee /etc/apt/sources.list.d/php.list
            apt install software-properties-common -y
            add-apt-repository ppa:ondrej/php
            apt update -y
            apt install apache2 -y
            apt install php7.4 php7.4-cli php7.4-common php7.4-curl php7.4-gd php7.4-intl php7.4-json php7.4-mbstring php7.4-mysql php7.4-opcache php7.4-readline php7.4-xml php7.4-xsl php7.4-zip php7.4-bz2 libapache2-mod-php7.4 -y
            apt install mariadb-server mariadb-client -y
            sleep 1;
            mysql_secure_installation

            cd /usr/share
            wget https://www.phpmyadmin.net/downloads/phpMyAdmin-latest-all-languages.zip -O phpmyadmin.zip
            
            unzip phpmyadmin.zip
            rm phpmyadmin.zip

            mv phpMyAdmin-*-all-languages phpmyadmin
            chmod -R 0755 phpmyadmin

            printf "
# phpMyAdmin Apache configuration

Alias /phpmyadmin /usr/share/phpmyadmin

<Directory /usr/share/phpmyadmin>
    Options SymLinksIfOwnerMatch
    DirectoryIndex index.php
</Directory>

# Disallow web access to directories that don't need it
<Directory /usr/share/phpmyadmin/templates>
    Require all denied
</Directory>
<Directory /usr/share/phpmyadmin/libraries>
    Require all denied
</Directory>
<Directory /usr/share/phpmyadmin/setup/lib>
    Require all denied
</Directory>
" > /etc/apache2/conf-available/phpmyadmin.conf

            sleep 1;
            a2enconf phpmyadmin
            systemctl reload apache2

            mkdir /usr/share/phpmyadmin/tmp/
            chown -R www-data:www-data /usr/share/phpmyadmin/tmp/

            service apache2 restart -y

        fi

        if [ $options == "2" ]; then

            clear

            sudo apt install software-properties-common -y;
            sudo add-apt-repository ppa:ondrej/php -y;
            apt update -y;

                clear
                clear

                read -p "Bitte gebe eine genaue PHP Version ein | z.B 7.2 oder 7.4 usw... : " phpversion

                    if [ ! $phpversion == " " ] || [ ! $phpversion == "" ]; then

                        sudo apt install libapache2-mod-fcgid -y;
                        sudo apt install libapache2-mod-fastcgi -y;
                        sudo apt install php$phpversion php$phpversion-fpm -y;

                            read -p "Nutzen Sie Ubuntu 18.04?: 1 = yes | 0 = no : " ubuntuchecker

                                if [ $ubuntuchecker == "1" ] || [ $ubuntuchecker == "Yes" ] || [ $ubuntuchecker == "yes" ]; then

                                sudo a2enmod actions fastcgi alias proxy_fcgi

                                fi
                                
                                if [ $ubuntuchecker == "0" ] || [ $ubuntuchecker == "No" ] || [ $ubuntuchecker == "no" ]; then

                                    #Ubuntu 18.04 Users:
                                    sudo a2enmod actions fcgid alias proxy_fcgi
                                
                                fi

                            read -p "Wie lautet die Domain der Webseite, die eine andere PHP Version haben soll? : " changedns
                            read -p "Wird aktuell SSL genutzt (Let's Encrypt)? 1 = yes | 0 = no : " sslchecker

                                    if [ ! $changedns == " " ] || [ ! $changedns == ""]; then



                                        if [ $sslchecker == "1" ] || [ $sslchecker == "Yes" ] || [ $sslchecker == "yes"]; then


                                                                printf "
<VirtualHost *:443>
    ServerName $changedns
    DocumentRoot /var/www/$changedns/
    SSLEngine on
    SSLCertificateKeyFile /etc/letsencrypt/live/$changedns/privkey.pem
    SSLCertificateFile /etc/letsencrypt/live/$changedns/fullchain.pem

    <FilesMatch \.php$>
        # Apache 2.4.10+ can proxy to unix socket
        SetHandler 'proxy:unix:/var/run/php/php$phpversion-fpm.sock|fcgi://localhost'
    </FilesMatch>

</VirtualHost>

<VirtualHost *:80>
        ServerName $changedns
        DocumentRoot /var/www/$changedns
        ErrorLog /var/log/apache2/error.log
        LogLevel warn
        Redirect permanent / https://$changedns/
        CustomLog /var/log/apache2/access.log combined
        ServerSignature On

    <FilesMatch \.php$>
        # Apache 2.4.10+ can proxy to unix socket
        SetHandler 'proxy:unix:/var/run/php/php$phpversion-fpm.sock|fcgi://localhost'
    </FilesMatch>

</VirtualHost>
" > /etc/apache2/sites-available/$changedns.conf

                                            sudo a2ensite $changedns.conf

                                            service apache2 restart

                                        fi

                                        if [ $sslchecker == "0" ] || [ $sslchecker == "No" ] || [ $sslchecker == "no"]; then

                                                                    printf "
<VirtualHost *:80>
        ServerName $changedns
        DocumentRoot /var/www/$changedns
        ErrorLog /var/log/apache2/error.log
        LogLevel warn
        CustomLog /var/log/apache2/access.log combined
        ServerSignature On

    <FilesMatch \.php$>
        # Apache 2.4.10+ can proxy to unix socket
        SetHandler 'proxy:unix:/var/run/php/php$phpversion-fpm.sock|fcgi://localhost'
    </FilesMatch>

</VirtualHost>
" > /etc/apache2/sites-available/$changedns.conf

                                            sudo a2ensite $changedns.conf

                                            service apache2 restart
                                        
                                        fi


                                            clear
                                            clear
                                            read -p "Einrichtung abgeschlossen! [Press ENTER] : "                               


                                    fi




                    fi


        fi


        if [ $options == "3" ]; then

            REQUIRED_PKG="certbot"
            PKG_OK=$(dpkg-query -W --showformat='${Status}\n' $REQUIRED_PKG|grep "install ok installed")
            echo Checking for $REQUIRED_PKG: $PKG_OK
            if [ "" = "$PKG_OK" ]; then
            echo "No $REQUIRED_PKG. Setting up $REQUIRED_PKG."
            sudo apt-get --yes install $REQUIRED_PKG
            fi

            REQUIRED_PKG="curl"
            PKG_OK=$(dpkg-query -W --showformat='${Status}\n' $REQUIRED_PKG|grep "install ok installed")
            echo Checking for $REQUIRED_PKG: $PKG_OK
            if [ "" = "$PKG_OK" ]; then
            echo "No $REQUIRED_PKG. Setting up $REQUIRED_PKG."
            sudo apt-get --yes install $REQUIRED_PKG
            fi

            REQUIRED_PKG="sudo"
            PKG_OK=$(dpkg-query -W --showformat='${Status}\n' $REQUIRED_PKG|grep "install ok installed")
            echo Checking for $REQUIRED_PKG: $PKG_OK
            if [ "" = "$PKG_OK" ]; then
            echo "No $REQUIRED_PKG. Setting up $REQUIRED_PKG."
            sudo apt-get --yes install $REQUIRED_PKG
            fi

            sleep 2;

            clear
            clear

            read -p "Domain Name: " domain
            read -p "Deine E-Mail Adresse fuer Zertifikat Benachrichtungen: " email
            read -p "Soll SSL genutzt werden? (Let's Encrypt Zertifikat wird erstellt.): 1 = Yes | 0 = No" ssl

                if [ $ssl == "1" ] || [ $ssl == "Yes" ] || [ $ssl == "yes" ]; then

                    ip_resolver=`curl -S https://api.ipify.org/`

                    read -p "Bitte jetzt einen DNS A Record anlegen bei der Domain: $domain | Mit IP-Adresse: $ip_resolver"

                    service apache2 stop

                    certbot certonly --standalone -d $domain --staple-ocsp -m $email --agree-tos

                    service apache2 start

                        if [ ! -f "/etc/letsencrypt/live/$domain/fullchain.pem" ]; then

                            echo "Error! SSL Zertifikat konnte nicht gefunden... (.crt)"
                            sleep 2;

                            read -p "[Press ENTER]: "

                        fi

                         if [ ! -f "/etc/letsencrypt/live/$domain/privkey.pem" ]; then

                            echo "Error! SSL Zertifikat konnte nicht gefunden... (.key)"
                            sleep 2;

                            read -p "[Press ENTER]: "

                        fi

                    printf "
<VirtualHost *:443>
    ServerName $domain
    DocumentRoot /var/www/$domain/
    SSLEngine on
    SSLCertificateKeyFile /etc/letsencrypt/live/$domain/privkey.pem
    SSLCertificateFile /etc/letsencrypt/live/$domain/fullchain.pem
</VirtualHost>

<VirtualHost *:80>
        ServerName $domain
        DocumentRoot /var/www/$domain
        ErrorLog /var/log/apache2/error.log
        LogLevel warn
        Redirect permanent / https://$domain/
        CustomLog /var/log/apache2/access.log combined
        ServerSignature On
</VirtualHost>
" > /etc/apache2/sites-available/$domain.conf



                mkdir -p /var/www/$domain
                a2enmod ssl
                sudo a2ensite $domain.conf
                service apache2 restart

                clear
                clear

                read -p "Domain wurde hinzufuegt! [Press ENTER]: "

                fi

                if [ $ssl == "0" ] || [ $ssl == "No" ] || [ $ssl == "no" ]; then

                    printf "
<VirtualHost *:80>
        ServerName $domain
        DocumentRoot /var/www/$domain
        ErrorLog /var/log/apache2/error.log
        LogLevel warn
        CustomLog /var/log/apache2/access.log combined
        ServerSignature On
</VirtualHost>
" > /etc/apache2/sites-available/$domain.conf

                    mkdir -p /var/www/$domain
                    sudo a2ensite $domain.conf
                    service apache2 restart

                    clear
                    clear

                    read -p "Domain wurde hinzufuegt! [Press ENTER]: "

                fi

            fi

            if [ $options == "4" ]; then

                clear
                clear

                read -p "Geben Sie den Domain Namen ein, der ausgetragen werden soll: " deldomain

                sudo a2dissite $deldomain.conf
                service apache2 restart

                clear

                read -p "Soll das aktuelle Webverzeichnis von Domain: $deldomain entfernt werden?: 1 = yes | 0 = no"

                    if [ $options == "1" ] || [ $options == "Yes" ] || [ $options == "yes" ]; then

                        if [ -d "/var/www/$deldomain"]; then

                            rm -r /var/www/$deldomain
                            
                            clear
                            clear

                            read -p "Domain wurde erfolgreich entfernt! [Press ENTER]: "

                        fi

                    fi

                    if [ $options == "0" ] || [ $options == "No" ] || [ $options == "no" ]; then

                        clear
                        clear

                        read -p "Domain wurde erfolgreich entferntn & Webverzeichnis wurde nicht geloescht! [Press ENTER]: "

                    fi


            fi


            if [ $options == "5" ]; then

            clear
            clear

            REQUIRED_PKG="proftpd-basic"
            PKG_OK=$(dpkg-query -W --showformat='${Status}\n' $REQUIRED_PKG|grep "install ok installed")
            echo Checking for $REQUIRED_PKG: $PKG_OK
            if [ "" = "$PKG_OK" ]; then
            echo "No $REQUIRED_PKG. Setting up $REQUIRED_PKG."
            sudo apt-get --yes install $REQUIRED_PKG
                            printf "
# FTP-Benutzer benötigen keine gültige Shell
<Global>
    RequireValidShell off
</Global>

# IPv6 deaktivieren (falls gewünscht)
UseIPv6 off

# Home-Verzeichnis als Stammverzeichnis der FTP-Benutzer festlegen
DefaultRoot ~ ftpuser

# Login nur für Benutzer der Gruppe "ftpuser" erlauben
<Limit LOGIN>
    DenyGroup !ftpuser
</Limit>" > /etc/proftpd/conf.d/ftp.conf

        	systemctl restart proftpd

            openssl req -x509 -newkey rsa:2048 -keyout /etc/ssl/private/proftpd.key -out /etc/ssl/certs/proftpd.crt -nodes -days 1460

            printf "
<IfModule mod_tls.c>
    TLSEngine on
    TLSLog /var/log/proftpd/tls.log
    TLSProtocol TLSv1.2
    TLSRSACertificateFile /etc/ssl/certs/proftpd.crt
    TLSRSACertificateKeyFile /etc/ssl/private/proftpd.key
    TLSVerifyClient off
    TLSOptions NoSessionReuseRequired
    TLSRequired on
</IfModule>" > /etc/proftpd/conf.d/tls.conf

            sed -i 's/#LoadModule mod_tls.c/LoadModule mod_tls.c/g' /etc/proftpd/modules.conf
            systemctl restart proftpd

            addgroup ftpuser

            fi

            clear
            clear

            REQUIRED_PKG="openssl"
            PKG_OK=$(dpkg-query -W --showformat='${Status}\n' $REQUIRED_PKG|grep "install ok installed")
            echo Checking for $REQUIRED_PKG: $PKG_OK
            if [ "" = "$PKG_OK" ]; then
            echo "No $REQUIRED_PKG. Setting up $REQUIRED_PKG."
            sudo apt-get --yes install $REQUIRED_PKG
            fi

                read -p "Geben Sie das Verzeichnis ein, dass als Default Verzeichnis fuer den FTP-User einsehbar sein soll: " wwwuser
                read -p "Wie soll der neue FTP-User heißen?: " ftpuser

                    adduser $ftpuser --shell /bin/false --home $wwwuser

                    adduser $ftpuser ftpuser

                    chown -R $ftpuser:ftpuser $wwwuser
                    chown -R $ftpuser:ftpuser $wwwuser/*

                    sleep 2;

                    clear
                    clear

                    read -p "Der FTP-User wurde hinzugefuegt! [Press ENTER]: "


            fi

            if [ $options == "6" ]; then

                clear
                clear

                read -p "Geben Sie den FTP-User ein, der entfernt werden soll: " delftp

                deluser $delftp

                sleep 2;

                clear
                clear

                    read -p "Der FTP-User wurde geloescht [Press ENTER]: "
                
                clear
                clear

            fi



        if [ $options == "7" ]; then

            clear
            clear


read -p "phpmyadmin benutzernamen erstellen: " username
read -p "phpmyadmin passwort erstellen: " password

                if [ ! $username == " " ] || [ ! $username == "" ]; then

                    if [ ! $password == " " ] || [ ! $password == "" ]; then


                        (
                        echo -e "CREATE USER '$username'@'localhost' IDENTIFIED BY '$password';\r";
                        echo -e "GRANT ALL PRIVILEGES ON *.* TO '$username'@'localhost' WITH GRANT OPTION;\r";
                        echo -e "exit\r";

                        sleep 0.1;
                        ) | mysql -u root

                        clear
                        clear

                        echo "Benutzer: $username wurde angelegt!";

                        read -p "[Press ENTER]: "

                    fi

                fi

        fi

                if [ $options == "8" ]; then

            clear
            clear


read -p "phpmyadmin benutzernamen eingeben der geloescht werden soll:  " username

                if [ ! $username == " " ] || [ ! $username == "" ]; then

                        (
                        echo -e "DROP USER '$username'@'localhost';\r";
                        echo -e "exit\r";

                        sleep 0.1;
                        ) | mysql -u root

                        clear
                        clear

                        echo "Benutzer: $username wurde geloescht!";

                        read -p "[Press ENTER]: "

                    fi

        fi

        if [ $options == "9" ]; then

            clear
            clear


read -p "Gebe den phpmyadmin benutzernamen ein: " username
read -p "Neues phpmyadmin passwort erstellen: " password

                if [ ! $username == " " ] || [ ! $username == "" ]; then

                    if [ ! $password == " " ] || [ ! $password == "" ]; then


                        (
                        echo -e "UPDATE mysql.user SET Password=PASSWORD('$password') WHERE USER='$username' AND Host='localhost';\r";
                        echo -e "FLUSH PRIVILEGES;\r";
                        echo -e "exit\r";

                        sleep 0.1;
                        ) | mysql -u root

                        clear
                        clear

                        echo "Neues Passwort: $password wurde gesetzt!";

                        read -p "[Press ENTER]: "

        

                    fi

                fi

        fi

done
				
			

Hier könnt Ihr das Skript kopieren und dann auf eurem Linux Server abspeichern.

				
					chmod 777 apache_jackr-manager_1.0.sh
				
			

Mit diesem Befehl, bekommt das Skript die benötigten Rechte. Zudem ist es wichtig, dass Skript mit den Linux User root auszuführen.

				
					./apache_jackr-manager_1.0.sh
				
			

Mit diesem Befehl können wir nun das Skript ausführen.

Facebook
Twitter
WhatsApp
Telegram
Email
Reddit

Wie hilfreich war dieser Beitrag?

Klicke auf die Sterne um zu bewerten!

Durchschnittliche Bewertung 5 / 5. Anzahl Bewertungen: 2

Bisher keine Bewertungen! Sei der Erste, der diesen Beitrag bewertet.

4 Antworten

  1. Avatar von admblacky
    admblacky
    1. Avatar von RAW Networks
  2. Avatar von Jason
    Jason
    1. Avatar von RAW Networks

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert