Ricerca nel sito web

Come installare lo stack Linux, Apache, MariaDB, PHP (LAMP) su Debian 10


introduzione

Uno stack LAMP è un gruppo di software open source generalmente installati insieme per consentire a un server di ospitare siti web dinamici e app web. Questo termine è un acronimo che rappresenta il sistema operativo Linux, con il web server Apache. I dati del sito vengono archiviati in un database MariaDB e il contenuto dinamico viene elaborato da PHP.

Sebbene questo stack software in genere includa MySQL come sistema di gestione del database, alcune distribuzioni Linux, tra cui Debian, utilizzano MariaDB come sostituto immediato di MySQL.

In questa guida installerai uno stack LAMP su un server Debian 10, utilizzando MariaDB come sistema di gestione del database.

Prerequisiti

Per seguire questo tutorial, avrai bisogno di un server Debian 10 con un account utente abilitato per sudo non root e un firewall di base. Questo può essere configurato usando la nostra guida alla configurazione iniziale del server per Debian 10.

Passaggio 1: installazione di Apache e aggiornamento del firewall

Il server Web Apache è tra i server Web più popolari al mondo. È ben documentato ed è stato ampiamente utilizzato per gran parte della storia del Web, il che lo rende un'ottima scelta predefinita per l'hosting di un sito Web.

Inizia aggiornando la cache del gestore pacchetti. Se è la prima volta che utilizzi sudo all'interno di questa sessione, ti verrà chiesto di fornire la tua password utente per confermare che hai i privilegi corretti per gestire i pacchetti di sistema con apt codice>:

  1. sudo apt update

Quindi installa Apache con quanto segue:

  1. sudo apt install apache2

Questo comando richiede di confermare l'installazione di Apache. Conferma premendo Y, quindi INVIO. Una volta completata l'installazione, è necessario modificare le impostazioni del firewall. Supponendo di aver seguito le istruzioni di configurazione iniziale del server per installare e abilitare il firewall UFW, assicurati che il tuo firewall consenta il traffico HTTP e HTTPS.

Su Debian 10, UFW viene caricato con i profili delle app che puoi utilizzare per regolare le impostazioni del firewall. Visualizza l'elenco completo dei profili dell'applicazione eseguendo:

  1. sudo ufw app list

I profili WWW vengono utilizzati per gestire le porte utilizzate dai server web:

Output
Available applications: . . . WWW WWW Cache WWW Full WWW Secure . . .

Se esamini il profilo WWW Full, mostra che abilita il traffico alle porte 80 e 443:

  1. sudo ufw app info "WWW Full"
Output
Profile: WWW Full Title: Web Server (HTTP,HTTPS) Description: Web Server (HTTP,HTTPS) Ports: 80,443/tcp

Consenti traffico HTTP e HTTPS in entrata per questo profilo:

  1. sudo ufw allow in "WWW Full"

Puoi verificare che tutto sia andato come previsto visitando l'indirizzo IP pubblico del tuo server nel tuo browser web:

http://your_server_ip

Questo restituirà la pagina web predefinita di Debian 10 Apache, che è lì per scopi informativi e di test:

Se il tuo browser restituisce questa pagina, allora il tuo server web è ora correttamente installato e accessibile attraverso il tuo firewall.

Come trovare l'indirizzo IP pubblico del tuo server

Se non sai qual è l'indirizzo IP pubblico del tuo server, ci sono diversi modi per trovarlo. Di solito, questo è l'indirizzo che usi per connetterti al tuo server tramite SSH.

Esistono diversi modi per eseguire questa operazione dalla riga di comando. Innanzitutto, puoi utilizzare gli strumenti iproute2 per ottenere il tuo indirizzo IP eseguendo:

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

Ciò restituirà due o tre righe indietro. Sono tutti indirizzi corretti, ma il tuo computer potrebbe essere in grado di usarne solo uno, quindi sentiti libero di provarli tutti.

Un metodo alternativo consiste nell'usare l'utility curl per contattare una parte esterna per dirti come vede il tuo server. Puoi eseguire il seguente comando e chiedere a un server specifico qual è il tuo indirizzo IP:

Dato che Debian 10 non ha curl come predefinito, dovrai prima installarlo:

  1. sudo apt install curl

Quindi esegui il seguente comando e chiedi a un server specifico qual è il tuo indirizzo IP:

  1. curl http://icanhazip.com

Indipendentemente dal metodo, scrivi il tuo indirizzo IP nel tuo browser web per verificare che il tuo server stia eseguendo la pagina Apache predefinita.

Passaggio 2: installazione di MariaDB

Ora che hai un server web attivo e funzionante, devi installare il sistema di database per poter archiviare e gestire i dati per il tuo sito.

In Debian 10, il metapacchetto mysql-server, tradizionalmente utilizzato per installare il server MySQL, è stato sostituito da default-mysql-server. Questo metapacchetto fa riferimento a MariaDB, un fork della comunità del server MySQL originale di Oracle, ed è attualmente il server di database predefinito compatibile con MySQL disponibile sui repository di gestori di pacchetti basati su Debian.

Per una compatibilità a lungo termine, tuttavia, si consiglia invece di utilizzare il metapacchetto di installare MariaDB utilizzando il pacchetto effettivo del programma, mariadb-server.

Per installare il software MariaDB, eseguire:

  1. sudo apt install mariadb-server

Al termine dell'installazione, si consiglia di eseguire uno script di sicurezza preinstallato con MariaDB. Questo script rimuoverà alcune impostazioni predefinite non sicure e bloccherà l'accesso al tuo sistema di database. Avvia lo script interattivo eseguendo:

  1. sudo mysql_secure_installation

Questo script ti guiderà attraverso una serie di prompt in cui puoi apportare alcune modifiche alla configurazione di MariaDB. Il primo prompt ti chiederà di inserire la password root del database corrente. Questo non deve essere confuso con la root di sistema. L'utente root del database è un utente amministrativo con privilegi completi sul sistema del database. Poiché hai recentemente installato MariaDB e non hai ancora apportato modifiche alla configurazione, questa password sarà vuota, quindi premi INVIO al prompt.

Il prompt successivo ti chiede se desideri impostare una password di root del database. Poiché MariaDB utilizza uno speciale metodo di autenticazione per l'utente root che in genere è più sicuro rispetto all'utilizzo di una password, non è necessario impostarlo ora. Premi N e poi INVIO.

Da lì, puoi premere Y e poi INVIO per accettare i valori predefiniti per tutte le domande successive. Ciò rimuoverà gli utenti anonimi e il database di test, disabiliterà l'accesso root remoto e caricherà queste nuove regole in modo che MariaDB rispetti immediatamente le modifiche apportate.

Quando hai finito, accedi alla console MariaDB:

  1. sudo mariadb

Questo si collegherà al server MariaDB come utente root del database amministrativo, che viene dedotto dall'uso di sudo durante l'esecuzione di questo comando. Dovresti ricevere il seguente output:

Output
Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 42 Server version: 10.3.36-MariaDB-0+deb10u2 Debian 10 Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]>

Si noti che non è necessario fornire una password per connettersi come utente root. Funziona perché il metodo di autenticazione predefinito per l'utente MariaDB amministrativo è unix_socket invece di password. Anche se all'inizio questo potrebbe sembrare un problema di sicurezza, rende il server del database più sicuro perché gli unici utenti autorizzati ad accedere come utente MariaDB root sono gli utenti di sistema con privilegi sudo che si connettono dalla console o tramite un'applicazione in esecuzione con gli stessi privilegi. In termini pratici, ciò significa che non sarai in grado di utilizzare l'utente root del database amministrativo per connetterti dalla tua applicazione PHP.

Per una maggiore sicurezza, è meglio disporre di account utente dedicati con privilegi meno estesi impostati per ogni database, soprattutto se si prevede di avere più database ospitati sul proprio server.

Puoi uscire dalla console MariaDB con quanto segue:

  1. exit

Il tuo server MariaDB è ora installato e protetto. Successivamente, installerai PHP, il componente finale nello stack LAMP.

Passaggio 3: installazione di PHP

Hai installato Apache per servire i tuoi contenuti e installato MariaDB per archiviare e gestire i tuoi dati. PHP è il componente della configurazione che elaborerà il codice per visualizzare il contenuto dinamico all'utente finale. Può eseguire script, connettersi ai tuoi database MariaDB per ottenere informazioni e consegnare il contenuto elaborato al tuo server web per la visualizzazione.

Oltre al pacchetto php, avrai bisogno di php-mysql, un modulo PHP che consente a PHP di comunicare con database basati su MySQL, come MariaDEB. Avrai anche bisogno di libapache2-mod-php per abilitare Apache a gestire i file PHP. I pacchetti PHP principali verranno installati automaticamente come dipendenze.

Per installare questi pacchetti, eseguire il seguente comando:

  1. sudo apt install php libapache2-mod-php php-mysql

Una volta completata l'installazione, puoi verificare la tua versione PHP con il seguente comando:

  1. php -v
Output
PHP 7.3.31-1~deb10u2 (cli) (built: Dec 15 2022 09:39:10) ( NTS ) Copyright (c) 1997-2018 The PHP Group Zend Engine v3.3.31, Copyright (c) 1998-2018 Zend Technologies with Zend OPcache v7.3.31-1~deb10u2, Copyright (c) 1999-2018, by Zend Technologies

Nella maggior parte dei casi, vorrai modificare il modo in cui Apache serve i file. Attualmente, se un utente richiede una directory dal server, Apache cercherà prima un file chiamato index.html. Per indicare al server web di preferire i file PHP rispetto ad altri, puoi impostare Apache in modo che cerchi prima un file index.php.

Per fare ciò, esegui il seguente comando per aprire il file dir.conf nel tuo editor di testo preferito con privilegi di root. In questo esempio, stiamo usando nano:

  1. sudo nano /etc/apache2/mods-enabled/dir.conf

I contenuti saranno i seguenti:

<IfModule mod_dir.c>
    DirectoryIndex index.html index.cgi index.pl index.php index.xhtml index.htm
</IfModule>

Sposta il file indice PHP nella prima posizione dopo la specifica DirectoryIndex, come nell'esempio seguente:

<IfModule mod_dir.c>
    DirectoryIndex index.php index.html index.cgi index.pl index.xhtml index.htm
</IfModule>

Quando hai finito, salva e chiudi il file. Se stai usando nano, puoi farlo premendo CTRL+X, quindi Y e INVIO per Confermare.

Ora ricarica la configurazione di Apache:

  1. sudo systemctl reload apache2

Puoi controllare lo stato del servizio apache2 con systemctl status:

  1. sudo systemctl status apache2
Sample Output
● apache2.service - The Apache HTTP Server Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: Active: active (running) since Fri 2023-01-20 22:21:24 UTC; 2min 12s ago Docs: https://httpd.apache.org/docs/2.4/ Process: 13076 ExecStart=/usr/sbin/apachectl start (code=exited, status=0/SUCC Process: 13097 ExecReload=/usr/sbin/apachectl graceful (code=exited, status=0/ Main PID: 13080 (apache2) Tasks: 6 (limit: 4915) Memory: 13.7M CGroup: /system.slice/apache2.service ├─13080 /usr/sbin/apache2 -k start ├─13101 /usr/sbin/apache2 -k start ├─13102 /usr/sbin/apache2 -k start ├─13103 /usr/sbin/apache2 -k start ├─13104 /usr/sbin/apache2 -k start └─13105 /usr/sbin/apache2 -k start

A questo punto, il tuo stack LAMP è completamente operativo, ma prima di poter testare la tua configurazione con uno script PHP, è meglio impostare un Apache Virtual Host adeguato per conservare i file e le cartelle del tuo sito web. Lo configurerai nel passaggio successivo.

Passaggio 4: creazione di un host virtuale per il tuo sito web

Quando utilizzi il server web Apache, puoi creare host virtuali (simili ai blocchi server in Nginx) per incapsulare i dettagli di configurazione e ospitare più di un dominio da un singolo server. In questa sezione, imposterai un dominio chiamato tuo_dominio, ma dovresti sostituirlo con il tuo nome di dominio.

Nota: se utilizzi DigitalOcean come provider DNS, consulta la nostra documentazione del prodotto per istruzioni dettagliate su come impostare un nuovo nome di dominio e indirizzarlo al tuo server

Per impostazione predefinita, Apache serve il suo contenuto da una directory situata in /var/www/html, utilizzando la configurazione contenuta in /etc/apache2/sites-available/000-default.conf. Invece di modificare il file di configurazione del sito Web predefinito, creerai un nuovo host virtuale per testare il tuo ambiente PHP. Gli host virtuali ti consentono di mantenere più siti Web ospitati su un singolo server Apache. Creerai anche una struttura di directory all'interno di /var/www per il sito tuo_dominio, lasciando /var/www/html come directory predefinita da servire se un client la richiesta non corrisponde ad altri siti.

Inizia creando la directory web principale per tuo_dominio come segue:

  1. sudo mkdir /var/www/your_domain

Successivamente, assegna la proprietà della directory con la variabile di ambiente $USER, che farà riferimento al tuo attuale utente di sistema:

  1. sudo chown -R $USER:$USER /var/www/your_domain

Quindi, apri un nuovo file di configurazione nella directory sites-available di Apache utilizzando il tuo editor di testo preferito. nano viene utilizzato nel seguente esempio:

  1. sudo nano /etc/apache2/sites-available/your_domain.conf

Questo crea un nuovo file vuoto. Aggiungi la seguente configurazione essenziale con il tuo nome di dominio:

<VirtualHost *:80>
    ServerName your_domain
    ServerAlias www.your_domain 
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/your_domain
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Con questa configurazione VirtualHost, stai dicendo ad Apache di servire tuo_dominio utilizzando /var/www/tuo_dominio> come directory principale del web. Se desideri testare Apache senza un nome di dominio, puoi rimuovere o commentare le opzioni ServerName e ServerAlias aggiungendo un cancelletto (#) carattere all'inizio delle righe di ogni opzione.

Salva e chiudi il file quando hai finito.

Ora usa a2ensite per abilitare questo host virtuale:

  1. sudo a2ensite your_domain

Potresti voler disabilitare il sito Web predefinito installato con Apache. Questo è necessario se non stai utilizzando un nome di dominio personalizzato, perché in questo caso la configurazione predefinita di Apache sovrascriverebbe il tuo host virtuale. Per disabilitare il sito Web predefinito di Apache, esegui:

  1. sudo a2dissite 000-default

Per assicurarti che il tuo file di configurazione non contenga errori di sintassi, puoi eseguire:

  1. sudo apache2ctl configtest

Infine, ricarica Apache in modo che queste modifiche abbiano effetto:

  1. sudo systemctl reload apache2

Successivamente, creerai uno script PHP per verificare che PHP sia installato e configurato correttamente sul tuo server.

Passaggio 5: test dell'elaborazione PHP sul server Web

Ora che disponi di una posizione personalizzata per ospitare i file e le cartelle del tuo sito Web, crea uno script di test PHP per confermare che Apache è in grado di gestire ed elaborare le richieste di file PHP.

Inizia creando un nuovo file chiamato info.php all'interno della tua cartella radice web personalizzata:

  1. nano /var/www/your_domain/info.php

Questo aprirà un file vuoto. Aggiungi il seguente testo, che è codice PHP valido, all'interno del file:

<?php
phpinfo();

Quando hai finito, salva e chiudi il file.

Per testare lo script, vai al tuo browser web e accedi al nome di dominio o all'indirizzo IP del tuo server, seguito dal nome dello script, che in questo caso è info.php:

http://your_domain/info.php

Ecco un esempio della pagina Web PHP predefinita:

Questa pagina fornisce alcune informazioni di base sul tuo server dal punto di vista di PHP. È utile per il debug e per garantire che le impostazioni vengano applicate correttamente.

Se ricevi questa pagina nel tuo browser, l'installazione di PHP funziona come previsto.

Dopo aver controllato le informazioni rilevanti sul tuo server PHP attraverso quella pagina, è meglio rimuovere il file che hai creato in quanto contiene informazioni sensibili sul tuo ambiente PHP e sul tuo server Debian. Puoi usare rm per farlo:

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

Puoi sempre ricreare questa pagina se hai bisogno di accedere nuovamente alle informazioni in un secondo momento.

Passaggio 6: test della connessione al database da PHP (facoltativo)

Se vuoi verificare se PHP è in grado di connettersi a MariaDB ed eseguire query sul database, puoi creare una tabella di test con dati di test ed eseguire query per il suo contenuto da uno script PHP. Prima di farlo, devi creare un database e un nuovo utente MariaDB opportunamente configurato per accedervi.

Innanzitutto, connettiti alla console MariaDB utilizzando l'account root:

  1. sudo mariadb

Per creare un nuovo database, esegui il seguente comando dalla tua console MariaDB:

  1. CREATE DATABASE example_database;

Ora crea un nuovo utente e concedigli tutti i privilegi sul database personalizzato che hai creato.

Il seguente comando crea un nuovo utente denominato example_user che si autentica con una password. Stiamo definendo la password di questo utente come password, ma dovresti sostituire questo valore con una password sicura di tua scelta:

  1. CREATE USER 'example_user'@'%' IDENTIFIED BY 'password';

Successivamente, concedi a questo utente l'autorizzazione sul database example_database:

  1. GRANT ALL ON example_database.* TO 'example_user'@'%';

Questo darà all'utente example_user pieni privilegi sul database example_database, impedendo a questo utente di creare o modificare altri database sul tuo server.

Successivamente, svuota i privilegi per assicurarti che siano salvati e disponibili nella sessione corrente:

  1. FLUSH PRIVILEGES;

Successivamente, esci dalla shell MariaDB:

  1. exit

Puoi verificare se il nuovo utente dispone delle autorizzazioni appropriate accedendo nuovamente alla console MariaDB, questa volta utilizzando le credenziali utente personalizzate:

  1. mariadb -u example_user -p

Nota il flag -p in questo comando, che ti chiederà la password utilizzata durante la creazione di example_user. Dopo aver effettuato l'accesso alla console MariaDB, conferma di avere accesso a example_database:

  1. SHOW DATABASES;

Questo ti darà il seguente output:

Output
+--------------------+ | Database | +--------------------+ | example_database | | information_schema | +--------------------+ 2 rows in set (0.000 sec)

Successivamente, crea una tabella di test denominata todo_list. Dalla console MariaDB, esegui la seguente istruzione:

  1. CREATE TABLE example_database.todo_list (
  2. item_id INT AUTO_INCREMENT,
  3. content VARCHAR(255),
  4. PRIMARY KEY(item_id)
  5. );

Inserisci alcune righe di contenuto nella tabella di test. Ripeti il comando successivo alcune volte, utilizzando valori diversi per popolare la tua tabella di test:

  1. INSERT INTO example_database.todo_list (content) VALUES ("My first important item");

Per confermare che i dati sono stati salvati correttamente nella tua tabella, esegui:

  1. SELECT * FROM example_database.todo_list;

Riceverai il seguente output:

Output
+---------+--------------------------+ | item_id | content | +---------+--------------------------+ | 1 | My first important item | | 2 | My second important item | | 3 | My third important item | | 4 | and this one more thing | +---------+--------------------------+ 4 rows in set (0.000 sec)

Dopo aver confermato di avere dati validi nella tabella di test, puoi uscire dalla console MariaDB:

  1. exit

Ora puoi creare lo script PHP che si collegherà a MariaDB e interrogherà i tuoi contenuti. Crea un nuovo file PHP nella tua directory root web personalizzata utilizzando il tuo editor preferito. nano è usato in questo esempio:

  1. nano /var/www/your_domain/todo_list.php

Il seguente script PHP si connette al database MariaDB e interroga il contenuto della tabella todo_list, mostrando i risultati in un elenco. Se c'è un problema con la connessione al database, genererà un'eccezione.

Aggiungi questo contenuto nel tuo script todo_list.php, ricordando di sostituire example_user e password valori con il tuo:

<?php
$user = "example_user";
$password = "password";
$database = "example_database";
$table = "todo_list";

try {
  $db = new PDO("mysql:host=localhost;dbname=$database", $user, $password);
  echo "<h2>TODO</h2><ol>"; 
  foreach($db->query("SELECT content FROM $table") as $row) {
    echo "<li>" . $row['content'] . "</li>";
  }
  echo "</ol>";
} catch (PDOException $e) {
    print "Error!: " . $e->getMessage() . "<br/>";
    die();
}

Salva e chiudi il file al termine delle modifiche.

Ora puoi accedere a questa pagina nel tuo browser web visitando il nome di dominio o l'indirizzo IP pubblico del tuo sito web, seguito da /todo_list.php:

http://your_domain/todo_list.php

Questa pagina web rivelerà al tuo visitatore il contenuto che hai inserito nella tua tabella di test:

Ciò significa che il tuo ambiente PHP è pronto per connettersi e interagire con il tuo server MariaDB.

Conclusione

In questa guida, hai creato una base flessibile per servire siti Web e applicazioni PHP ai tuoi visitatori, utilizzando Apache come server Web e MariaDB come sistema di database.

Come passaggio successivo immediato, dovresti assicurarti che le connessioni al tuo server web siano protette, servendole tramite HTTPS. Per fare ciò, puoi usare How to Install and Use Composer per la gestione delle dipendenze e dei pacchetti in PHP.