Erstellen einer VPS-Vorlage mit Drupal 9 auf Centos 8

Wir bauen unseren Marktplatz weiter aus. Wir haben Ihnen kürzlich erklärt, wie habe ein Gitlab-Image erstellt, und diese Woche erschien Drupal auf unserem Marktplatz.

Wir erzählen Ihnen, warum wir uns für ihn entschieden haben und wie das Bild entstanden ist.

Erstellen einer VPS-Vorlage mit Drupal 9 auf Centos 8

Drupal — eine praktische und leistungsstarke Plattform zum Erstellen jeder Art von Website: von Microsites und Blogs bis hin zu großen sozialen Projekten, die auch als Grundlage für Webanwendungen dient, in PHP geschrieben ist und relationale Datenbanken als Datenspeicher verwendet.

Drupal 9 enthält alle in Version 8.9 eingeführten Funktionen. Der wesentliche Unterschied zwischen Version 9 und Version 8 besteht darin, dass die Plattform auch nach November 2021 weiterhin Updates und Sicherheitsfixes erhält. Version 9 vereinfacht außerdem den Update-Prozess und macht den Upgrade-Prozess von Version 8 noch einfacher.

Serveranforderungen

Für die Nutzung von Drupal wird die Verwendung von 2 GB RAM und 2 CPU-Kernen empfohlen.

Die Hauptdateien von Drupal nehmen etwa 100 MB ein. Darüber hinaus benötigen Sie Speicherplatz zum Speichern von Bildern, Datenbanken, Designs, zusätzlichen Modulen und Backups, was von der Größe Ihrer Site abhängt.

Drupal 9 erfordert PHP 7.4 oder höher mit einer Mindestbeschränkung (memory_limit) für 64 MB Speicher; bei Verwendung zusätzlicher Module empfiehlt sich die Installation von 128 MB.

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

Wir werden Drupal mit Nginx und MySQL installieren.

Einstellung

Aktualisieren wir die installierten Pakete auf die neueste Version:

sudo dnf update -y

Fügen wir eine dauerhafte Berechtigung für eingehenden Datenverkehr zu den Ports http/80 und https/443 hinzu:

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

Wenden wir die neuen Firewall-Regeln an:

sudo systemctl reload firewalld

Lassen Sie uns Nginx installieren:

sudo dnf install nginx -y

Lassen Sie uns den Nginx-Server starten und aktivieren:

sudo systemctl start nginx
sudo systemctl enable nginx

Da das Haupt-Centos-Repository derzeit PHP 7.2 verwendet, fügen wir ein REMI-Repository mit PHP 7.4 (Mindestversion für Drupal 9) hinzu.
Fügen Sie dazu das EPEL-Repository hinzu (erforderlich für das REMI-Repository):

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

Fügen wir das REMI-Repository hinzu:

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

Aktivieren wir das Modul php:remi-7.4, um PHP 7.4 zu installieren:

sudo dnf module enable php:remi-7.4 -y

Installieren Sie php-fpm und php-cli:

sudo dnf install -y php-fpm php-cli

Lassen Sie uns die PHP-Module installieren, die für die Funktion von Drupal erforderlich sind:

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 werden auch die empfohlenen PHP mbstring opcache-Module installieren:

sudo dnf install -y php-mbstring php-opcache

Lassen Sie uns den MySQL-Server installieren:

sudo dnf install mysql-server -y

Lassen Sie uns den MySQL-Server einschalten und starten:

sudo systemctl start mysqld
sudo systemctl enable mysqld

Da wir eine Vorlage für VDS erstellen und diese langsam sein können, fügen wir eine mysqld-Startverzögerung von 30 Sekunden hinzu, andernfalls kann es beim ersten Systemstart zu Problemen mit dem Serverstart kommen:

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

Ändern wir die Gruppe und den Benutzer, unter denen nginx ausgeführt wird, indem wir Änderungen an /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

Ändern wir den Besitzer des PHP-Sitzungsverzeichnisses entsprechend in nginx:

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

Entfernen wir die Zeilen mit Kommentaren aus der Konfigurationsdatei /etc/nginx/nginx.conf (damit es keine doppelten Auslöser für sed gibt):

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

Fügen Sie gzip-Komprimierungseinstellungen zu /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

Fügen wir die Einstellungen der Indexdatei index.php zu /etc/nginx/nginx.conf hinzu:

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

Fügen wir Einstellungen für den Standardserver hinzu: PHP-Verarbeitung über den php-fpm-Socket, deaktivieren Sie das Protokoll für statische Dateien, erhöhen Sie die Ablaufzeit, deaktivieren Sie das Zugriffs- und Fehlerprotokoll für favicon.ico und robots.txt und verweigern Sie den Zugriff auf .ht Dateien 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

Installieren Sie wget, das für die Installation von certbot erforderlich ist:

sudo dnf install wget -y

Laden Sie die ausführbare Certbot-Datei von Offsite herunter:

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

Certbot nach /usr/local/bin/ verschieben:

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

Und lasst uns als Besitzer die Rechte für root zuweisen:

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

Lassen Sie uns die Certbot-Abhängigkeiten installieren und in dieser Phase seine Arbeit unterbrechen (Antworten: Y, c):

certbot-auto

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

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

Installieren Sie tar, um das Archiv zu entpacken:

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 Webserververzeichnis:

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

Weisen wir den Eigentümer der Nginx-Dateien zu:

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

Zu diesem Zeitpunkt schalten wir den Server aus und erstellen einen Snapshot:

shutdown -h now

Nachdem wir den VDS aus dem Snapshot gestartet haben, führen wir die Ersteinrichtung des MySQL-Servers durch, indem wir das Skript ausführen:

mysql_secure_installation

Lassen Sie uns den Passwortvalidator aktivieren:

Would you like to setup VALIDATE PASSWORD component? : y

Legen Sie das MySQL-Root-Benutzerkennwort fest:

New password:
Re-enter new password:

Anonyme Benutzer entfernen:

Remove anonymous users? (Press y|Y for Yes, any other key for No) : y

Verhindern wir, dass Root eine Remoteverbindung herstellt:

Disallow root login remotely? (Press y|Y for Yes, any other key for No) : y

Löschen wir die Testdatenbank:

Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y

Laden wir die Berechtigungstabellen neu:

Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y

Um die Installation abzuschließen, können wir anschließend zu gehen vps_ip_address
Unter dieser Adresse sehen wir die Drupal-Installationsseite.

Wählen Sie die zu verwendende Sprache aus. Zum Beispiel: Russisch. Klicken Sie auf „Speichern und fortfahren“

Wählen wir ein Installationsprofil aus (die Demo dient ausschließlich dazu, sich mit dem System vertraut zu machen). Lassen Sie es in unserem Fall „Standard“ sein.

Auf der nächsten Seite geben wir der Datenbank einen Namen, zum Beispiel „drupal“. Geben wir den Datenbankbenutzernamen root und das Passwort an, das ihm beim Ausführen von mysql_secure_installation gegeben wurde. Klicken Sie auf „Speichern und fortfahren“.

Warten wir, bis die Installation und Aktualisierung der Übersetzungen abgeschlossen ist (der Vorgang kann mehrere Minuten dauern).

Wir geben den Namen der Site an, legen die E-Mail-Adresse der Site fest (in deren Namen Site-Benachrichtigungen gesendet werden), Login, Passwort und E-Mail des Drupal-Administratorkontos. In den regionalen Einstellungen stellen wir außerdem das Land und die Zeitzone ein. Und schließen Sie die Installation ab, indem Sie auf „Speichern und fortfahren“ klicken.

Anschließend können Sie mit dem erstellten Drupal-Administrator-Login und -Passwort zur Systemsteuerung gehen.

HTTPS einrichten (optional)

Um HTTPS zu konfigurieren, muss der VDS über einen gültigen DNS-Namen verfügen, der in angegeben ist

/etc/nginx/nginx.conf

im Abschnitt „Server“ den Servernamen (zum Beispiel):

server_name  domainname.ru;

Lassen Sie uns Nginx neu starten:

service nginx restart

Lassen Sie uns Certbot starten:

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

Geben Sie Ihre E-Mail-Adresse ein, stimmen Sie den Nutzungsbedingungen zu (A), abonnieren Sie den Newsletter (optional) (N), wählen Sie die Domainnamen aus, für die Sie ein Zertifikat ausstellen möchten (Eingabe für alle).

Wenn alles fehlerfrei verlief, sehen wir eine Meldung über die erfolgreiche Ausstellung von Zertifikaten und Serverkonfiguration:

Congratulations! You have successfully enabled ...

Danach werden Verbindungen zu Port 80 auf 443 (https) umgeleitet.

Zu /etc/crontab hinzufügen, um Zertifikate automatisch zu aktualisieren:

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

Einrichten von Trusted Host Security (empfohlen)

Diese Einstellung ist als Lösung für das Problem gedacht, das mit der dynamischen base_url-Ermittlung einhergeht, und soll HTTP-HOST-Header-Angriffe verhindern (wenn Ihre Site denkt, dass es sich um eine andere Person handelt).

Dazu müssen Sie in der Einstellungsdatei vertrauenswürdige Domänennamen für die Site angeben.

Im Ordner

/usr/share/nginx/html/sites/default/settings.php Lassen Sie uns den Kommentar entfernen oder eine Einstellung mit Mustern tatsächlicher Site-Namen hinzufügen, zum Beispiel:

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

Installation von PHP APCu (EMPFOHLEN)

Drupal unterstützt APCu – Alternative PHP User Cache. Die Versionen 8 und 9 nutzen APCu stärker als kurzfristigen lokalen Cache als frühere Versionen. Die Standardcachegröße (32 MB) ist für die meisten Websites geeignet und darf 512 MB nicht überschreiten.

Zur Aktivierung installieren Sie das PHP APCu-Modul:

dnf -y install php-pecl-apcu

Starten Sie Nginx und PHP-FPM neu:

service nginx restart
service php-fpm restart

Wenn Sie die russische Sprache und APCu mit der empfohlenen Speichergröße für den Cache verwenden, wird in der Systemsteuerung möglicherweise eine Warnung angezeigt, dass die Größe des zugewiesenen Speichers für den Cache von der empfohlenen abweicht, aber tatsächlich funktioniert alles ordnungsgemäß. und die falsche Warnung wird höchstwahrscheinlich in den nächsten Updates korrigiert.

Oder wenn die Warnung Ihre Augen schmerzt, können Sie sie verwenden entsprechenden Patch von Offsite.

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

Für die Teilnahme gibt es drei Möglichkeiten.

Bereiten Sie das Bild selbst vor und erhalten Sie 3000 Rubel auf Ihr Guthaben

Wenn Sie bereit sind, sich sofort in die Schlacht zu stürzen und das Bild zu erstellen, das Ihnen fehlt, schreiben wir Ihnen 3000 Rubel auf Ihr internes Guthaben gut, die Sie für Server ausgeben können.

So erstellen Sie Ihr eigenes Bild:

  1. Erstellen Sie ein Konto bei uns unter Webseite
  2. Teilen Sie dem Support mit, dass Sie Bilder erstellen und testen werden
  3. Wir schreiben Ihnen 3000 Rubel gut und ermöglichen die Erstellung von Schnappschüssen
  4. Bestellen Sie einen virtuellen Server mit einem sauberen Betriebssystem
  5. Installieren Sie die Software auf diesem VPS und konfigurieren Sie sie
  6. Schreiben Sie Anweisungen oder Skripte für die Softwarebereitstellung
  7. Erstellen Sie einen Snapshot für den konfigurierten Server
  8. Bestellen Sie einen neuen virtuellen Server, indem Sie in der Dropdown-Liste „Servervorlage“ den zuvor erstellten Snapshot auswählen
  9. Wenn der Server erfolgreich erstellt wurde, übertragen Sie die in Schritt 6 erhaltenen Materialien an den technischen Support
  10. Wenn ein Fehler auftritt, können Sie beim Support nach der Ursache fragen und die Einrichtung wiederholen

Für Unternehmer: Bieten Sie Ihre Software an

Wenn Sie ein Softwareentwickler sind, der auf VPS bereitgestellt und verwendet wird, können wir Sie in den Markt einbeziehen. So können wir Ihnen dabei helfen, neue Kunden, Traffic und Sichtbarkeit zu gewinnen. Schreib uns

Sagen Sie uns in den Kommentaren, welches Bild Ihnen fehlt?

Und wir werden es selbst zubereiten

Erstellen einer VPS-Vorlage mit Drupal 9 auf Centos 8

Erstellen einer VPS-Vorlage mit Drupal 9 auf Centos 8

Source: habr.com