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
Options SymLinksIfOwnerMatch
DirectoryIndex index.php
# Disallow web access to directories that don't need it
Require all denied
Require all denied
Require all denied
" > /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 "
ServerName $changedns
DocumentRoot /var/www/$changedns/
SSLEngine on
SSLCertificateKeyFile /etc/letsencrypt/live/$changedns/privkey.pem
SSLCertificateFile /etc/letsencrypt/live/$changedns/fullchain.pem
# Apache 2.4.10+ can proxy to unix socket
SetHandler 'proxy:unix:/var/run/php/php$phpversion-fpm.sock|fcgi://localhost'
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
# Apache 2.4.10+ can proxy to unix socket
SetHandler 'proxy:unix:/var/run/php/php$phpversion-fpm.sock|fcgi://localhost'
" > /etc/apache2/sites-available/$changedns.conf
sudo a2ensite $changedns.conf
service apache2 restart
fi
if [ $sslchecker == "0" ] || [ $sslchecker == "No" ] || [ $sslchecker == "no"]; then
printf "
ServerName $changedns
DocumentRoot /var/www/$changedns
ErrorLog /var/log/apache2/error.log
LogLevel warn
CustomLog /var/log/apache2/access.log combined
ServerSignature On
# Apache 2.4.10+ can proxy to unix socket
SetHandler 'proxy:unix:/var/run/php/php$phpversion-fpm.sock|fcgi://localhost'
" > /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 "
ServerName $domain
DocumentRoot /var/www/$domain/
SSLEngine on
SSLCertificateKeyFile /etc/letsencrypt/live/$domain/privkey.pem
SSLCertificateFile /etc/letsencrypt/live/$domain/fullchain.pem
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
" > /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 "
ServerName $domain
DocumentRoot /var/www/$domain
ErrorLog /var/log/apache2/error.log
LogLevel warn
CustomLog /var/log/apache2/access.log combined
ServerSignature On
" > /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
RequireValidShell off
# 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
DenyGroup !ftpuser
" > /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 "
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
" > /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.
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.
Schreibe einen Kommentar