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.
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.
Tenslotte wordt je gevraagd de authenticatie methode te kiezen. Kies de Strong Password Encryption en selecteer Ok om de setup te beëindigen.
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 $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; }
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.
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.
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.
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.
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
Log in op het configuratiescherm, en je wordt gevraagd de inrichting van je shop af te ronden.
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.
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.