Ricerca nel sito web

Come installare Nginx con PHP e MariaDB (LEMP Stack) con Opcache, Redis e Lets Encrypt su Fedora 32


Questo tutorial esiste per queste versioni del sistema operativo

  • Fedora 32
  • Fedora 17

Su questa pagina

  1. Prerequisiti
  2. Configura firewall
  3. Installa PHP
  4. Installa MariaDB
  5. Installa Redis
  6. Configura il server Redis
  7. Installa Nginx
  8. Configura Nginx
  9. Configura PHP-FPM
  10. Installa phpMyAdmin
  11. Configura phpMyAdmin
  12. Configura Opcache
  13. Installa SSL tramite Lets Encrypt
  14. Configurazione del rinnovo automatico SSL
  15. Conclusione

Uno stack software LEMP è un gruppo di software open source che viene installato insieme per consentire a un server di ospitare siti Web e app. È l'acronimo di Linux, server ENginx, MySQL (utilizzando MariaDB) e PHP.

In questa guida installerai uno stack LEMP su un server basato su Fedora 32. Installeremo anche phpMyAdmin, Redis, Opcache e Lets Encrypt SSL.

Prerequisiti

Un server che esegue Fedora 32.

Un utente sudo non root.

Assicurati che tutto sia aggiornato.

$ sudo dnf upgrade

Pochi pacchetti di cui il tuo sistema ha bisogno.

$ sudo dnf install wget curl nano -y

Alcuni di questi pacchetti potrebbero essere già installati sul tuo sistema.

Disattiva SELinux.

$ sudo setenforce 0

Configura firewall

Il primo passo è configurare il firewall. Il server Fedora viene fornito con il firewall Firewalld preinstallato.

Controlla se il firewall è in esecuzione.

$ sudo firewall-cmd --state

Dovresti ottenere il seguente output.

running

Imposta la zona predefinita del firewall su pubblica.

$ sudo firewall-cmd --set-default-zone=public

Controlla gli attuali servizi/porte consentiti.

$ sudo firewall-cmd --zone=public --permanent --list-services

Dovrebbe mostrare il seguente output.

dhcpv6-client mdns ssh

Consenti porte HTTP e HTTPS.

$ sudo firewall-cmd --zone=public --permanent --add-service=http
$ sudo firewall-cmd --zone=public --permanent --add-service=https

Controlla di nuovo lo stato del firewall.

$ sudo firewall-cmd --zone=public --permanent --list-services

Dovresti vedere un output simile.

dhcpv6-client http https mdns ssh

Ricarica il firewall.

$ sudo systemctl reload firewalld

Installa PHP

Fedora 32 per impostazione predefinita viene fornito con PHP 7.4 ma per avere un repository PHP aggiornato, aggiungeremo il repository REMI.

Installa il repository REMI che è il repository ufficiale di Fedora per l'installazione dei pacchetti PHP.

$ sudo dnf -y install https://rpms.remirepo.net/fedora/remi-release-32.rpm

Abilita il repository remi e disabilita il repository remi-modular. Ciò abilita il repository necessario per installare i pacchetti PHP 7.4.

$ sudo dnf config-manager --set-enabled remi
$ sudo dnf config-manager --set-disabled remi-modular

Installa PHP 7.4 insieme ad alcuni pacchetti aggiuntivi.

$ sudo dnf install -y php-cli php-fpm php-mysqlnd

Controlla se PHP funziona correttamente.

$ php --version

Dovresti vedere un output simile.

PHP 7.4.6 (cli) (built: May 12 2020 08:09:15) ( NTS ) 
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies

Installa MariaDB

MariaDB è un sostituto immediato di MySQL, il che significa che i comandi per eseguire e far funzionare MariaDB sono gli stessi di MySQL.

Fedora 32 per impostazione predefinita viene fornito con MariaDB 10.4, che è l'ultima versione stabile disponibile fin d'ora, quindi la useremo.

Per installare MariaDB, immetti il seguente comando.

$ sudo dnf install mariadb-server -y

Controlla se MariaDB è installato correttamente.

$ mysql --version

Dovresti vedere il seguente output.

mysql  Ver 15.1 Distrib 10.4.12-MariaDB, for Linux (x86_64) using  EditLine wrapper

Abilita e avvia il servizio MariaDB.

$ sudo systemctl enable mariadb
$ sudo systemctl start mariadb

Eseguire il comando seguente per eseguire la configurazione predefinita, ad esempio fornire una password di root, rimuovere utenti anonimi, impedire l'accesso root da remoto e eliminare le tabelle di test.

$ sudo mysql_secure_installation

Con MariaDB 10.4, ora ti verrà chiesto se utilizzare la password di root o il plugin unix_socket. Il plug-in unix_socket ti consente di accedere a MariaDB con le tue credenziali utente Linux. È considerato più sicuro anche se avrai bisogno di un nome utente/password tradizionale per utilizzare app di terze parti come phpMyAdmin. Continueremo a usare il plugin unix_socket per questo tutorial. Puoi ancora utilizzare phpMyAdmin tramite qualsiasi utente specifico che crei per i tuoi database.

Premendo Invio si sceglie l'opzione predefinita (quella in maiuscolo, Y in questo caso).

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we'll need the current
password for the root user. If you've just installed MariaDB, and
haven't set the root password yet, you should just press enter here.

Enter current password for root (enter for none): [PRESS ENTER]
OK, successfully used password, moving on...

Setting the root password or using the unix_socket ensures that nobody
can log into the MariaDB root user without the proper authorisation.

You already have your root account protected, so you can safely answer 'n'.

Switch to unix_socket authentication [Y/n] [PRESS ENTER]
Enabled successfully!
Reloading privilege tables..
 ... Success!

You already have your root account protected, so you can safely answer 'n'.

Change the root password? [Y/n] [ANSWER n]
... skipping.

By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n] [PRESS ENTER]
 ... Success!

Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n] [PRESS ENTER]
 ... Success!

By default, MariaDB comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n] [PRESS ENTER]
 \- 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? [Y/n] [PRESS ENTER]
 ... Success!

Cleaning up...

All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!

Questo è tutto. La prossima volta che vuoi accedere a MySQL, usa il seguente comando

$ sudo mysql

Inserisci la tua password di root quando richiesto.

Installa Redis

Fedora 32 contiene la v5.0.8 del pacchetto Redis ma il repository Remi che abbiamo installato in precedenza per PHP porta con sé l'ultima versione di Redis (v6.0.1) al momento della stesura di questo tutorial.

Utilizzare il seguente comando per installare Redis e l'estensione PHP Redis corrispondente.

$ sudo dnf install redis php-redis

Abilita il servizio Redis.

$ sudo systemctl enable --now redis

Configura il server Redis

Eseguiamo alcune configurazioni di base sul server Redis.

Apri il file /etc/redis.conf con l'editor Nano.

$ sudo nano /etc/redis.conf

Se desideri che i client remoti si connettano alla tua istanza Redis, trova la riga bind 127.0.0.1 e modificala nella seguente.

bind 0.0.0.0

Puoi anche modificare la porta predefinita su cui Redis è in ascolto da 6379 a un valore a tua scelta.

port 3458

Per configurare Redis come cache server, imposta i seguenti valori come indicato.

maxmemory 256mb
maxmemory-policy allkeys-lru

Questo dice a Redis di rimuovere qualsiasi chiave utilizzando l'algoritmo LRU quando viene raggiunta la memoria massima di 256 MB. È possibile impostare il valore della memoria in base alle proprie esigenze e al server in uso.

È possibile impostare una password in modo che a qualsiasi client che necessita di Redis venga richiesto di autenticarsi per primo. Per farlo imposta una password usando la seguente direttiva.

requirepass  <AuthPassword>

Puoi trovare altre direttive da modificare nel file di configurazione. Al termine, premi Ctrl + X e inserisci Y quando ti viene chiesto di salvare il file.

Riavvia il server Redis per applicare le modifiche.

$ sudo systemctl restart redis

Dovremo anche aggiungere la regola nel nostro firewall per consentire a Redis di funzionare.

$ sudo firewall-cmd --zone=public --permanent --add-port=6379/tcp
$ sudo firewall-cmd --reload

Dovrai modificare il valore nel comando precedente in modo che corrisponda a qualsiasi porta scelta nel file di configurazione sopra.

Installa Nginx

Fedora 32 per impostazione predefinita viene fornito con l'ultima versione stabile di Nginx. (1.18.0).

Installa Nginx.

$ sudo dnf install nginx -y

Controlla se funziona correttamente.

$ nginx -v

Dovresti vedere il seguente output a seconda della versione di Nginx che hai scelto di installare.

nginx version: nginx/1.18.0

Avvia e abilita Nginx.

$ sudo systemctl start nginx
$ sudo systemctl enable nginx

Apri l'indirizzo IP del tuo server in un browser per vedere la pagina seguente. Significa che Nginx funziona correttamente.

Configura Nginx

Imposta le directory in cui risiederanno i blocchi del server.

$ sudo mkdir /etc/nginx/sites-available
$ sudo mkdir /etc/nginx/sites-enabled

Crea la directory in cui vivrà il tuo sito.

$ sudo mkdir /var/www/example.com/html -p

L'uso della direttiva -p crea directory padre che prima non esistevano.

Esegui il seguente comando per aggiungere un file di configurazione per il tuo sito.

$ sudo nano /etc/nginx/sites-available/example.com.conf

Incolla il seguente codice nell'editor.

server {
  listen          *:80;
  server_name     example.com;
  root            /var/www/example.com/html;
  index           index.php index.html;

  location / {
    try_files   $uri $uri/ =404;
  }
    
  access_log /var/log/nginx/example.com.access.log;
  error_log /var/log/nginx/example.com.error.log;

  location ~ \.php$ {
    try_files $uri =404;
    fastcgi_pass  unix:/run/php-fpm/www.sock;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_index index.php;
    include  fastcgi_params;
  }
}

Premi Ctrl + X per chiudere l'editor e premi Y quando ti viene chiesto di salvare il file.

Questo file presume che ospiteremo example.com nella directory /var/www/html. Se non utilizzerai alcun dominio e configuri il tuo server in modo che sia accessibile solo tramite l'indirizzo IP/localhost, dovrai rimuovere le impostazioni di blocco del server corrispondenti dal file nginx.conf altrimenti si verificherà un pasticcio con il blocco server che creerai.

Attiva questo file di configurazione collegandolo alla directory sites-enabled.

$ sudo ln -s /etc/nginx/sites-available/example.com.conf /etc/nginx/sites-enabled/

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

$ sudo nano /etc/nginx/nginx.conf	

Incolla le seguenti righe dopo la riga include /etc/nginx/conf.d/*.conf

include /etc/nginx/sites-enabled/*.conf;
server_names_hash_bucket_size 64;

Cambia il valore di types_hash_max_size da 2048 a 4096.

types_hash_max_size 4096;

Premi Ctrl + X per chiudere l'editor e premi Y quando ti viene chiesto di salvare il file. Testare la configurazione di Nginx.

$ sudo nginx -t

Dovresti vedere il seguente output che indica che la tua configurazione è corretta.

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Ricarica il servizio Nginx.

$ sudo systemctl reload nginx

Configura PHP-FPM

Apri il file /etc/php-fpm.d/www.conf.

$ sudo nano /etc/php-fpm.d/www.conf

Dobbiamo impostare l'utente/gruppo Unix di processi PHP su nginx. Trova le righe user=apache e group=apache 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.
; RPM: apache user chosen to provide access to the same directories as httpd
user = nginx
; RPM: Keep a group allowed to write in log dir.
group = nginx
...

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

Riavvia il processo PHP-fpm.

$ sudo systemctl restart php-fpm

Per testare la configurazione di PHP, crea un file test.php nella cartella html.

$ sudo nano /var/www/example.com/html/test.php

Aggiungi il seguente contenuto e salva il file premendo Ctrl + X e inserendo Y quando richiesto.

<?php phpinfo();

Avvia http:///test.php nel tuo browser web e dovresti vedere quanto segue.

Installa phpMyAdmin

Remi Repository contiene l'ultimo phpMyAdmin in modo che possiamo semplicemente installarlo usando il seguente comando.

$ sudo dnf install phpmyadmin

Si installa nella directory /usr/share/phpMyAdmin.

Configura phpMyAdmin

Affinché il server web Nginx trovi e serva correttamente i file phpMyAdmin, dovremo creare un collegamento simbolico dalla sua posizione effettiva alla directory dei documenti radice di Nginx.

Per fare ciò, eseguire il seguente comando.

$ sudo ln -s /usr/share/phpmyadmin /var/www/example.com/html/phpmyadmin

L'installazione di phpMyAdmin è operativa. Per accedervi, basta aprire http://example.com/phpmyadmin.

Se ricevi errori di sessione php, esegui il comando seguente per concedere le autorizzazioni appropriate alla directory della sessione PHP. Controlla il percorso della tua sessione dal file test.php che abbiamo creato in precedenza. Per noi è in /var/lib/php/session.

$ sudo chown -R nginx:nginx /var/lib/php/session

Per impostazione predefinita, questa posizione predefinita dovrebbe essere modificata poiché è la posizione più comune in cui qualsiasi hacker può individuare l'installazione di phpMyAdmin. Per fare ciò, eseguire il seguente comando.

$ sudo mv phpmyadmin sm123

Fondamentalmente, abbiamo spostato la nostra posizione phpMyAdmin nella cartella sm123. Per accedervi, ora dovrai aprire http://example.com/sm123 nel tuo browser.

Dato che qui stiamo usando unix_authentication con MySQL, non c'è nessun utente root a cui accedere tramite phpMyAdmin. Dovrai prima creare un utente MySQL e dargli i privilegi sui database per poter utilizzare phpMyAdmin.

Configura Opcache

L'installazione di phpMyAdmin dal repository Remis installa anche Opcache. Nel caso in cui non hai installato phpMyAdmin e non vuoi farlo, puoi semplicemente installare Opcache usando il seguente comando.

$ sudo dnf install php-opcache	

Verificare che sia stato installato.

$ php -v
PHP 7.4.5 (cli) (built: Apr 14 2020 12:54:33) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
    with Zend OPcache v7.4.5, Copyright (c), by Zend Technologies

Per modificare le impostazioni di Opcache, apri il file /etc/php.d/10-opcache.ini.

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

Le seguenti impostazioni dovrebbero iniziare a utilizzare Opcache e sono generalmente consigliate come buone prestazioni. Puoi abilitare una configurazione decommentandola rimuovendo ; davanti ad essa.

opcache.enable_cli=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.revalidate_freq=60

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

Riavvia il server per applicare le impostazioni.

$ sudo systemctl reload nginx

Installa SSL tramite Lets Encrypt

SSL è diventato una parte essenziale di qualsiasi sito web. Qui installeremo SSL utilizzando il servizio Lets Encrypt.

Per questo, prima installa lo strumento Certbot.

$ sudo dnf install certbot-nginx

Genera i certificati.

$ sudo certbot --nginx -d example.com -d www.example.com -d phpmyadmin.example.com

Stiamo creando certificati per entrambi: il nostro sito principale e il dominio phpMyAdmin.

Se è la prima volta che esegui certbot sul tuo sistema, ti verrà chiesto di inserire un indirizzo email e di accettare i termini di servizio. Ti verrà anche chiesto se accetti di condividere i dati con la fondazione EFF a cui puoi dire di no. Dopo averlo fatto, certbot comunicherà con i server Lets Encrypt ed eseguirà una sfida per verificare i tuoi domini.

In caso di successo, ti verrà chiesto come gestire i reindirizzamenti HTTPS.

Please choose whether HTTPS access is required or optional.
-------------------------------------------------------------------------------
1: Easy - Allow both HTTP and HTTPS access to these sites
2: Secure - Make all requests redirect to secure HTTPS access
-------------------------------------------------------------------------------
Select the appropriate number [1-2] then [enter] (press 'c' to cancel):

Seleziona la tua scelta e premi invio. I tuoi certificati verranno creati e la tua configurazione Nginx verrà aggiornata con le impostazioni SSL.

I tuoi certificati sono pronti e puoi aprire il tuo sito ora andando su https://example.com

Configurazione del rinnovo automatico SSL

Questo è l'ultimo passaggio prima di concludere questo tutorial. Per rinnovare l'SSL, useremo cron.

Dobbiamo aggiungere una voce a Cron utilizzando l'editor Crontab. Per aprire l'editor crontab, eseguire il seguente comando.

$ EDITOR=nano sudo crontab -e

EDITOR=nano davanti al comando assicura che crontab apra l'editor Nano per noi perché Fedora per impostazione predefinita preferisce l'editor VIM.

Incolla la seguente riga in basso.

. . .
25 2 * * * /usr/bin/certbot renew --quiet

La parte 25 2 * * * di questa riga significa \esegui il seguente comando alle 2:25, ogni giorno. Puoi scegliere in qualsiasi momento.

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

Il comando renew per Certbot controllerà tutti i certificati installati sul sistema e aggiornerà quelli impostati per scadere entro trenta giorni. --quiet indica a Certbot di non inviare informazioni o di attendere l'input dell'utente.

Questo comando verrà eseguito quotidianamente.

Conclusione

Questo è tutto per questo tutorial. La tua configurazione LEMP è completa e puoi iniziare a creare e ospitare i tuoi siti Web e le tue applicazioni.