Das Skript hat unerwartet positives Feedback aus der Community erhalten — offenbar wird eine Anleitung zur Feinabstimmung benötigt.

Haftungsausschluss: Das Skript ist voll funktionsfähig, die Konfigurationen sind über Jahre hinweg erprobt und auf Hunderten von VPS und Dedicated Servern getestet. Der Autor nutzt sie selbst täglich. Vieles hängt jedoch von Ihrem Hoster, dessen Konfigurationen und anderen externen, nicht beeinflussbaren Faktoren ab. Bitte testen Sie die Funktionsfähigkeit vor dem Produktiveinsatz!

Informationen#

Was es macht#

Richtet vollautomatisch einen VPS oder Dedicated Server von Grund auf als Webserver ein.

Installiert:

  • Nginx
  • PHP-FPM in den Versionen 7.4 und 8.2 (umschaltbar in der Konfiguration)
  • MariaDB

Worin liegt der Nutzen#

  • Liefert eine universelle Konfiguration, die hervorragende Automatisierungsmöglichkeiten bietet (dazu weiter unten)
  • Ihr Server kann nicht über Sicherheitslücken im Control Panel gehackt werden, wenn Sie kein Control Panel haben
  • Belastet das System nicht, zieht keine unnötigen Pakete und sonstigen Ballast ins System
  • Ermöglicht die Feinabstimmung aller Komponenten, einschließlich sehr raffinierter Weiterleitungen und Proxys innerhalb des Servers

Was ist die universelle Konfiguration?#

Es ist eine Webserver-Konfiguration, die AUTOMATISCH erkennt, für welche Domain die Anfrage eingeht, und sie in das richtige Verzeichnis weiterleitet. Sie müssen lediglich einen Ordner in /var/www/ mit dem Domainnamen erstellen (z. B. /var/www/google.com), die Dateien hochladen — und es funktioniert automatisch! Ohne jegliche zusätzlichen Eingriffe und Klicks.

Grundlegende Verwendung#

WICHTIG! Das Skript funktioniert zu 100 % korrekt auf Rocky 9 und mit 99,99 % Wahrscheinlichkeit korrekt auf CentOS 9. Die Verwendung von Rocky 8 oder CentOS 8 ist unerwünscht, aber möglich.

NUR EIN SAUBERER SERVER! KEINE LAMPs und sonstige Pakete. NUR DAS NACKTE BETRIEBSSYSTEM! Fordern Sie ein sauberes OS bei Ihrem Hoster an!

curl -s https://repo.privateflare.com/webhostscript/webhostscript.bash | bash

…und nach ein paar Minuten ist Ihr Server bereit. Sie können sich per SFTP mit FileZilla, WinSCP oder Transmit verbinden und Ihre Landingpages, Websites und dergleichen hochladen.

Zur Funktionsprüfung können Sie eine beliebige Domain auf die Server-IP richten und sie öffnen. Erstellen Sie vorher eine Informationsdatei:

echo "<? phpinfo();" > /var/www/noroot/index.php

Vergessen Sie nicht, sie nach der Prüfung zu löschen!

rm -f /var/www/noroot/index.php

Erweiterte Verwendung#

Alle Operationen werden per SFTP mit FileZilla (Win), WinSCP (Win, empfohlen) oder Transmit (macOS) durchgeführt.

Verwendung individueller Konfigurationen für Domains#

Dies kann nützlich sein, wenn Sie auf Ihrem Server neben normalen White-Pages, Landingpages oder anderen einfachen Websites beispielsweise einen WordPress-Blog betreiben möchten.

In diesem Fall bearbeiten Sie zunächst die Haupt-Nginx-Konfiguration. Sie befindet sich im Verzeichnis /etc/nginx. Bearbeiten Sie diese:

Vorher

image

Fügen Sie die Zeile include conf.d/*.conf; hinzu. Nachher

image

Und laden Sie die Konfiguration über die Konsole neu:

nginx -t && nginx -s reload

Kopieren Sie dann aus der Vorlage die benötigte Konfiguration. Kopieren Sie host_nossl.conf_ (in diesem Beispiel verwenden wir die Konfiguration ohne SSL-Zertifikate und HTTPS) in google.com.conf.

Öffnen Sie die neue Datei google.com.conf und ersetzen Sie zunächst per Suchen-und-Ersetzen VHOST durch Ihre Domain (google.com). Passen Sie dann nach Bedarf an. Für WordPress sieht die Konfiguration beispielsweise so aus:

server {
    listen 80;
    server_name google.com; # <-- geändert

    #access_log off;
    error_log /var/log/nginx/error.log;
    access_log /var/log/nginx/access.log main;

    root /var/www/google.com; # <-- geändert
    index index.php index.html;

    location ~ /.well-known {
        root /var/www/noroot;
    }

    location / {
        try_files $uri $uri/ /index.php?$args; # <-- geändert
    }

    location ~ \.php$ {
        index index.php;
        include php82.conf; # <-- geändert
    }
}

Speichern Sie und laden Sie die Konfiguration neu:

nginx -t && nginx -s reload

Ihr Blog sollte jetzt bereits funktionieren.

Verwendung von SSL-(TLS-)Zertifikaten#

Dies kann nützlich sein, wenn Sie das Hosting direkt nutzen möchten, ohne PrivateFlare oder Cloudflare.

Generieren Sie das Zertifikat.

WICHTIG! LetsEncrypt erstellt Zertifikate manchmal nicht beim ersten Mal, aufgrund von Wartungsarbeiten, unvollständiger NS-Aktualisierung oder anderer Gründe. Wir stehen in keiner Beziehung zu dieser Organisation und können die Funktionsfähigkeit nicht beeinflussen. Bei Problemen — überprüfen Sie die A-Einträge und versuchen Sie es später erneut.

# In diesem Beispiel ist google.com Ihre Domain, ersetzen Sie sie durch Ihre eigene
# user@gmail.com ist Ihre E-Mail-Adresse, ersetzen Sie sie ebenfalls durch Ihre eigene
certbot certonly -d google.com -n --email user@gmail.com --agree-tos --webroot -w /var/www/noroot

Wenn das Zertifikat erfolgreich generiert wurde, sehen Sie ungefähr diese Meldung:

Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/api.param.me/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/api.param.me/privkey.pem
   Your cert will expire on 2019-06-27. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot again
   with the "certonly" option. To non-interactively renew *all* of
   your certificates, run "certbot renew"

Anschließend gehen Sie genauso vor, verwenden aber die Vorlage host_ssl.conf_. Die endgültige Konfiguration sieht so aus:

server {
    listen 80;
    server_name google.com; # <-- geändert

    #access_log off;
    error_log /var/log/nginx/error.log;
    access_log /var/log/nginx/access.log main;

    location ~ /.well-known {
        root /var/www/noroot;
    }

    location / {
        # try_files $uri $uri/ /index.php?$args;
        return 301 https://$host$request_uri;
    }
}

server {
    listen 443 ssl;
    http2 on;
    server_name google.com; # <-- geändert

    client_max_body_size 32m;

    root /var/www/google.com;
    index index.php index.html;

    ssl_certificate     /etc/letsencrypt/live/google.com/fullchain.pem; # <-- geändert
    ssl_certificate_key /etc/letsencrypt/live/google.com/privkey.pem; # <-- geändert
    ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers         HIGH:!aNULL:!MD5;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;
    ssl_stapling on;
    ssl_stapling_verify on;

    error_log /var/log/nginx/error.log;
    access_log /var/log/nginx/access.log main;

    location / {
        try_files $uri $uri/ /index.php?$args; # <-- geändert
    }

    location ~ \.php$ {
        index index.php;
        include php82.conf;
    }
}

Erstellen Sie eine Cron-Aufgabe zur Zertifikatserneuerung.

Geben Sie in der Konsole folgenden Befehl ein:

export EDITOR=nano && crontab -e

und tragen Sie dort folgende Zeile ein:

0 0 1 * * /usr/bin/certbot renew --post-hook "systemctl reload nginx" > /var/log/renewals.log

Drücken Sie Strg+X, bestätigen Sie das Speichern mit der Taste y, und die Aufgabe ist erstellt.

Das war es im Grunde. Das ist nicht schwer, und jeder kann es für sich einrichten, um ruhig schlafen zu können!