Wie installiere ich AbanteCart mit Nginx und SSL unter Debian 11

Abantecart ist eine kostenlose, quelloffene und funktionsreiche E-Commerce-Anwendung. Sie ist in PHP geschrieben und basiert auf den neuesten Technologien wie HTML5, Bootstrap, MVC und mehr. Mit einer einzigen Installation kannst du mehrere Onlineshops erstellen, die digitale und physische Produkte, mehrere Zahlungssysteme und Währungen, mehrere Sprachen, Gutscheine, Gutschriften und ein Kunden-Dashboard unterstützen. Du kannst damit eine E-Mail-Marketing-Kampagne durchführen oder Banner erstellen, um die Kundenbindung zu erhöhen. Außerdem ist es SEO-optimiert, unterstützt freundliche URLs, lässt sich mit mehreren Analyseplattformen integrieren und unterstützt Plugins.

In diesem Lernprogramm erfährst du, wie du Abantecart auf einem Debian 11 basierten Server installierst.

Voraussetzungen

  • Ein Server, auf dem Debian 11 läuft.
  • Ein Nicht-Root-Benutzer mit sudo-Rechten.
  • Alles ist auf dem neuesten Stand.
    $ sudo apt update && sudo apt upgrade
    
  • Einige wenige Pakete, die dein System benötigt.
    $ sudo apt install wget curl nano ufw software-properties-common dirmngr apt-transport-https gnupg2 ca-certificates lsb-release unzip debian-archive-keyring -y
    

    Einige dieser Pakete sind vielleicht schon auf deinem System installiert.

Schritt 1 – Firewall konfigurieren

Der erste Schritt besteht darin, die Firewall zu konfigurieren. Debian wird mit ufw (Uncomplicated Firewall) ausgeliefert.

Überprüfe, ob die Firewall läuft.

$ sudo ufw status

Du solltest die folgende Ausgabe erhalten.

Status: inactive

Erlaube den SSH-Port, damit die Firewall die aktuelle Verbindung nicht unterbricht, wenn du sie aktivierst.

$ sudo ufw allow OpenSSH

Lasse auch HTTP- und HTTPS-Ports zu.

$ sudo ufw allow 80/tcp
$ sudo ufw allow 443/tcp

Aktiviere die Firewall

$ sudo ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup

Überprüfe den Status der Firewall erneut.

$ sudo ufw status

Du solltest eine ähnliche Ausgabe sehen.

Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
80/tcp                     ALLOW       Anywhere
443/tcp                    ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
80/tcp (v6)                ALLOW       Anywhere (v6)
443/tcp (v6)               ALLOW       Anywhere (v6)

Schritt 2 – Installiere PHP

Abantecart unterstützt PHP 8.0. Um es zu installieren, verwenden wir das PHP-Repository von Ondrej. Führe den folgenden Befehl aus, um das Repository hinzuzufügen.

$ echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/sury-php.list

Füge den GPG-Schlüssel hinzu, der mit dem Repository verbunden ist.

$ wget -qO - https://packages.sury.org/php/apt.gpg | sudo apt-key add -

Aktualisiere die Debian Repositories.

$ sudo apt update

Installiere PHP 8.0 und die erforderlichen Erweiterungen.

$ sudo apt install php8.0-cli php8.0-fpm php8.0-mysql php8.0-gd php8.0-common php8.0-curl php8.0-xml php8.0-mbstring

Schritt 3 – MySQL installieren

Um den MySQL-Server zu installieren, musst du als erstes den GPG-Schlüssel für das Paket hinzufügen

Es gibt einen Fehler in Debian, bei dem du den GPG-Befehl separat ausführen musst, um das Verzeichnis .gpg einzurichten.

$ sudo gpg

Drücke Strg + C, um den obigen Befehl zu beenden. Importiere den GPG-Schlüssel und speichere ihn im Verzeichnis /usr/share/keyrings.

$ sudo gpg --no-default-keyring --keyring /usr/share/keyrings/mysql8.0-archive-keyring.gpg --keyserver hkp://keyserver.ubuntu.com:80 --brecv-keys 3A79BD29

Füge das offizielle MySQL-Repository hinzu.

$ echo "deb [arch=amd64 signed-by=/usr/share/keyrings/mysql8.0-archive-keyring.gpg] http://repo.mysql.com/apt/debian/ `lsb_release -cs` mysql-8.0" \
    | sudo tee /etc/apt/sources.list.d/mysql-8.list

Aktualisiere die Debian Repositories.

$ sudo apt update

Installiere MySQL.

$ sudo apt install mysql-server

Du wirst mit einem Konfigurationsbildschirm begrüßt, der dich auffordert, ein Root-Passwort einzurichten. Wähle ein sicheres Passwort.

MySQL Root-Passwort einrichten

Du wirst aufgefordert, das Passwort zu bestätigen. Als Nächstes wird ein Bildschirm angezeigt, der das neue Authentifizierungssystem beschreibt. Wähle OK, um fortzufahren.

MySQL Authentifizierungsinformationen

Schließlich wirst du aufgefordert, die Authentifizierungsmethode auszuwählen. Wähle die starke Passwortverschlüsselung und wähle Ok, um die Einrichtung abzuschließen.

Aufforderung zur Authentifizierung des MySQL-Kennworts

Schritt 4 – Nginx installieren

Debian wird mit einer älteren Version von Nginx ausgeliefert. Du musst das offizielle Nginx-Repository herunterladen, um die neueste Version zu installieren.

Importiere den offiziellen Nginx-Signierschlüssel.

$ curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \
	 | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null

Füge das Repository für die stabile Version von Nginx hinzu.

$ echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg arch=amd64] \
    http://nginx.org/packages/debian `lsb_release -cs` nginx" \
    | sudo tee /etc/apt/sources.list.d/nginx.list

Aktualisiere die Debian-Repositories.

$ sudo apt update

Installiere Nginx.

$ sudo apt install nginx

Überprüfe die Installation. Achte darauf, dass du jedes Mal sudo verwendest, wenn du den Nginx-Befehl unter Debian ausführst. Andernfalls wird es nicht funktionieren.

$ sudo nginx -v
nginx version: nginx/1.20.2

Aktiviere den Nginx-Dienst.

$ sudo systemctl enable nginx

Schritt 5 – MySQL für AbanteCart konfigurieren

Sichere die MySQL-Installation.

$ sudo mysql_secure_installation

Im ersten Schritt wirst du nach deinem Root-Passwort gefragt. Als Nächstes wirst du gefragt, ob du das Validate Password Plugin einrichten möchtest, mit dem du die Stärke deines MySQL-Passworts testen kannst. Wähle Y, um fortzufahren. Im nächsten Schritt wirst du aufgefordert, die Stufe der Passwortüberprüfung auszuwählen. Wähle 2. Das ist die stärkste Stufe und verlangt, dass dein Passwort mindestens acht Zeichen lang ist und eine Mischung aus Groß- und Kleinbuchstaben, Zahlen und Sonderzeichen enthält.

Securing the MySQL server deployment.

Enter password for user root:

VALIDATE PASSWORD COMPONENT can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD component?

Press y|Y for Yes, any other key for No: Y

There are three levels of password validation policy:

LOW    Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary                  file

Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 2

Im nächsten Schritt wirst du gefragt, ob du das Root-Passwort ändern möchtest oder nicht. Drücke N, um fortzufahren.

Using existing password for root.
Estimated strength of the password: 100
Change the password for root ? ((Press y|Y for Yes, any other key for No) : N

Drücke bei allen folgenden Aufforderungen die Tasten Y und dann ENTER, um anonyme Benutzer und die Testdatenbank zu entfernen, Root-Logins zu deaktivieren und die neu festgelegten Regeln zu laden.

...
Remove anonymous users? (Press y|Y for Yes, any other key for No) : Y
Success.
...
Disallow root login remotely? (Press y|Y for Yes, any other key for No) : Y
Success.
...
Remove test database and access to it? (Press y|Y for Yes, any other key for No) : Y
 - Dropping test database...
Success.
 - Removing privileges on test database...
Success.
Reloading the privilege tables will ensure that all changes
made so far will take effect immediately.
...
Reload privilege tables now? (Press y|Y for Yes, any other key for No) : Y
Success.
All done!

Gib die MySQL-Shell ein. Gib dein Root-Passwort ein, um fortzufahren.

$ mysql -u root -p

Erstelle den Benutzer abcart. Vergewissere dich, dass das Passwort den zuvor festgelegten Anforderungen entspricht.

mysql> CREATE USER 'abcart'@'localhost' IDENTIFIED BY 'Your_password2';

Erstelle die Datenbank abantecart.

mysql> CREATE DATABASE abantecart;

Erteile dem Benutzer die Rechte für die Datenbank abantecart.

mysql> GRANT ALL PRIVILEGES ON abantecart.* TO 'abcart'@'localhost';

Beende die Shell.

mysql> exit

Schritt 6 – AbanteCart installieren

Lade die neueste Version von AbanteCart von Github herunter.

$ wget https://github.com/abantecart/abantecart-src/archive/master.zip

Entpacke die Datei.

$ unzip master.zip

Erstelle das öffentliche Web-Root-Verzeichnis für Abantecart.

$ sudo mkdir /var/www/html/abantecart -p

Kopiere das extrahierte Verzeichnis abantecart-src-master/public_html in das Webroot-Verzeichnis. Beachte den Schrägstrich(/) am Ende des folgenden Befehls.

$ sudo cp -r abantecart-src-master/public_html /var/www/html/abantecart/

Setze die richtigen Berechtigungen für das webroot-Verzeichnis.

$ sudo chown -R nginx:nginx /var/www/html/abantecart

Die Grundinstallation ist damit abgeschlossen. Als nächstes müssen wir SSL und Nginx einrichten, bevor wir die Installation abschließen.

Schritt 7 – SSL installieren

Um ein SSL-Zertifikat mit Let’s Encrypt zu installieren, müssen wir das Tool Certbot installieren.

Dazu verwenden wir den Snapd-Paketinstaller. Da die meisten Debian-Server nicht mit diesem Paket ausgeliefert werden, installiere Snap.

$ sudo apt install snapd

Stelle sicher, dass deine Version von Snapd auf dem neuesten Stand ist.

$ sudo snap install core && sudo snap refresh core

Installiere Certbot.

$ sudo snap install --classic certbot

Stelle mit dem folgenden Befehl sicher, dass der Certbot-Befehl ausgeführt werden kann, indem du einen symbolischen Link auf das Verzeichnis /usr/bin erstellst.

$ sudo ln -s /snap/bin/certbot /usr/bin/certbot

Überprüfe die Installation.

$ certbot --version
certbot 1.22.0

Erstelle das SSL-Zertifikat.

$ sudo certbot certonly --standalone --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m name@example.com -d abantecart.example.com

Mit dem obigen Befehl wird ein Zertifikat in das Verzeichnis /etc/letsencrypt/live/abantecart.example.com auf deinem Server heruntergeladen.

Erstelle ein Diffie-Hellman-Gruppenzertifikat.

$ sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

Erstelle ein Challenge-Webroot-Verzeichnis für die automatische Erneuerung von Let’s Encrypt.

$ sudo mkdir -p /var/lib/letsencrypt

Erstelle einen Cron Job zur Erneuerung des SSL-Zertifikats. Er wird jeden Tag ausgeführt, um das Zertifikat zu überprüfen und bei Bedarf zu erneuern. Erstelle dazu zunächst die Datei /etc/cron.daily/certbot-renew und öffne sie zur Bearbeitung.

$ sudo nano /etc/cron.daily/certbot-renew

Füge den folgenden Code ein.

#!/bin/sh
certbot renew --cert-name abantecart.example.com --webroot -w /var/lib/letsencrypt/ --post-hook "systemctl reload nginx"

Speichere die Datei, indem du Strg + X drückst und Y eingibst, wenn du dazu aufgefordert wirst.

Ändere die Berechtigungen für die Aufgabendatei, um sie ausführbar zu machen.

$ sudo chmod +x /etc/cron.daily/certbot-renew

Schritt 8 – Nginx und PHP konfigurieren

PHP-FPM konfigurieren

Öffne die Datei /etc/php/8.0/fpm/pool.d/www.conf.

$ sudo nano /etc/php/8.0/fpm/pool.d/www.conf

Wir müssen den Unix-Benutzer/die Unix-Gruppe der PHP-Prozesse auf nginx setzen. Finde die Zeilen user=www-data und group=www-data in der Datei und ändere sie in nginx.

...
; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
;       will be used.
user = nginx
group = nginx
...

Finde auch die Zeilen listen.owner=www-data und listen.group=www-data in der Datei und ändere sie in nginx.

listen.owner = nginx
listen.group = nginx

Speichere die Datei, indem du Strg + X drückst und Y eingibst, wenn du dazu aufgefordert wirst.

Der nächste Schritt ist die Deaktivierung der PHP opcache-Erweiterung.

Öffne die Datei /etc/php/8.0/fpm/conf.d/10-opcache.ini zum Bearbeiten.

$ sudo nano /etc/php/8.0/fpm/conf.d/10-opcache.ini

Füge die folgende Zeile am Ende ein.

opcache.enable=0

Speichere die Datei, indem du Strg + X drückst und Y eingibst, wenn du dazu aufgefordert wirst.

Starte den PHP-fpm-Prozess neu.

$ sudo systemctl restart php8.0-fpm

Nginx konfigurieren

Erstelle und öffne die Datei /etc/nginx/conf.d/abantecart.conf zum Bearbeiten.

$ sudo nano /etc/nginx/conf.d/abantecart.conf

Füge den folgenden Code in die Datei ein.

server {
    listen       443 ssl http2;
    listen       [::]:443 ssl http2;
    server_name  abantecart.example.com;

    access_log  /var/log/nginx/abantecart.access.log;
    error_log   /var/log/nginx/abantecart.error.log;
    
    # SSL
    ssl_certificate      /etc/letsencrypt/live/abantecart.example.com/fullchain.pem;
    ssl_certificate_key  /etc/letsencrypt/live/abantecart.example.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/abantecart.example.com/chain.pem;
    ssl_session_timeout  5m;
    ssl_session_cache shared:MozSSL:10m;
    ssl_session_tickets off;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
    ssl_ecdh_curve X25519:prime256v1:secp384r1:secp521r1;
    ssl_stapling on;
    ssl_stapling_verify on;
    ssl_dhparam /etc/ssl/certs/dhparam.pem;
    resolver 8.8.8.8;
    
    root /var/www/html/abantecart;
    index index.php;
    
    location / {
        try_files $uri $uri/ /index.php?$args;
    }
    
    # Pass PHP Scripts To FastCGI Server
    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(.*)$;
        fastcgi_pass unix:/run/php/php8.0-fpm.sock; # Depends On The PHP Version
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
        include fastcgi_params;
        try_files $uri =404;
    }
    
    location = /favicon.ico {
        log_not_found off;
        access_log off;
    }
    
    location = /robots.txt {
        allow all;
        log_not_found off;
        access_log off;
    }
    
    # Make sure files with the following extensions do not get loaded by nginx because nginx would
    # display the source code, and these files can contain PASSWORDS!
    location ~* \.(engine|inc|info|install|make|module|profile|test|po|sh|.*sql|theme|tpl(\.php)?|xtmpl)$|^(\..*|Entries.*|Repository|Root|Tag|Template)$|\.php_ {
        deny all;
    }
    
    # Deny all attempts to access hidden files such as .htaccess, .htpasswd, .DS_Store (Mac).
    location ~ /\. {
        deny all;
        access_log off;
        log_not_found off;
    }
    
    ### Retina images handler. Check cookie and looking for file with @2x at the end of name
    location ~* ^(.*)\.(jpg|jpeg|png|gif|webp)$ {
        set $hidpi_uri $1@2x.$2;
        if ($http_cookie !~ 'HTTP_IS_RETINA=1') {
          break;
        }
        try_files $hidpi_uri $uri =404;
    }

    location ~*  \.(jpg|jpeg|png|gif|css|js|ico|webp)$ {
        expires max;
        log_not_found off;
    }
    
    location ~ /(system/logs|resources/download) {
      deny all;
      return 403;
    }
    
    location /admin/ {
        location ~ .*\.(php)?$ {
          deny all;
          return 403;
        }
    }
    
    #rewrite for images for retina-displays
    location ~ / {
        if (!-e $request_filename){
            rewrite ^/(.*)\?*$ /index.php?_route_=$1 last;
        }
    }
}
# enforce HTTPS
server {
    listen       80;
    listen       [::]:80;
    server_name  abantecart.example.com;
    return 301   https://$host$request_uri;
}

Speichere die Datei, indem du Strg + X drückst und Y eingibst, wenn du dazu aufgefordert wirst.

Öffne die Datei /etc/nginx/nginx.conf und bearbeite sie.

$ sudo nano /etc/nginx/nginx.conf

Füge die folgende Zeile vor der Zeile include /etc/nginx/conf.d/*.conf; ein.

server_names_hash_bucket_size  64;

Speichere die Datei, indem du Strg + X drückst und Y eingibst, wenn du dazu aufgefordert wirst.

Überprüfe die Syntax der Nginx-Konfigurationsdatei.

$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Starte den Nginx-Dienst, um die neue Konfiguration zu aktivieren.

$ sudo systemctl start nginx

Schritt 9 – Installation abschließen

Wenn du https://abantecart.example.com in deinem Browser aufrufst, wird dir der folgende Bildschirm angezeigt.

AbanteCart Lizenz Bildschirm

Aktiviere das Kontrollkästchen, um der Lizenz zuzustimmen, und klicke auf Weiter, um fortzufahren. Als Nächstes prüft das Installationsprogramm, ob alle Anforderungen erfüllt sind oder nicht.

AbanteCart Systemanforderungen prüfen

Wenn alles in Ordnung ist, drücke auf Weiter, um zur nächsten Seite zu gelangen.

Du wirst aufgefordert, die Anmeldedaten für die Datenbank einzugeben. Hier kannst du ein Administratorkonto und einen Sicherheitsschlüssel für den Zugriff auf das Kontrollzentrum erstellen. Wenn du Demodaten möchtest, lass das Kästchen markiert, ansonsten lass es unmarkiert, wenn du ganz von vorne anfangen möchtest.

AbanteCart Datenbank Konfiguration

Wenn du fertig bist, drücke auf Weiter, um fortzufahren. Das Installationsprogramm fährt dann mit der Einrichtung fort und zeigt dir anschließend den folgenden Bildschirm an.

Bildschirm zum Abschluss der AbanteCart-Installation

Setze ein Lesezeichen für den Link zu deiner Systemsteuerung, denn du wirst ihn brauchen. Führe den folgenden Befehl aus, um die Dateien des Installationsprogramms zu löschen, da sie nicht benötigt werden und ein Sicherheitsrisiko darstellen.

$ sudo rm -rf /var/www/html/abantecart/install

AbanteCart Bedienfeld

Melde dich im Control Panel an und du wirst aufgefordert, die Einrichtung deines Shops abzuschließen.

AbanteCart Shop Einrichtungsassistent

Du kannst entweder den Schnellassistenten schließen und ihn über das unten abgebildete Bedienfeld konfigurieren oder mit dem Assistenten fortfahren, um die Grundeinstellungen vorzunehmen.

AbanteCart Bedienfeld

Fazit

Damit ist unser Tutorium zur Einrichtung von AbanteCart auf einem Debian 11 basierten Server abgeschlossen. Wenn du noch Fragen hast, schreibe sie in die Kommentare unten.

Das könnte dich auch interessieren …