GNU/Linux >> Linux Esercitazione >  >> Ubuntu

Tutorial server LAMP Ubuntu 16.04 (LTS) con Apache, PHP 7 e MySQL

LAMP è l'abbreviazione di L inux, A pache, M ySQL, P HP. Questo tutorial mostra come installare un server web Apache su un server Ubuntu 16.04 LTS (Xenial Xerus) con supporto PHP 7 (mod_php) e MySQL/MariaDB e come configurare un certificato SSL con Let's encrypt. Inoltre, installerò PHPMyAdmin per semplificare l'amministrazione di MySQL. Una configurazione LAMP è una base perfetta per i più diffusi sistemi CMS come Joomla, Wordpress o Drupal.

Nota preliminare

In questo tutorial, userò il nome host server1.example.com con l'indirizzo IP 192.168.1.100. Queste impostazioni potrebbero differire per te, quindi devi sostituirle dove appropriato.

Ti consiglio di utilizzare una configurazione minima del server Ubuntu come base per il tutorial, che può essere un'immagine del server virtuale o root con un'installazione minima di Ubuntu 16.04 da una società di hosting web oppure usi il nostro tutorial minimo del server per installare un server da zero.

Sto eseguendo tutti i passaggi di questo tutorial con i privilegi di root, quindi assicurati di aver effettuato l'accesso come root:

sudo su

1. Installazione del database MySQL o MariaDB

Attualmente sono disponibili due sistemi di database MySQL ampiamente utilizzati, il classico server "MySQL" che è sviluppato da Oracle ed è ora disponibile nella versione 5.7 e il fork MySQL chiamato MariaDB che è sviluppato dallo sviluppatore MySQL originale Monty Widenius.

Ti mostrerò come installare entrambe le alternative di seguito. Basta seguire il capitolo 1.1 o 1.2 ma non entrambi. Userò MySQL 5.7 per l'immagine della macchina virtuale che può essere scaricata da Howtoforge.

1.1 Installa MySQL 5.7

Per installare MySQL 5.7, esegui questo comando:

apt-get -y install mysql-server mysql-client

I pacchetti mysql-server e mysql-client sono i cosiddetti 'meta-pacchetti', installano sempre l'ultima versione di MySQL disponibile da Ubuntu. L'ultima versione è attualmente MySQL 5.7.

Abbiamo già impostato la password di root per MySQL durante l'installazione, ma vorrei rimuovere l'utente anonimo e testare il database per motivi di sicurezza. Esegui il comando mysql_secure_installation di seguito per ottenerlo.

mysql_secure_installation

Ti verranno poste queste domande:

Securing the MySQL server deployment.
Enter password for user root: <-- Enter the MySQL root password
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:
Using existing password for root.
Change the password for root ? ((Press y|Y for Yes, any other key for No) : <-- Choose 'y' here if you like to enable the password validation, I don't need that function, so I choose 'n' here.
... skipping.
By default, a MySQL installation has an anonymous user,
allowing anyone to log into MySQL 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? (Press y|Y for Yes, any other key for No) : <-- y
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? (Press y|Y for Yes, any other key for No) : <-- y
Success.
By default, MySQL 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? (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!

La configurazione di MySQL è stata ora protetta.

1.2 Installa MariaDB 10

Eseguire il comando seguente per installare il server e il client MariaDB:

apt-get -y install mariadb-server mariadb-client

Ora impostiamo una password di root per MariaDB.

mysql_secure_installation

Ti verranno poste queste domande:

Enter current password for root (enter for none): <-- press enter
Set root password? [Y/n] <-- y
New password: <-- Enter the new MariaDB root password here
Re-enter new password: <-- Repeat the password
Remove anonymous users? [Y/n] <-- y
Disallow root login remotely? [Y/n] <-- y
Reload privilege tables now? [Y/n] <-- y

Testare l'accesso a MariaDB con il "comando mysql"

mysql -u root -p

e inserisci la password di root di MariaDB che hai impostato sopra. Il risultato dovrebbe essere simile allo screenshot qui sotto:

Per uscire dalla shell di MariaDB, inserisci il comando "quit" e premi invio.

2. Installa il server Web Apache

Apache 2 è disponibile come pacchetto Ubuntu, quindi possiamo installarlo in questo modo:

apt-get -y install apache2

Ora indirizza il tuo browser a http://192.168.1.100 e dovresti vedere la pagina predefinita di Apache2 (Funziona!):

La radice del documento del vhost predefinito di Apache è /var/www/html su Ubuntu e il file di configurazione principale è /etc/apache2/apache2.conf. Il sistema di configurazione è completamente documentato in /usr/share/doc/apache2/README.Debian.gz .

3. Installa PHP 7

Possiamo installare PHP 7 e il modulo Apache PHP come segue:

apt-get -y install php7.0 libapache2-mod-php7.0

Quindi riavvia Apache:

systemctl restart apache2

4. Testa PHP e ottieni dettagli sulla tua installazione di PHP

La radice del documento del sito Web predefinito è /var/www/html. Ora creeremo un piccolo file PHP (info.php) in quella directory e lo chiameremo in un browser. Il file mostrerà molti dettagli utili sulla nostra installazione di PHP, come la versione di PHP installata.

nano /var/www/html/info.php
<?php
phpinfo();
?>

Quindi cambia il proprietario del file info.php nell'utente e nel gruppo www-data.

chown www-data:www-data /var/www/html/info.php

Ora chiamiamo quel file in un browser (es. http://192.168.1.100/info.php):

Come vedi, PHP 7.0 funziona e funziona tramite il gestore Apache 2.0, come mostrato nella riga dell'API del server. Se scorri più in basso, vedrai tutti i moduli che sono già abilitati in PHP5. MySQL non è elencato lì, il che significa che non abbiamo ancora il supporto MySQL/MariaDB in PHP.

5. Ottieni il supporto per MySQL/MariaDB in PHP

Per ottenere il supporto MySQL in PHP, possiamo installare il pacchetto php7.0-mysql. È una buona idea installare alcuni altri moduli PHP e potresti averne bisogno per le tue applicazioni. Puoi cercare i moduli PHP disponibili in questo modo:

apt-cache search php7.0

Scegli quelli che ti servono e installali in questo modo:

apt-get -y install php7.0-mysql php7.0-curl php7.0-gd php7.0-intl php-pear php-imagick php7.0-imap php7.0-mcrypt php-memcache  php7.0-pspell php7.0-recode php7.0-sqlite3 php7.0-tidy php7.0-xmlrpc php7.0-xsl php7.0-mbstring php-gettext

Ora riavvia Apache2:

systemctl restart apache2

PHP 7 ha ora il supporto MySQL/MariaDB come mostrato in phpinfo() sopra.

6. Installa la cache PHP Opcache + ApCu per velocizzare PHP

PHP 7 viene fornito con un opcode cacher integrato per la memorizzazione nella cache e l'ottimizzazione del codice intermedio PHP, ha il nome 'opcache' ed è disponibile nel pacchetto php7.0-opcache. Si consiglia vivamente di avere un Opcache installato per velocizzare la tua pagina PHP. Oltre a opcache, installerò APCu che è un wrapper di compatibilità per opcache per fornire le funzioni della cache APC, un sistema di memorizzazione nella cache spesso utilizzato nelle versioni PHP 5.x e molti sistemi CMS lo usano ancora.

Opcache e APCu possono essere installati come segue:

apt-get -y install php7.0-opcache php-apcu

Non preoccuparti se mostra che Opcache è già installato.

Ora riavvia Apache:

systemctl restart apache2

Ora ricarica http://192.168.1.100/info.php nel tuo browser e scorri di nuovo verso il basso fino alla sezione dei moduli. Ora dovresti trovare molti nuovi moduli lì:

Non dimenticare di eliminare il file info.php quando non ne hai più bisogno poiché fornisce dettagli sensibili del tuo server. Esegui il comando seguente per eliminare il file.

rm -f /var/www/html/info.php

7. Abilita il sito Web SSL in apache

SSL/TLS è un livello di sicurezza per crittografare la connessione tra il browser Web e il server. La maggior parte dei browser Web inizia a mostrare i siti come non sicuri oggi quando la connessione tra il server e il browser Web non è crittografata con SSL. In questo capitolo ti mostrerò come proteggere il tuo sito web con SSL.

Esegui i seguenti comandi sul tuo server per abilitare il supporto SSL (https://). Corri:

a2enmod ssl
a2ensite default-ssl

che abilita il modulo SSL e aggiunge un collegamento simbolico nella cartella /etc/apache2/sites-enabled al file /etc/apache2/sites-available/default-ssl.conf per includerlo nella configurazione di apache attiva. Quindi riavvia Apache per abilitare la nuova configurazione:

systemctl restart apache2

Ora prova la connessione SSL aprendo https://192.168.1.100 in un browser web.

Riceverai un avviso SSL poiché il certificato SSL del server è un certificato SSL "autofirmato", ciò significa che il browser non si fida di questo certificato per impostazione predefinita e devi prima accettare l'avviso di sicurezza. Dopo aver accettato l'avviso, vedrai la pagina predefinita di Apache.

Il "Green Lock" chiuso davanti all'URL nel browser mostra che la connessione è crittografata.

Esistono due modi per eliminare l'avviso SSL:sostituire il certificato SSL autofirmato /etc/ssl/certs/ssl-cert-snakeoil.pem con un certificato SSL firmato ufficialmente acquistato da un'autorità SSL o ottenere un certificato SSL gratuito di Let's encrypt, che descriverò nel capitolo 8.

8. Ottieni un certificato SSL gratuito da Let's Encrypt

Il primo passaggio per proteggere il sito Web con un certificato SSL Let's Encrypt consiste nell'installare il pacchetto python-letsencrypt-apache. Esegui il seguente comando:

apt-get -y install python-letsencrypt-apache

Nel passaggio successivo, richiederemo un certificato SSL a Let's Encrypt, durante questo processo, il server Let's Encrypt tenterà di connettersi al tuo server tramite il nome di dominio che fornisci al comando letencrypt. È importante che questo nome di dominio punti già al tuo server in DNS in modo che il sito Web sia già raggiungibile con il suo nome di dominio sulla porta 80 (http). Se il sito Web non è raggiungibile da Internet, la creazione del certificato SSL Let's Encrypt non riuscirà.

Prima di poter iniziare a creare il certificato SSL, imposta il nome di dominio nel file di configurazione di vhost. Apri il file vhost predefinito con un editor:

nano /etc/apache2/sites-available/000-default.conf

e aggiungi la riga:

ServerName example.com

Proprio sotto la riga "DocumentRoot". Sostituisci example.com con il nome di dominio del tuo sito web.

Quindi crea il certificato SSL con questo comando:

letsencrypt --apache -d example.com

Sostituisci di nuovo example.com con il tuo nome di dominio qui. Il comando avvierà una procedura guidata che ti pone diverse domande.

Immettere l'indirizzo e-mail a cui è possibile contattare l'amministratore responsabile di questo sito Web.

Accetta i termini e le condizioni dell'autorità SSL Let's Encrypt.

Scegli se vuoi reindirizzare automaticamente le richieste non SSL a https://. Seleziono sì qui per evitare problemi di contenuti duplicati quando il sito Web è disponibile come versione http:// e https://.

Il certificato SSL è stato emesso correttamente.

Quando accedi al sito Web ora con un browser, verrai reindirizzato automaticamente a SSL e il lucchetto verde davanti alla barra degli URL nel browser mostra che stiamo utilizzando un certificato SSL affidabile.

8.1 Crittografiamo il rinnovo automatico

I certificati Let's Encrypt SSL sono validi solo per un breve periodo di 80 giorni. Pertanto imposteremo ora un cronjob per rinnovare automaticamente il certificato SSL quando necessario. Il comando è 'letsencrypt rinnova'.

Imposta un cronjob per il rinnovo automatico di LE. Corri:

crontab -e

per aprire il crontab radice in un editor. Inserisci la seguente riga alla fine del file:

0 1 * * * /usr/bin/letsencrypt renew &> /dev/null

salva il file, questo attiverà il cronjob. Questo cronjob chiamerà il comando di rinnovo Let's Encrypt ogni notte all'una di notte. Il comando rinnoverà il certificato SSL solo quando necessario (30 giorni prima della scadenza), non ci sono problemi a eseguirlo ogni notte.

9. Installa phpMyAdmin

phpMyAdmin è un'interfaccia web attraverso la quale puoi gestire i tuoi database MySQL. È una buona idea installarlo:

apt-get -y install phpmyadmin

IMPORTANTE:il programma di installazione apt ti farà diverse domande ora, una delle quali è selezionare il tipo di server web. Un errore comune è che il tipo di server web è solo evidenziato ma non selezionato. Per selezionare un elemento in un menu apt devi premere la barra spaziatrice sulla tastiera dopo aver navigato sull'elemento con i tasti tab o cursore. Evidenziarlo non basta!

Vedrai le seguenti domande:

Web server to configure automatically: <-- Select the option: apache2
Configure database for phpmyadmin with dbconfig-common? <-- Yes
MySQL application password for phpmyadmin: <-- Press enter, apt will create a random password automatically.

9.1 Accesso root a PHPMyAdmin con MariaDB

Il passaggio seguente è richiesto solo per le installazioni di MariaDB, se utilizzi MySQL 5.7, salta questo passaggio.

MariaDB abilita un plug-in chiamato "unix_socket" per l'utente root per impostazione predefinita, questo plug-in impedisce che l'utente root possa accedere a PHPMyAdmin e che le connessioni TCP a MySQL funzionino per l'utente root. Per ottenere un utente con privilegi per creare altri utenti e database in PHPMyAdmin, creerò un nuovo utente MySQL con il nome "admin" con gli stessi privilegi dell'utente root.

Accedi al database MySQL come utente root sulla shell:

mysql -u root

Crea un nuovo utente con il nome "admin" e la password "howtoforge". Sostituisci la password "howtoforge" con una password sicura nei comandi seguenti!

CREATE USER 'admin'@'localhost' IDENTIFIED BY 'howtoforge';
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'localhost' WITH GRANT OPTION;
FLUSH PRIVILEGES;
exit

Successivamente, puoi accedere a phpMyAdmin da http://192.168.1.100/phpmyadmin/:

10 Download dell'immagine della macchina virtuale di questo tutorial

Questo tutorial è disponibile come immagine della macchina virtuale pronta per l'uso in formato ovf/ova compatibile con VMWare e Virtualbox. L'immagine della macchina virtuale utilizza i seguenti dettagli di accesso:

Accesso SSH/Shell

Nome utente:amministratore
Password:howtoforge

Questo utente dispone dei diritti sudo.

Accesso MySQL

Nome utente:root
Password:howtoforge

L'IP della VM è 192.168.1.100, può essere modificato nel file /etc/network/interfaces. Si prega di modificare tutte le password di cui sopra per proteggere la macchina virtuale.

  • Apache:http://httpd.apache.org/
  • PHP:http://www.php.net/
  • MySQL:http://www.mysql.com/
  • MariaDB:https://mariadb.com/
  • Ubuntu:http://www.ubuntu.com/
  • phpMyAdmin:http://www.phpmyadmin.net/

Ubuntu
  1. Installazione WordPress su Ubuntu Linux con Apache e MySQL

  2. Ubuntu 14.10 Tutorial server LAMP con Apache 2, PHP 5 e MySQL (MariaDB)

  3. Tutorial del server LAMP di Ubuntu 15.04 con Apache 2, PHP 5 e MariaDB (invece di MySQL)

  4. Come installare Apache, MySQL, PHP (LAMP) su Ubuntu 16.04 LTS

  5. Come configurare Opencart con LAMP (PHP, Apache, Mariadb) su Ubuntu 20.04

Installa lo stack Apache, MySQL, PHP (LAMP) su Ubuntu 18.04 LTS

Installa Apache, MySQL, PHP (stack LAMP) su Ubuntu 20.04 LTS

Come installare Apache, MySQL, PHP su Ubuntu 18.04 LTS

Come Installare Linux, Apache, MySQL e PHP (LAMP) su un Cloud Server Ubuntu 20.04

Come installare Linux, Apache, MySQL e PHP (LAMP) su un server cloud Ubuntu 12.04

Come installare LAMP su Ubuntu 15.10 (Linux, Apache, MySQL e PHP)