AbanteCart met Nginx en SSL installeren op Debian 11

Abantecart is een gratis, open-source en feature-rijke e-commerce toepassing. Het is geschreven in PHP en wordt aangedreven door de nieuwste technologieën zoals HTML5, Bootstrap, MVC en meer. Je kunt met een enkele installatie meerdere online winkels maken met ondersteuning voor digitale en fysieke producten, integratie met meerdere betalingsgateways en munteenheden, meerdere talen, coupons, winkeltegoeden en een klantendashboard. Je kunt er een e-mail marketing campagne mee voeren of banners maken om de betrokkenheid van gebruikers te vergroten. Bovendien is het SEO geoptimaliseerd met ondersteuning voor vriendelijke URL’s, integreert het met meerdere analyse platforms en ondersteunt het plugins.

In deze handleiding leer je hoe je Abantecart op een Debian 11 gebaseerde server kunt installeren.

Vereisten

  • Een server met Debian 11.

  • Een niet-root gebruiker met sudo privileges.

  • Alles is bijgewerkt.

    $ sudo apt update && sudo apt upgrade
    
  • Een paar pakketten die je systeem nodig heeft.

    $ sudo apt install wget curl nano ufw software-properties-common dirmngr apt-transport-https gnupg2 ca-certificates lsb-release unzip debian-archive-keyring -y
    

    Sommige van deze pakketten kunnen al op je systeem geïnstalleerd zijn.

Stap 1 – Configureer Firewall

De eerste stap is het instellen van de firewall. Debian wordt geleverd met ufw (Uncomplicated Firewall).

Controleer of de firewall draait.

$ sudo ufw status

Je zou de volgende uitvoer moeten krijgen.

Status: inactive

Sta de SSH poort toe, zodat de firewall de huidige verbinding niet verbreekt bij het inschakelen ervan.

$ sudo ufw allow OpenSSH

Sta ook HTTP en HTTPS poorten toe.

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

Schakel de firewall in

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

Controleer nogmaals de status van de firewall.

$ sudo ufw status

Je zou een gelijkaardige uitvoer moeten zien.

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)

Stap 2 – Installeer PHP

Abantecart ondersteunt PHP 8.0. Om het te installeren zullen we Ondrej’s PHP repository gebruiken. Voer het volgende commando uit om de repository toe te voegen.

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

Voeg de GPG sleutel toe die bij de repository hoort.

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

Werk de Debian repositories bij.

$ sudo apt update

Installeer PHP 8.0 en de vereiste uitbreidingen.

$ 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

Stap 3 – Installeer MySQL

Om de MySQL server te installeren, is de eerste stap het toevoegen van de GPG sleutel voor het pakket

Er is een bug in Debian waarbij je het GPG commando apart moet uitvoeren om de .gpg directory in te stellen.

$ sudo gpg

Druk op Ctrl + C om het bovenstaande commando te verlaten. Importeer de GPG sleutel en bewaar hem in de /usr/share/keyrings directory.

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

Voeg de officiële MySQL repository toe.

$ 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

Werk de Debian repositories bij.

$ sudo apt update

Installeer MySQL.

$ sudo apt install mysql-server

Je wordt begroet met een configuratiescherm waarin je gevraagd wordt een root wachtwoord in te stellen. Kies een sterk wachtwoord.

MySQL root wachtwoord instellen

Je wordt gevraagd het wachtwoord te bevestigen. Vervolgens krijg je een scherm met een beschrijving van het nieuwe authenticatiesysteem. Kies OK om verder te gaan.

MySQL Authenticatie Informatie

Tenslotte wordt je gevraagd de authenticatie methode te kiezen. Kies de Strong Password Encryption en selecteer Ok om de setup te beëindigen.

MySQL wachtwoord authenticatieprompt

Stap 4 – Installeer Nginx

Debian wordt geleverd met een oudere versie van Nginx. Je moet de officiële Nginx repository downloaden om de nieuwste versie te installeren.

Importeer de officiële Nginx signeer sleutel.

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

Voeg de repository voor de stabiele versie van Nginx toe.

$ 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

Werk de Debian repositories bij.

$ sudo apt update

Installeer Nginx.

$ sudo apt install nginx

Verifieer de installatie. Zorg ervoor dat je sudo gebruikt telkens als je het Nginx commando op Debian uitvoert. Anders werkt het niet.

$ sudo nginx -v
nginx version: nginx/1.20.2

Schakel de Nginx dienst in.

$ sudo systemctl enable nginx

Stap 5 – Configureer MySQL voor AbanteCart

Beveilig de MySQL installatie.

$ sudo mysql_secure_installation

Bij de eerste stap wordt je om je root wachtwoord gevraagd. Vervolgens wordt je gevraagd of je de Validate Password Plugin wilt instellen, die je kunt gebruiken om de sterkte van je MySQL wachtwoord te testen. Kies Y om verder te gaan. Bij de volgende stap wordt je gevraagd het wachtwoord validatie niveau te kiezen. Kies 2 wat het sterkste niveau is en vereist dat je wachtwoord minstens acht tekens lang is en een mengeling van hoofdletters, kleine letters, numerieke en speciale tekens bevat.

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

Bij de volgende stap wordt je gevraagd of je het root wachtwoord al dan niet wilt veranderen. Druk op N om verder te gaan.

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

Druk op Y en dan op ENTER bij alle volgende prompts om anonieme gebruikers en de testdatabase te verwijderen, root logins uit te schakelen en de nieuw ingestelde regels te 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!

Ga de MySQL shell binnen. Voer je root wachtwoord in om verder te gaan.

$ mysql -u root -p

Maak abcart gebruiker aan. Zorg ervoor dat het wachtwoord voldoet aan de eerder gestelde eisen.

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

Maak abantecart database aan.

mysql> CREATE DATABASE abantecart;

Geef de gebruiker privileges op de abantecart database.

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

Sluit de Shell af.

mysql> exit

Stap 6 – Installeer AbanteCart

Download de nieuwste versie van AbanteCart van Github.

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

Pak het bestand uit.

$ unzip master.zip

Maak de publieke web root directory voor Abantecart.

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

Kopieer de uitgepakte abantecart-src-master/public_html directory naar de webroot directory. Let op de forward-slash(/) aan het eind van het volgende commando.

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

Geef de juiste rechten aan de webroot directory.

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

Voorlopig is de basisinstallatie klaar. Nu moeten we SSL en Nginx instellen voor we de installatie afronden.

Stap 7 – SSL installeren

Om een SSL certificaat te installeren met Let’s Encrypt, moeten we het Certbot gereedschap installeren.

We zullen daarvoor het Snapd pakket installatieprogramma gebruiken. Omdat de meeste Debian servers er niet mee geleverd worden, installeer je Snap.

$ sudo apt install snapd

Zorg ervoor dat je versie van Snapd up to date is.

$ sudo snap install core && sudo snap refresh core

Installeer Certbot.

$ sudo snap install --classic certbot

Gebruik het volgende commando om ervoor te zorgen dat het Certbot commando kan worden uitgevoerd door een symbolische link te maken naar de /usr/bin directory.

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

Verifieer de installatie.

$ certbot --version
certbot 1.22.0

Genereer het SSL certificaat.

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

Het bovenstaande commando downloadt een certificaat naar de /etc/letsencrypt/live/abantecart.example.com directory op je server.

Genereer een Diffie-Hellman groepscertificaat.

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

Maak een uitdagende webroot directory voor Let’s Encrypt auto-renewal.

$ sudo mkdir -p /var/lib/letsencrypt

Maak een Cron Job om de SSL te vernieuwen. Deze zal elke dag lopen om het certificaat te controleren en zo nodig te vernieuwen. Maak daarvoor eerst het bestand /etc/cron.daily/certbot-renew en open het om te bewerken.

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

Plak er de volgende code in.

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

Sla het bestand op door op Ctrl + X te drukken en Y in te voeren als daarom gevraagd wordt.

Verander de permissies op het taakbestand om het uitvoerbaar te maken.

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

Stap 8 – Configureer Nginx en PHP

Configureer PHP-FPM

Open het bestand /etc/php/8.0/fpm/pool.d/www.conf.

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

We moeten de Unix gebruiker/groep van de PHP processen instellen op nginx. Zoek de regels user=www-data en group=www-data in het bestand en verander ze 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
...

Zoek ook de regels listen.owner=www-data en listen.group=www-data in het bestand en verander ze in nginx.

listen.owner = nginx
listen.group = nginx

Sla het bestand op door op Ctrl + X te drukken en Y in te voeren als daarom gevraagd wordt.

De volgende stap is het uitschakelen van de PHP opcache uitbreiding.

Open het bestand /etc/php/8.0/fpm/conf.d/10-opcache.ini om het te bewerken.

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

Plak de volgende regel aan het eind.

opcache.enable=0

Sla het bestand op door op Ctrl + X te drukken en Y in te voeren als daarom wordt gevraagd.

Start het PHP-fpm proces opnieuw.

$ sudo systemctl restart php8.0-fpm

Configureer Nginx

Maak het bestand /etc/nginx/conf.d/abantecart.conf aan en open het om te bewerken.

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

Plak er de volgende code in.

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 [email protected]$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;
}

Sla het bestand op door op Ctrl + X te drukken en Y in te voeren als daarom gevraagd wordt als je klaar bent.

Open het bestand /etc/nginx/nginx.conf om het te bewerken.

$ sudo nano /etc/nginx/nginx.conf

Voeg de volgende regel toe vóór de regel include /etc/nginx/conf.d/*.conf;.

server_names_hash_bucket_size  64;

Sla het bestand op door op Ctrl + X te drukken en Y in te voeren als daarom gevraagd wordt.

Controleer de syntaxis van het Nginx configuratiebestand.

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

Start de Nginx dienst om de nieuwe configuratie in te schakelen.

$ sudo systemctl start nginx

Stap 9 – Voltooi de installatie

Start https://abantecart.example.com in je browser, en je krijgt het volgende scherm te zien.

AbanteCart Licentiescherm

Vink het vakje aan om akkoord te gaan met de licentie en druk op Ga door om verder te gaan. Vervolgens controleert het installatieprogramma of aan alle eisen wordt voldaan.

AbanteCart Systeemvereisten controleren

Als alles in orde is, druk je op Continue om naar de volgende pagina te gaan.

Je wordt gevraagd de databasereferenties in te vullen. Hier kun je een beheerdersaccount aanmaken en een beveiligingssleutel om toegang te krijgen tot het controlepaneel. Als je demo gegevens wilt, laat het vakje dan aangevinkt anders laat je het uitgevinkt als je vanaf nul wilt beginnen.

AbanteCart Database Configuratie

Druk op Continue om verder te gaan als je klaar bent. Het installatieprogramma gaat dan verder met het instellen van alles en toont je, als het klaar is, het volgende scherm.

AbanteCart Installatie Voltooiing Scherm

Maak een bladwijzer van de link naar je configuratiescherm want je zult het nodig hebben. Voer het volgende commando uit om de installatiebestanden te verwijderen, want ze zijn niet nodig en vormen een veiligheidsrisico.

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

AbanteCart Bedieningspaneel

Log in op het configuratiescherm, en je wordt gevraagd de inrichting van je shop af te ronden.

AbanteCart Winkel Instellingen Wizard

Je kunt ofwel de snelle wizard sluiten en vanaf het hieronder getoonde Control panel configureren, of doorgaan met de wizard om basisinstellingen in te stellen.

AbanteCart Bedieningspaneel

Conclusie

Dit is het einde van onze handleiding over het opzetten van AbanteCart op een Debian 11 gebaseerde server. Als je vragen hebt, stel ze dan in de commentaar hieronder.