Ricerca nel sito web

Come installare Linux, Nginx, MySQL, PHP (stack LEMP) in Ubuntu 16.04


introduzione

Lo stack software LEMP è un gruppo di software che può essere utilizzato per servire pagine web dinamiche e applicazioni web. Questo è un acronimo che descrive un sistema operativo Linux, con un server web Nginx. I dati di back-end sono archiviati nel database MySQL e l'elaborazione dinamica è gestita da PHP.

In questa guida, dimostreremo come installare uno stack LEMP su un server Ubuntu 16.04. Il sistema operativo Ubuntu si prende cura del primo requisito. Descriveremo come far funzionare il resto dei componenti.

Prerequisiti

Prima di completare questo tutorial, dovresti avere un normale account utente non root sul tuo server con privilegi sudo. Puoi imparare come impostare questo tipo di account completando la nostra configurazione iniziale del server Ubuntu 16.04.

Una volta che hai il tuo utente disponibile, accedi al tuo server con quel nome utente. Ora sei pronto per iniziare i passaggi descritti in questa guida.

Passaggio 1: installare il server Web Nginx

Per mostrare le pagine web ai visitatori del nostro sito, utilizzeremo Nginx, un server web moderno ed efficiente.

Tutto il software che useremo per questa procedura proverrà direttamente dai repository di pacchetti predefiniti di Ubuntu. Ciò significa che possiamo usare la suite di gestione dei pacchetti apt per completare l'installazione.

Poiché questa è la prima volta che utilizziamo apt per questa sessione, dovremmo iniziare aggiornando il nostro indice locale dei pacchetti. Possiamo quindi installare il server:

  1. sudo apt-get update
  2. sudo apt-get install nginx

Su Ubuntu 16.04, Nginx è configurato per iniziare a funzionare al momento dell'installazione.

Se hai il firewall ufw in esecuzione, come descritto nella nostra guida alla configurazione iniziale, dovrai consentire le connessioni a Nginx. Nginx si registra con ufw al momento dell'installazione, quindi la procedura è piuttosto semplice.

Si consiglia di abilitare il profilo più restrittivo che consentirà comunque il traffico desiderato. Poiché non abbiamo ancora configurato SSL per il nostro server, in questa guida dovremo solo consentire il traffico sulla porta 80.

Puoi abilitarlo digitando:

  1. sudo ufw allow 'Nginx HTTP'

Puoi verificare la modifica digitando:

  1. sudo ufw status

Dovresti vedere il traffico HTTP consentito nell'output visualizzato:

Output
Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere Nginx HTTP ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Nginx HTTP (v6) ALLOW Anywhere (v6)

Con la nuova regola firewall aggiunta, puoi verificare se il server è attivo e funzionante accedendo al nome di dominio del tuo server o all'indirizzo IP pubblico nel tuo browser web.

Se non hai un nome di dominio puntato sul tuo server e non conosci l'indirizzo IP pubblico del tuo server, puoi trovarlo digitando uno dei seguenti comandi nel tuo terminale:

  1. ip addr show eth0 | grep inet | awk '{ print $2; }' | sed 's/\/.*$//'

Questo stamperà alcuni indirizzi IP. Puoi provare ciascuno di essi a turno nel tuo browser web.

In alternativa, puoi verificare quale indirizzo IP è accessibile visto da altre posizioni su Internet:

  1. curl -4 icanhazip.com

Digita uno degli indirizzi che ricevi nel tuo browser web. Dovrebbe portarti alla pagina di destinazione predefinita di Nginx:

http://server_domain_or_IP

Se vedi la pagina sopra, hai installato Nginx con successo.

Passaggio 2: installa MySQL per gestire i dati del sito

Ora che abbiamo un server web, dobbiamo installare MySQL, un sistema di gestione del database, per archiviare e gestire i dati per il nostro sito.

Puoi installarlo facilmente digitando:

  1. sudo apt-get install mysql-server

Ti verrà chiesto di fornire una password di root (amministrativa) da utilizzare all'interno del sistema MySQL.

Il software del database MySQL è ora installato, ma la sua configurazione non è ancora del tutto completa.

Per proteggere l'installazione, possiamo eseguire un semplice script di sicurezza che chiederà se vogliamo modificare alcune impostazioni predefinite non sicure. Inizia lo script digitando:

  1. mysql_secure_installation

Ti verrà chiesto di inserire la password che hai impostato per l'account root di MySQL. Successivamente, ti verrà chiesto se desideri configurare il VALIDATE PASSWORD PLUGIN.

Avvertenza: l'abilitazione di questa funzione è una specie di giudizio. Se abilitato, le password che non corrispondono ai criteri specificati verranno rifiutate da MySQL con un errore. Ciò causerà problemi se si utilizza una password debole insieme al software che configura automaticamente le credenziali utente MySQL, come i pacchetti Ubuntu per phpMyAdmin. È sicuro lasciare la convalida disabilitata, ma dovresti sempre usare password complesse e univoche per le credenziali del database.

Rispondi y per sì o qualsiasi altra cosa per continuare senza abilitare.

VALIDATE PASSWORD PLUGIN 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 plugin?

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

Se hai abilitato la convalida, ti verrà chiesto di selezionare un livello di convalida della password. Tieni presente che se inserisci 2, per il livello più forte, riceverai errori quando tenti di impostare una password che non contenga numeri, lettere maiuscole e minuscole e caratteri speciali o che si basi su parole comuni del dizionario.

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: 1

Se hai abilitato la convalida della password, ti verrà mostrata una sicurezza della password per la password di root esistente e ti verrà chiesto se desideri modificare quella password. Se sei soddisfatto della tua password attuale, inserisci n per \no” al prompt:

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

Per il resto delle domande, dovresti premere Y e premere il tasto Invio a ogni richiesta. Questo rimuoverà alcuni utenti anonimi e il database di test, disabiliterà gli accessi root remoti e caricherà queste nuove regole in modo che MySQL rispetti immediatamente le modifiche che abbiamo apportato.

A questo punto, il tuo sistema di database è ora configurato e possiamo andare avanti.

Passaggio 3: installa PHP per l'elaborazione

Ora abbiamo Nginx installato per servire le nostre pagine e MySQL installato per archiviare e gestire i nostri dati. Tuttavia, non abbiamo ancora nulla che possa generare contenuti dinamici. Possiamo usare PHP per questo.

Poiché Nginx non contiene l'elaborazione PHP nativa come altri server web, dovremo installare php-fpm, che sta per \fastCGI process manager. Diremo a Nginx di passare le richieste PHP a questo software per l'elaborazione.

Possiamo installare questo modulo e prenderemo anche un pacchetto di supporto aggiuntivo che consentirà a PHP di comunicare con il nostro back-end del database. L'installazione inserirà i file core PHP necessari. Fai questo digitando:

  1. sudo apt-get install php-fpm php-mysql

Configura il processore PHP

Ora abbiamo i nostri componenti PHP installati, ma dobbiamo apportare una leggera modifica alla configurazione per rendere la nostra configurazione più sicura.

Apri il file di configurazione principale php-fpm con i privilegi di root:

  1. sudo nano /etc/php/7.0/fpm/php.ini

Quello che stiamo cercando in questo file è il parametro che imposta cgi.fix_pathinfo. Questo verrà commentato con un punto e virgola (;) e impostato su \1 per impostazione predefinita.

Questa è un'impostazione estremamente insicura perché dice a PHP di tentare di eseguire il file più vicino che riesce a trovare se il file PHP richiesto non può essere trovato. Ciò in pratica consentirebbe agli utenti di creare richieste PHP in un modo che consenta loro di eseguire script che non dovrebbero essere autorizzati a eseguire.

Modificheremo entrambe queste condizioni decommentando la riga e impostandola su \0 in questo modo:

cgi.fix_pathinfo=0

Salva e chiudi il file quando hai finito.

Ora non ci resta che riavviare il nostro processore PHP digitando:

  1. sudo systemctl restart php7.0-fpm

Questo implementerà la modifica che abbiamo apportato.

Passaggio 4: configurare Nginx per utilizzare il processore PHP

Ora abbiamo tutti i componenti richiesti installati. L'unica modifica alla configurazione di cui abbiamo ancora bisogno è dire a Nginx di utilizzare il nostro processore PHP per i contenuti dinamici.

Lo facciamo a livello di blocco del server (i blocchi del server sono simili agli host virtuali di Apache). Apri il file di configurazione del blocco del server Nginx predefinito digitando:

  1. sudo nano /etc/nginx/sites-available/default

Attualmente, con i commenti rimossi, il file di blocco del server predefinito di Nginx si presenta così:

server {
    listen 80 default_server;
    listen [::]:80 default_server;

    root /var/www/html;
    index index.html index.htm index.nginx-debian.html;

    server_name _;

    location / {
        try_files $uri $uri/ =404;
    }
}

Dobbiamo apportare alcune modifiche a questo file per il nostro sito.

  • Per prima cosa, dobbiamo aggiungere index.php come primo valore della nostra direttiva index in modo che i file denominati index.php vengano serviti , se disponibile, quando viene richiesta una directory.
  • Possiamo modificare la direttiva server_name in modo che punti al nome di dominio del nostro server o all'indirizzo IP pubblico.
  • Per l'effettiva elaborazione PHP, abbiamo solo bisogno di decommentare un segmento del file che gestisce le richieste PHP rimuovendo i simboli cancelletto (#) da ogni riga. Questo sarà il blocco di posizione location ~\.php$, lo snippet fastcgi-php.conf incluso e il socket associato a php-fpm.
  • Rimuoveremo il commento anche dal blocco della posizione che tratta i file .htaccess utilizzando lo stesso metodo. Nginx non elabora questi file. Se qualcuno di questi file trova la sua strada nella root del documento, non dovrebbe essere mostrato ai visitatori.

Le modifiche che devi apportare sono in rosso nel testo sottostante:

server {
    listen 80 default_server;
    listen [::]:80 default_server;

    root /var/www/html;
    index index.php index.html index.htm index.nginx-debian.html;

    server_name server_domain_or_IP;

    location / {
        try_files $uri $uri/ =404;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php7.0-fpm.sock;
    }

    location ~ /\.ht {
        deny all;
    }
}

Dopo aver apportato le modifiche di cui sopra, puoi salvare e chiudere il file.

Testa il tuo file di configurazione per errori di sintassi digitando:

  1. sudo nginx -t

Se vengono segnalati errori, tornare indietro e ricontrollare il file prima di continuare.

Quando sei pronto, ricarica Nginx per apportare le modifiche necessarie:

  1. sudo systemctl reload nginx

Passaggio 5: creare un file PHP per testare la configurazione

Il tuo stack LEMP dovrebbe ora essere completamente configurato. Possiamo testarlo per verificare che Nginx sia in grado di consegnare correttamente i file .php al nostro processore PHP.

Possiamo farlo creando un file PHP di prova nella nostra root dei documenti. Apri un nuovo file chiamato info.php all'interno della root del tuo documento nel tuo editor di testo:

  1. sudo nano /var/www/html/info.php

Digita o incolla le seguenti righe nel nuovo file. Questo è un codice PHP valido che restituirà informazioni sul nostro server:

<?php
phpinfo();

Quando hai finito, salva e chiudi il file.

Ora puoi visitare questa pagina nel tuo browser web visitando il nome di dominio del tuo server o l'indirizzo IP pubblico seguito da /info.php:

http://server_domain_or_IP/info.php

Dovresti vedere una pagina web che è stata generata da PHP con informazioni sul tuo server:

Se vedi una pagina simile a questa, hai configurato correttamente l'elaborazione PHP con Nginx.

Dopo aver verificato che Nginx esegue correttamente il rendering della pagina, è meglio rimuovere il file che hai creato in quanto può effettivamente fornire agli utenti non autorizzati alcuni suggerimenti sulla tua configurazione che potrebbero aiutarli a tentare di entrare. Puoi sempre rigenerare questo file se ne avrai bisogno in seguito.

Per ora, rimuovi il file digitando:

  1. sudo rm /var/www/html/info.php

Conclusione

Ora dovresti avere uno stack LEMP configurato sul tuo server Ubuntu 16.04. Questo ti offre una base molto flessibile per offrire contenuti web ai tuoi visitatori.