Ricerca nel sito web

Come installare AbanteCart con Nginx e SSL su Debian 11


Su questa pagina

  1. Prerequisiti
  2. Passaggio 1: configurazione del firewall
  3. Passaggio 2 - Installa PHP
  4. Passaggio 3 - Installa MySQL
  5. Passaggio 4 - Installa Nginx
  6. Passaggio 5 - Configura MySQL per AbanteCart
  7. Passaggio 6 - Installa AbanteCart
  8. Passaggio 7 - Installa SSL
  9. Passaggio 8 - Configura Nginx e PHP
    1. Configura PHP-FPM
    2. Configura Nginx

    Abantecart è un'applicazione di e-commerce gratuita, open source e ricca di funzionalità. È scritto in PHP ed è alimentato dalle ultime tecnologie come HTML5, Bootstrap, MVC e altro. Può creare più negozi online utilizzando un'unica installazione con supporto per prodotti digitali e fisici, integrazione con più gateway di pagamento e valute, più lingue, coupon, crediti del negozio e una dashboard del cliente. Puoi eseguire una campagna di email marketing attraverso di essa o creare banner per aumentare il coinvolgimento degli utenti. Inoltre, è ottimizzato per SEO con supporto per URL amichevoli, si integra con più piattaforme di analisi e supporta plug-in.

    In questo tutorial imparerai come installare Abantecart su un server basato su Debian 11.

    Prerequisiti

    • A server running Debian 11.

    • A non-root user with sudo privileges.

    • Everything is updated.

      $ sudo apt update && sudo apt upgrade
      
    • Few packages that your system needs.

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

      Some of these packages may already be installed on your system.

    Passaggio 1: configurare il firewall

    Il primo passo è configurare il firewall. Debian viene fornito con ufw (Uncomplicated Firewall).

    Controlla se il firewall è in esecuzione.

    $ sudo ufw status
    

    Dovresti ottenere il seguente output.

    Status: inactive
    

    Consenti porta SSH in modo che il firewall non interrompa la connessione corrente attivandola.

    $ sudo ufw allow OpenSSH
    

    Consenti anche porte HTTP e HTTPS.

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

    Abilita il firewall

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

    Controlla di nuovo lo stato del firewall.

    $ sudo ufw status
    

    Dovresti vedere un output simile.

    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)
    

    Passaggio 2: installa PHP

    Abantecart supporta PHP 8.0. Per installarlo, utilizzeremo il repository PHP di Ondrejs. Eseguire il comando seguente per aggiungere il repository.

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

    Aggiungere la chiave GPG associata al repository.

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

    Aggiorna i repository Debian.

    $ sudo apt update
    

    Installa PHP 8.0 e le estensioni richieste.

    $ 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
    

    Passaggio 3: installa MySQL

    Per installare il server MySQL, il primo passo è aggiungere la chiave GPG per il pacchetto

    C'è un bug in Debian in cui è necessario eseguire il comando GPG separatamente per impostare la directory .gpg.

    $ sudo gpg
    

    Premi Ctrl + C per uscire dal comando precedente. Importa la chiave GPG e salvala nella directory /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
    

    Aggiungi il repository MySQL ufficiale.

    $ 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
    

    Aggiorna i repository Debian.

    $ sudo apt update
    

    Installa MySQL.

    $ sudo apt install mysql-server
    

    Sarai accolto con una schermata di configurazione che ti chiederà di impostare una password di root. Scegli una password complessa.

    Ti verrà chiesto di confermare la password. Successivamente, ti verrà presentata una schermata che descrive il nuovo sistema di autenticazione. Selezionare OK per procedere.

    Infine, ti verrà chiesto di selezionare il metodo di autenticazione. Scegli la crittografia forte della password e seleziona Ok per completare la configurazione.

    Passaggio 4: installa Nginx

    Debian viene fornito con una versione precedente di Nginx. Devi scaricare il repository Nginx ufficiale per installare l'ultima versione.

    Importa la chiave di firma Nginx ufficiale.

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

    Aggiungi il repository per la versione stabile di Nginxs.

    $ 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
    

    Aggiorna i repository Debian.

    $ sudo apt update
    

    Installa Nginx.

    $ sudo apt install nginx
    

    Verificare l'installazione. Assicurati di utilizzare sudo ogni volta che esegui il comando Nginx su Debian. Altrimenti, non funzionerà.

    $ sudo nginx -v
    nginx version: nginx/1.20.2
    

    Abilita il servizio Nginx.

    $ sudo systemctl enable nginx
    

    Passo 5 - Configura MySQL per AbanteCart

    Installazione sicura di MySQL.

    $ sudo mysql_secure_installation
    

    Per il primo passaggio, ti verrà chiesta la password di root. Successivamente, ti verrà chiesto se desideri impostare il plug-in Validate Password, che puoi utilizzare per testare la sicurezza della tua password MySQL. Scegli Y per procedere. Ti verrà chiesto di scegliere il livello di convalida della password nel passaggio successivo. Scegli 2 che è il livello più forte e richiederà che la tua password sia lunga almeno otto caratteri e includa un mix di caratteri maiuscoli, minuscoli, numerici e speciali.

    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
    

    Nel passaggio successivo, ti verrà chiesto se modificare o meno la password di root. Premi N per continuare.

    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
    

    Premi Y e poi il tasto INVIO per tutti i seguenti prompt per rimuovere gli utenti anonimi e il database di test, disabilitare i login root e caricare le nuove regole impostate.

    ...
    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!
    

    Inserisci la shell MySQL. Inserisci la tua password di root per continuare.

    $ mysql -u root -p
    

    Crea un utente abcart. Assicurati che la password soddisfi i requisiti impostati in precedenza.

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

    Crea il database abantecart.

    mysql> CREATE DATABASE abantecart;
    

    Concedi all'utente i privilegi sul database abantecart.

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

    Esci dalla shell.

    mysql> exit
    

    Passo 6 - Installa AbanteCart

    Scarica l'ultima versione di AbanteCart da Github.

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

    Estrai il file.

    $ unzip master.zip
    

    Crea la directory radice web pubblica per Abantecart.

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

    Copia la directory abantecart-src-master/public_html estratta nella directory webroot. Nota la barra (/) alla fine del seguente comando.

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

    Imposta le autorizzazioni appropriate per la directory webroot.

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

    Per ora, l'installazione di base è terminata. Successivamente, dobbiamo configurare SSL e Nginx prima di terminare l'installazione.

    Passaggio 7: installa SSL

    Per installare un certificato SSL utilizzando Lets Encrypt, è necessario installare lo strumento Certbot.

    Useremo il programma di installazione del pacchetto Snapd per questo. Poiché la maggior parte dei server Debian non viene fornita con esso, installa Snap.

    $ sudo apt install snapd
    

    Assicurati che la tua versione di Snapd sia aggiornata.

    $ sudo snap install core && sudo snap refresh core
    

    Installa Cerbot.

    $ sudo snap install --classic certbot
    

    Utilizzare il seguente comando per assicurarsi che il comando Certbot possa essere eseguito creando un collegamento simbolico alla directory /usr/bin.

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

    Verificare l'installazione.

    $ certbot --version
    certbot 1.22.0
    

    Genera il certificato SSL.

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

    Il comando precedente scaricherà un certificato nella directory /etc/letsencrypt/live/abantecart.example.com sul tuo server.

    Genera un certificato di gruppo Diffie-Hellman.

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

    Crea una directory webroot di verifica per il rinnovo automatico di Lets Encrypt.

    $ sudo mkdir -p /var/lib/letsencrypt
    

    Crea un Cron Job per rinnovare l'SSL. Verrà eseguito ogni giorno per controllare il certificato e rinnovarlo se necessario. Per questo, per prima cosa, crea il file /etc/cron.daily/certbot-renew e aprilo per modificarlo.

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

    Incolla il seguente codice.

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

    Salva il file premendo Ctrl + X e inserendo Y quando richiesto.

    Modificare le autorizzazioni sul file dell'attività per renderlo eseguibile.

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

    Passaggio 8: configurare Nginx e PHP

    Configura PHP-FPM

    Apri il file /etc/php/8.0/fpm/pool.d/www.conf.

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

    Dobbiamo impostare l'utente/gruppo Unix di processi PHP su nginx. Trova le righe user=www-data e group=www-data nel file e modificale 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
    ...
    

    Inoltre, trova le righe listen.owner=www-data e listen.group=www-data nel file e modificale in nginx.

    listen.owner = nginx
    listen.group = nginx
    

    Salva il file premendo Ctrl + X e inserendo Y quando richiesto.

    Il prossimo passo è disabilitare l'estensione PHP opcache.

    Apri il file /etc/php/8.0/fpm/conf.d/10-opcache.ini per la modifica.

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

    Incolla la seguente riga alla fine.

    opcache.enable=0
    

    Salva il file premendo Ctrl + X e inserendo Y quando richiesto.

    Riavvia il processo PHP-fpm.

    $ sudo systemctl restart php8.0-fpm
    

    Configura Nginx

    Crea e apri il file /etc/nginx/conf.d/abantecart.conf per la modifica.

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

    Incolla il seguente codice al suo interno.

    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 $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;
    }
    

    Salva il file premendo Ctrl + X e inserendo Y quando richiesto una volta terminato.

    Apri il file /etc/nginx/nginx.conf per la modifica.

    $ sudo nano /etc/nginx/nginx.conf
    

    Aggiungere la riga seguente prima della riga include /etc/nginx/conf.d/*.conf;.

    server_names_hash_bucket_size  64;
    

    Salva il file premendo Ctrl + X e inserendo Y quando richiesto.

    Verificare la sintassi del file di configurazione di Nginx.

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

    Avvia il servizio Nginx per abilitare la nuova configurazione.

    $ sudo systemctl start nginx
    

    Passaggio 9: terminare l'installazione

    Avvia https://abantecart.example.com nel tuo browser e ti verrà presentata la seguente schermata.

    Seleziona la casella per accettare la licenza e premi Continua per procedere. Successivamente, il programma di installazione verificherà se tutti i requisiti sono soddisfatti o meno.

    Se tutto è a posto, premi Continua per passare alla pagina successiva.

    Ti verrà chiesto di inserire le credenziali del database. Qui puoi creare un account amministratore e una chiave di sicurezza per accedere al pannello di controllo. Se vuoi dati demo, tieni la casella selezionata altrimenti, lasciala deselezionata se vuoi iniziare da zero.

    Premere Continua per procedere al termine. L'installer procederà quindi con l'impostazione del tutto e, una volta terminato, ti presenterà la seguente schermata.

    Aggiungi il collegamento al tuo pannello di controllo nei segnalibri perché ne avrai bisogno. Eseguire il comando seguente per eliminare i file del programma di installazione perché non sono necessari e rappresentano un rischio per la sicurezza.

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

    Accedi al pannello di controllo e ti verrà chiesto di completare la configurazione del tuo negozio.

    È possibile chiudere la procedura guidata rapida e configurarla dal Pannello di controllo mostrato di seguito o continuare con la procedura guidata per configurare le impostazioni di base.

    Conclusione

    Questo conclude il nostro tutorial sulla configurazione di AbanteCart su un server basato su Debian 11. Se hai domande, pubblicale nei commenti qui sotto.