Erstellung einer VPS-Vorlage mit Drupal 9 auf CentOS 8

Wir erweitern weiterhin unseren Marktplatz. Kürzlich haben wir erzählt, wie wir das GitLab-Image erstellt haben, und in dieser Woche ist Drupal auf unserem Marktplatz erschienen.

Hier erklären wir, warum wir uns genau dafür entschieden haben und wie das Image entstanden ist.

Erstellung einer VPS-Vorlage mit Drupal 9 auf CentOS 8

Drupal — eine benutzerfreundliche und leistungsstarke Plattform zur Erstellung von Websites jeglicher Art: von Microsites und Blogs bis hin zu großen sozialen Projekten, die auch als Grundlage für Webanwendungen dient, geschrieben in PHP und verwendet relationale Datenbanken als Datenspeicher.

Drupal 9 umfasst alle Funktionen, die in Version 8.9 implementiert wurden. Der Hauptunterschied zwischen Version 9 und Version 8 besteht darin, dass für die Plattform auch nach November 2021 Updates und Sicherheitskorrekturen veröffentlicht werden. Zudem wurde der Aktualisierungsprozess in Version 9 vereinfacht, sodass die Aktualisierung von Version 8 noch einfacher wird.

Serveranforderungen

Für die Nutzung von Drupal wird empfohlen, 2 GB RAM und 2 CPU-Kerne zu verwenden.

Die Hauptdateien von Drupal nehmen etwa 100 MB ein. Darüber hinaus benötigen Sie Speicherplatz für Bilder, Datenbanken, Themes, zusätzliche Module und Backups, der von der Größe Ihrer Website abhängt.

Für Drupal 9 wird PHP 7.4 oder höher benötigt, mit einer minimalen Einschränkung (memory_limit) für den Speicher von 64 MB; im Falle der Verwendung zusätzlicher Module wird empfohlen, 128 MB einzustellen.

Als Webserver kann Drupal Apache oder Nginx verwenden, und als Datenbank MySQL, PostgreSQL oder SQLite.

Wir werden Drupal mit Nginx und MySQL installieren.

Installation

Aktualisieren Sie die installierten Pakete auf die neueste Version:

sudo dnf update -y

Fügen Sie eine permanente Erlaubnis für den eingehenden Verkehr auf den Ports http/80 und https/443 hinzu:

sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https

Wenden Sie die neuen Firewall-Regeln an:

sudo systemctl reload firewalld

Installieren Sie Nginx:

sudo dnf install nginx -y

Starten und aktivieren Sie den Nginx-Server:

sudo systemctl start nginx
sudo systemctl enable nginx

Da im Hauptrepository von CentOS derzeit PHP Version 7.2 verwendet wird, fügen wir das REMI-Repository mit PHP 7.4 hinzu (das Mindestversion für Drupal 9).
Dazu fügen wir das EPEL-Repository hinzu (benötigt von REMI):

rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm

Fügen Sie das REMI-Repository hinzu:

sudo dnf install -y https://rpms.remirepo.net/enterprise/remi-release-8.rpm

Aktivieren Sie das Modul php:remi-7.4 zur Installation von PHP 7.4:

sudo dnf module enable php:remi-7.4 -y

Installieren Sie php-fpm und php-cli:

sudo dnf install -y php-fpm php-cli

Installieren Sie die für die Arbeit mit Drupal benötigten PHP-Module:

sudo dnf install -y php-mysqlnd php-date php-dom php-filter php-gd php-hash php-json php-pcre php-pdo php-session php-simplexml php-spl php-tokenizer php-xml

Wir installieren auch die empfohlenen PHP-Module mbstring opcache:

sudo dnf install -y php-mbstring php-opcache

Wir installieren den MySQL-Server:

sudo dnf install mysql-server -y

Wir aktivieren und starten den MySQL-Server:

sudo systemctl start mysqld
sudo systemctl enable mysqld

Da wir ein Template für VDS erstellen und diese langsam sein können, fügen wir eine Startverzögerung von 30 Sekunden für mysqld hinzu, da es sonst bei der ersten Systemstart zu Problemen kommen kann:

sudo sed -i '"/Group=mysql/a 
ExecStartPre=/bin/sleep 30
' /usr/lib/systemd/system/mysqld.service

Wir ändern die Gruppe und den Benutzer, unter dem nginx läuft, indem wir Änderungen in /etc/php-fpm.d/www.conf vornehmen:

sudo sed -i --follow-symlinks 's/user = apache/user = nginx/g' /etc/php-fpm.d/www.conf
sudo sed -i --follow-symlinks 's/group = apache/group = nginx/g' /etc/php-fpm.d/www.conf

Wir ändern auch den Besitzer des Session-Verzeichnisses von PHP auf nginx:

sudo chown -R nginx. /var/lib/php/session

Wir entfernen die Kommentarzeilen aus der Konfigurationsdatei /etc/nginx/nginx.conf (um doppelte Auslösungen für sed zu vermeiden):

sudo sed -i -e '/^[ t]*#/d' /etc/nginx/nginx.conf

Wir fügen Einstellungen zur gzip-Komprimierung in /etc/nginx/nginx.conf hinzu.

sudo sed -i '/types_hash_max_size 2048;/a 

    gzip on;
    gzip_static on;
    gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript image/x-icon image/svg+xml application/x-font-ttf;
    gzip_comp_level 9;
    gzip_proxied any;
    gzip_min_length 1000;
    gzip_disable "msie6";
    gzip_vary on; 
' /etc/nginx/nginx.conf

Wir fügen in /etc/nginx/nginx.conf die Einstellungen für die Indexdatei index.php hinzu:

sudo sed -i '/        root         /usr/share/nginx/html;/a 
        index index.php index.html index.htm;
' /etc/nginx/nginx.conf

Wir fügen die Einstellungen für den Standardserver hinzu, um PHP über den php-fpm-Socket zu verarbeiten, deaktivieren das Protokoll für statische Dateien, erhöhen die Ablaufzeit, deaktivieren das Zugriffsprotokoll und die Fehlerprotokolle für favicon.ico und robots.txt und verbieten den Zugriff auf Dateien .ht für alle:

sudo sed -i '/        location / {/a 
		try_files $uri $uri/ /index.php?q=$uri&$args;
        }
    
        location ~* ^.+.(js|css|png|jpg|jpeg|gif|ico|woff)$ {
        access_log off;
        expires max;
        }
    
        location ~ .php$ {
        try_files  $uri =404;
        fastcgi_pass   unix:/run/php-fpm/www.sock;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_intercept_errors on;
        fastcgi_ignore_client_abort off;
        fastcgi_connect_timeout 60;
        fastcgi_send_timeout 180;
        fastcgi_read_timeout 180;
        fastcgi_buffer_size 128k;
        fastcgi_buffers 4 256k;
        fastcgi_busy_buffers_size 256k;
        fastcgi_temp_file_write_size 256k;
        }
    
        location = /favicon.ico {
        log_not_found off;
        access_log off;
        }
    
        location = /robots.txt {
        allow all;
        log_not_found off;
        access_log off;
        }
    
        location ~ /.ht {
        deny all;' /etc/nginx/nginx.conf

Wir installieren wget, das für die Installation von certbot benötigt wird:

sudo dnf install wget -y

Laden Sie die ausführbare Datei certbot von der offiziellen Seite herunter:

cd ~
wget https://dl.eff.org/certbot-auto

Verschieben wir certbot nach /usr/local/bin/:

mv certbot-auto /usr/local/bin/certbot-auto

Und setzen wir die Berechtigungen mit dem Benutzer root:

chown root /usr/local/bin/certbot-auto
chmod 0755 /usr/local/bin/certbot-auto

Installieren wir die Abhängigkeiten für certbot und unterbrechen wir seine Ausführung an dieser Stelle (Antworten: Y, c):

certbot-auto

Laden wir das Archiv mit der neuesten Version von Drupal 9 von der offiziellen Seite herunter:

cd ~
wget https://www.drupal.org/download-latest/tar.gz

Installieren wir tar zum Entpacken des Archivs:

sudo dnf install tar -y

Löschen wir die Standarddateien im Verzeichnis /usr/share/nginx/html/:

rm -rf /usr/share/nginx/html/*

Entpacken wir die Dateien in das Verzeichnis des Webservers:

tar xf tar.gz -C /usr/share/nginx/html/

Verschieben wir die Dateien aus dem Unterverzeichnis in das Stammverzeichnis des Webservers:

mv /usr/share/nginx/html/drupal-9.0.7/* /usr/share/nginx/html/

Löschen wir das Unterverzeichnis:

rm -rf /usr/share/nginx/html/drupal-9.0.7

Löschen wir das Archiv mit den Installationsdateien:

rm -f ./tar.gz

Setzen wir den Eigentümer der Dateien auf nginx:

chown -R nginx. /usr/share/nginx/html

An dieser Stelle schalten wir den Server aus und erstellen einen Snapshot:

shutdown -h now

Nach dem Start des VDS aus dem Snapshot führen wir die Erstkonfiguration des MySQL-Servers durch, indem wir das Skript ausführen:

mysql_secure_installation

Aktivieren wir den Passwortvalidator:

Möchten Sie das COMPONENT VALIDATE PASSWORD einrichten? : y

Legen wir ein Passwort für den MySQL-Benutzer root fest:

Neues Passwort:
Neues Passwort erneut eingeben:

Löschen wir anonyme Benutzer:

Anonyme Benutzer entfernen? (Drücken Sie y|Y für Ja, eine andere Taste für Nein) : y

Verhindern wir den Fernzugriff für root:

Verhindern Sie das remote login von root? (Drücken Sie y|Y für Ja, eine andere Taste für Nein) : y

Löschen wir die Testdatenbank:

Testdatenbank und Zugriff darauf entfernen? (Drücken Sie y|Y für Ja, eine andere Taste für Nein) : y

Laden wir die Berechtigungstabellen neu:

Berechtigungstabellen jetzt neu laden? (Drücken Sie y|Y für Ja, eine andere Taste für Nein) : y

Danach können wir zur Abschlusskonfiguration die Adresse aufrufen vps_ip_address
Unter dieser Adresse sehen wir die Drupal-Installationsseite.

Wählen Sie die verwendete Sprache aus. Zum Beispiel: Russisch. Klicken Sie auf 'Speichern und fortfahren'

Wählen Sie das Installationsprofil (Demo dient nur zu Testzwecken). In unserem Fall ist es 'Standard'.

Geben Sie auf der nächsten Seite den Namen der Datenbank an, zum Beispiel 'drupal'. Geben Sie den Benutzernamen der DB root und das bei mysql_secure_installation festgelegte Passwort an. Klicken Sie auf 'Speichern und fortfahren'.

Warten wir auf den Abschluss der Installation und der Aktualisierung der Übersetzungen (der Prozess kann mehrere Minuten dauern).

Geben Sie den Namen der Website an, legen Sie die E-Mail der Website fest (von der die Benachrichtigungen der Website gesendet werden), sowie Benutzernamen, Passwort und die E-Mail-Adresse des Administratorkontos von Drupal. Legen Sie auch das Land und die Zeitzone in den Regionaleinstellungen fest. Und beenden Sie die Installation, indem Sie auf „Speichern und Fortfahren“ klicken.

Nach diesem Schritt können Sie sich mit dem erstellten Benutzernamen und Passwort bei der Administrationsoberfläche von Drupal anmelden.

HTTPS-Einrichtung (optional)

Um HTTPS einzurichten, muss der VDS einen gültigen DNS-Namen haben, geben Sie in

/etc/nginx/nginx.conf

im Abschnitt server den Servernamen an (zum Beispiel):

server_name  domainname.ru;

Wir starten nginx neu:

service nginx restart

Wir starten certbot:

sudo /usr/local/bin/certbot-auto --nginx

Geben Sie Ihre E-Mail-Adresse ein, stimmen Sie den Nutzungsbedingungen zu (A), Newsletter abonnieren (optional) (N), wählen Sie die Domainnamen aus, für die das Zertifikat ausgestellt werden soll (Enter für alle).

Falls alles ohne Fehler verläuft, sehen wir die Meldung über die erfolgreiche Ausstellung von Zertifikaten und die Konfiguration des Servers:

Herzlichen Glückwunsch! Sie haben erfolgreich ... aktiviert.

Nach dieser Verbindung werden die Zugriffe auf Port 80 auf 443 (https) umgeleitet.

Fügen Sie in /etc/crontab für die automatische Aktualisierung der Zertifikate hinzu:

# Cert Renewal
30 2 * * * root /usr/local/bin/certbot-auto renew --post-hook "nginx -s reload"

Einrichtung der Trusted Host Security (empfohlen)

Diese Einstellung ist als Lösung für die Probleme gedacht, die mit der dynamischen Bestimmung des base_url verbunden sind, und soll Angriffe über den HTTP HOST Header verhindern (wenn Ihre Website denkt, sie sei jemand anders).

Dazu müssen die vertrauenswürdigen Domainnamen der Website in der Konfigurationsdatei angegeben werden.

In der Datei

/usr/share/nginx/html/sites/default/settings.php Kommentieren Sie die Einstellung mit den Mustern der aktuellen Domainnamen aus oder fügen Sie sie hinzu, zum Beispiel:

$settings['trusted_host_patterns'] = [
  '^www.mydomain.ru$',
];

Installation von PHP APCu (WIRD EMPFOHLEN)

Drupal unterstützt APCu – Alternative PHP User Cache, Versionen 8 und 9 verwenden APCu intensiver als kurzfristigen lokalen Cache als frühere Versionen. Die Standardgröße des Caches (32 MB) ist für die meisten Websites ausreichend und darf 512 MB nicht überschreiten.

Um es zu aktivieren, installieren Sie das PHP APCu-Modul:

dnf -y install php-pecl-apcu

Wir starten nginx und php-fpm neu:

service nginx restart
service php-fpm restart

Im Falle der Nutzung der russischen Sprache und APCu mit der empfohlenen Speichergröße für den Cache können Sie in der Verwaltungskonsole eine Warnung sehen, dass die zugewiesene Cache-Speichergröße von der empfohlenen abweicht, aber tatsächlich funktioniert alles richtig und die falsche Warnung wird wahrscheinlich in den nächsten Updates behoben.

Oder wenn die Warnung unangenehm ist, können Sie verwenden entsprechender Patch von der Offsite.

Wir möchten Sie daran erinnern, dass Sie auch für uns ein Image erstellen können

Es gibt drei Möglichkeiten, wie Sie teilnehmen können.

Bereiten Sie das Image selbst vor und erhalten Sie 3000 Rubel auf Ihrem Konto

Wenn Sie bereit sind, sofort loszulegen und das Image zu erstellen, das Ihnen fehlt, erstatten wir Ihnen 3000 Rubel auf Ihr internes Guthaben – Sie können es für die Server nutzen.

So erstellen Sie Ihr eigenes Image:

  1. Erstellen Sie ein Konto bei uns auf Website
  2. Informieren Sie den Support, dass Sie Images erstellen und testen möchten
  3. Wir werden Ihnen 3000 Rubel gutschreiben und die Möglichkeit aktivieren, Snapshots zu erstellen
  4. Bestellen Sie einen virtuellen Server mit einem sauberen Betriebssystem
  5. Installieren Sie die Software auf diesem VPS und konfigurieren Sie sie
  6. Erstellen Sie eine Anleitung oder ein Skript zur Bereitstellung der Software
  7. Erstellen Sie einen Snapshot für den konfigurierten Server
  8. Bestellen Sie einen neuen virtuellen Server und wählen Sie im Dropdown-Menü den zuvor erstellten Snapshot "Servervorlage" aus
  9. Falls die Servererstellung erfolgreich war, übermitteln Sie die Materialien, die Sie in Schritt 6 erhalten haben, an den technischen Support
  10. Im Fehlerfall können Sie den Support nach dem Grund fragen und die Konfiguration wiederholen

Für Geschäftsinhaber: Bieten Sie Ihre Software an

Wenn Sie ein Softwareentwickler sind, der auf VPS bereitgestellte Software nutzt, können wir Sie in den Marktplatz aufnehmen. So können wir Ihnen helfen, neue Kunden, Traffic und Bekanntheit zu gewinnen. Schreiben Sie uns

Kommentieren Sie, welches Image Ihnen fehlt?

Und wir werden es selbst vorbereiten

Erstellung einer VPS-Vorlage mit Drupal 9 auf CentOS 8

Erstellung einer VPS-Vorlage mit Drupal 9 auf CentOS 8

Quelle: habr.com

Zuverlässiges Hosting für Websites mit DDoS-Schutz kaufen, VPS VDS Server 🔥 Zuverlässiges Hosting für Websites mit DDoS-Schutz kaufen, VPS VDS Server - ProHoster