nginx vhost Script für WordPress

Voraussetzungen:

  1. Nginx muss für PHP konfiguriert sein.
  2. Script als root ausführen.
  3. Die wprules.conf muss im Ordner /etc/nginx/ vorhanden sein!
  4. SSL Zertifikate vorher erstellen, damit es zu keiner Fehlermeldung kommt.
  5. SSL Zertifikate sollten die Endung -pub.pem bzw -key.pem haben.

Was das Script alles ausführt:

  1. Erstellen einer vhost Datei mit SSL Unterstützung ohne Zwangsumleitung auf SSL
  2. Legt die erfordlichen links in sites-enabled an.
  3. Prüft die Config auf Fehler.
  4. Nginx wird bei Erfolg neu geladen.
  5. Downloaden der Aktuellen WordPress Dateien.
  6. Kopieren der WordPress Dateien in den Webordner.
  7. Anlegen des Ordners uploads und upgrade im Ordner wp-content.
  8. Ändern der Rechte für www-data für wp-content und Webordner.

Bei Fragen bitte an admin [at] rootsvr2 [dot] de wenden.

Wenn das Kopieren des Codes zu aufwendig ist kann ich das Script auch gerne per Mail zusenden.

nginx vhost script


#!/bin/bash
echo "Erstellen einer Nginx Webserver Virtual Host Datei ohne SSL Zwang!!!"
echo "---------------------------------------------------------------------"
echo "Man muss hierfür \"root\" sein""-----------------------------------------"
echo "---------------------------------------------------------------------"
echo "Evtl. vorhandene vhosts Datei wird mit diesem Script überschrieben!!!"

read -p "Domainname: " domain

##Webordner Pfad

echo "Erstelle Webseitenordner"

read -p "Standartpfad angeben, ohne \"/\" am Ende. Z.B. /var/www: " pfad
if [ -d "$pfad/$domain" ] ; then
	echo "Ordner schon vorhanden!!!"
	else
	if ! [ -d "$pfad/$domain" ] ; then
	mkdir -p $pfad/$domain
		if [ -d "$pfad/$domain" ] ; then
		echo "Ordner wurde erstellt!!!"
		else 
		echo "Ordner wurde nicht erstellt!!! Script als \"root\" ausführen!!!"
		exit 1
		fi
	fi
fi

##SSL Pfad

echo "Pfad mit SSL Zertifikaten"

read -p "Vollständigen Ordnerpfad angeben, ohne \"/\" am Ende. Z.B. /etc/nginx/ssl: " sslpfad
if [ -d "$sslpfad" ] ; then
        echo "Ordner schon vorhanden!!!"
        else
        if ! [ -d "$sslpfad" ] ; then
        mkdir -p $sslpfad
                if [ -d "$sslpfad" ] ; then
                echo "Ordner wurde erstellt!!!"
                else
                echo "Ordner wurde nicht erstellt!!! Script als \"root\" ausführen!!!"
                exit 1
                fi
        fi
fi

##Erstellen der vhost Datei

echo "Virtual Host Datei wird erstellt"

cat <<EOF > /etc/nginx/sites-available/$domain
server {
        listen 80;
        listen [::]:80;
        server_name $domain;

        root $pfad/$domain;

        error_log /var/log/nginx/${domain}-error.log;

        location ~* \.php$ {
        include /etc/nginx/fastcgi_params;
        fastcgi_pass php;
        fastcgi_index index.php;
        fastcgi_split_path_info ^(.+\.php)(.*)$;
        fastcgi_param SCRIPT_FILENAME \$document_root\$fastcgi_script_name;
        location ~* (wp-config.php|xmlrpc.php) { deny all; }
        location ~* /(?:uploads|files)/.*\.php$ { deny all; }
        }

        include /etc/nginx/wprules.conf;
}

server {
        listen 443 ssl;
        listen [::]:443 ssl;
        server_name $domain;

        ssl_certificate ${sslpfad}/${domain}-pub.pem;
        ssl_certificate_key ${sslpfad}/${domain}-key.pem;
        ssl_protocols TLSv1.2 TLSv1.1 TLSv1;
        ssl_ciphers EECDH+AESGCM:!EDH+AESGCM:EECDH:!EDH:!MD5:!RC4:!LOW:!MEDIUM:!CAMELLIA:!ECDSA:!DES:!DSS:!3DES:!NULL;
        ssl_prefer_server_ciphers on;

        ssl_session_cache shared:SSL:10m;
        ssl_session_timeout 10m;

        root $pfad/$domain;

        error_log /var/log/nginx/${domain}-error.log;

        location ~* \.php$ {
        include /etc/nginx/fastcgi_params;
        fastcgi_pass php;
        fastcgi_index index.php;
        fastcgi_split_path_info ^(.+\.php)(.*)$;
        fastcgi_param SCRIPT_FILENAME \$document_root\$fastcgi_script_name;
        location ~* (wp-config.php|xmlrpc.php) { deny all; }
        location ~* /(?:uploads|files)/.*\.php$ { deny all; }
        }

        include /etc/nginx/wprules.conf;
}
EOF

##Webseiten Aktivierung und Nginx reload

echo "Webseite aktivieren"
if ! [ -f /etc/nginx/sites-enabled/$domain ] ; then
	ln -s /etc/nginx/sites-available/$domain /etc/nginx/sites-enabled/$domain
fi

echo "Config Test"
echo "-----------"
nginx -t
        if [ $? = 1 ] ; then
        echo "-------------------------------------------------"
        echo "Config fehlerhaft, Nginx reload nicht erfolgt!!!"
        echo "Detaillierte Beschreibung darüber!!!"
        exit 1
        fi

echo "----------------------------------------------------------------"
echo "Webseite erfolgreich erstellt!!!"
echo "----------------------------------------------------------------"

echo "Nginx reload"
service nginx reload

echo "----------------------------------------------------------------"

##Wordpress Download

read -p "Wordpress downloaden? j/n ": answer

case $answer in
  j) ;;
  n) exit 0 ;;
esac

user="www-data"
group="www-data"
content="wp-content"

if [ -d "$pfad/$domain" ] ; then
        echo "Aktuelle WordPress Dateien downloaden und entpacken!!!"
	wget https://de.wordpress.org/latest-de_DE.zip
	unzip -q latest-de_DE.zip
		if [ $? = 0 ] ; then
		rm -v latest-de_DE.zip
		else
		echo "Entpacken fehlgeschlagen!!!"
		exit 1
		fi
	echo "Wordpress in Webseitenordner kopieren!!!"
        cp -r wordpress/* $pfad/$domain
		if [ $? = 0 ] ; then
		rm -rf wordpress
		else
		echo "Kopieren fehlgeschlagen!!!"
		exit 1
		fi
	else
	echo "Downloaden und Kopieren fehlgeschlagen!!!"
fi
echo "----------------------------------------------------------------"

##Ordnerrechte

echo "Webseitenrechte und Ordner für eine WordPress Webseite anpassen!"
echo "----------------------------------------------------------------"
echo "Erstelle Verzeichnis $pfad/$domain/$content/uploads/"
        if ! [ -d "$pfad/$domain/$content/uploads/" ] ; then
        mkdir -p $pfad/$domain/$content/uploads
                if [ -d "$pfad/$domain/$content/uploads/" ] ; then
                echo "$pfad/$domain/$content/uploads/ wurde erstellt!!!"
                else
                echo "$pfad/$domain/$content/uploads/ wurde nicht erstellt!!! Script als \"root\" ausführen!!!"
                exit 1
                fi
        fi
echo "----------------------------------------------------------------"

echo "Erstelle Verzeichnis $pfad/$domain/$content/upgrade/"
        if ! [ -d "$pfad/$domain/$content/upgrade/" ] ; then
        mkdir -p $pfad/$domain/$content/upgrade
                if [ -d "$pfad/$domain/$content/upgrade/" ] ; then
                echo "$pfad/$domain/$content/upgrade/ wurde erstellt!!!"
                else
                echo "$pfad/$domain/$content/upgrade/ wurde nicht erstellt!!! Script als \"root\" ausführen!!!"
                exit 1
                fi
        fi
echo "----------------------------------------------------------------"

echo "Benutzerechte für $pfad/$domain anpassen"
chown $user $pfad/$domain
chgrp $group $pfad/$domain
chmod 0750 $pfad/$domain

echo "----------------------------------------------------------------"
echo "Benutzerrechte für $pfad/$domain/$content/ anpassen"
chown -R $user $pfad/$domain/$content/
chgrp -R $group $pfad/$domain/$content/
chmod 0775 $pfad/$domain/$content/

echo "----------------------------------------------------------------"
echo "Dateirechte für $pfad/$domain/$content/ anpassen"
find /$pfad/$domain/$content/* -type d -exec chmod 0775 {} \;

find /$pfad/$domain/$content/* -type f -exec chmod 0664 {} \;

##robots.txt erstellen

cat <<EOF > $pfad/$domain/robots.txt
User-agent: *
Disallow:
EOF

exit 0

Schreibe einen Kommentar

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

Time limit is exhausted. Please reload CAPTCHA.