GNU/Linux >> Linux Esercitazione >  >> Ubuntu

Come installare e configurare Caddy Web Server con PHP e MariaDB su Ubuntu 20.04

Caddy Web Server è un moderno server web open source scritto in linguaggio GO. Non ha dipendenze e funziona da un file binario statico e genera e rinnova automaticamente i certificati SSL. Può funzionare come un file server statico, un proxy inverso scalabile o un potente server dinamico e può essere ampliato tramite plug-in. Include anche il supporto per HTTP/2 e protocolli sperimentali HTTP/3.

In questo tutorial, installerai e configurerai Caddy per funzionare insieme a PHP e MariaDB su un server basato su Ubuntu 20.04.

Prerequisiti

  • Un server Ubuntu 20.04 con un account non root con privilegi sudo.
  • Un nome di dominio completamente registrato puntato all'indirizzo IP del tuo server.

Passaggio 1:configurazione del firewall

Se stai utilizzando UFW (Uncomplicated Firewall), devi configurarlo per consentire l'accesso alle porte HTTP e HTTPS affinché il server funzioni.

Controlla lo stato del firewall.

$ sudo ufw status

Dovresti vedere qualcosa di simile al seguente.

Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)

Consenti porte HTTP e HTTPs.

$ sudo ufw allow http
$ sudo ufw allow https

Ricontrolla lo stato per confermare.

$ sudo ufw status
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 Caddy

Esistono diversi modi per installare Caddy che include un'installazione Docker, utilizzando repository ufficiali o costruendo dal sorgente. Il metodo build from source è utile se desideri funzionalità che possono essere aggiunte solo tramite un modulo/plugin di terze parti.

Ai fini di questo tutorial, continueremo a utilizzare il repository Caddy ufficiale per i sistemi basati su Ubuntu/Debian.

Aggiungi il repository all'elenco.

$ echo "deb [trusted=yes] https://apt.fury.io/caddy/ /" | sudo tee -a /etc/apt/sources.list.d/caddy-fury.list
$ sudo apt update

Questo creerà un file di repository caddy nel /etc/apt/sources.list.d directory con la posizione del repository di Caddy.

Installa Caddy.

$ sudo apt install caddy

Questo installerà ed eseguirà automaticamente il server web Caddy. Apri http:// nel tuo browser e dovresti essere accolto dalla seguente pagina.

Fase 3 - Installa PHP

Installa il repository PHP di Ondrej.

$ sudo add-apt-repository ppa:ondrej/php

Installa PHP 7.4 insieme ad alcuni pacchetti aggiuntivi.

$ sudo apt install php-cli php-fpm php-mysql

Controlla se PHP funziona correttamente.

$ php --version

Dovresti vedere un output simile.

PHP 7.4.6 (cli) (built: May 14 2020 10:03:35) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
    with Zend OPcache v7.4.6, Copyright (c), by Zend Technologies

Passaggio 4:installa MariaDB

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

Aggiungi il repository ufficiale di Mariadb. Puoi optare per un mirror diverso che è più vicino alla posizione del tuo server dalla pagina del repository di MariaDB.

$ sudo apt-key adv --fetch-keys 'https://mariadb.org/mariadb_release_signing_key.asc'
$ sudo add-apt-repository 'deb [arch=amd64] http://mirror.lstn.net/mariadb/repo/10.4/ubuntu f
ocal main'

Per installare MariaDB emettere il seguente comando.

$ sudo apt install mariadb-server

Verifica se MariaDB è stata installata correttamente.

$ mysql --version

Dovresti vedere il seguente output.

mysql  Ver 15.1 Distrib 10.4.13-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2

Abilita il servizio MariaDB.

$ sudo systemctl enable mariadb

Passaggio 5 - Configura MariaDB

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

$ sudo mysql_secure_installation

Con MariaDB 10.4, ora ti verrà chiesto se usare la password di root o unix_socket collegare. Il unix_socket plugin 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 unix_socket plugin per questo tutorial. Puoi ancora utilizzare phpMyAdmin tramite qualsiasi utente che crei per i tuoi database.

Premendo Invio si sceglie l'opzione di default (quella che è maiuscola, in questo caso Y).

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!

Accedi alla shell SQL di MariaDB.

$ sudo mysql

Inserisci la tua password di root quando richiesto.

Crea un database di prova e un utente con autorizzazione di accesso. Sostituisci database e user con la tua scelta. Sostituisci password con una password complessa.

CREATE DATABASE testdb;
CREATE USER 'user' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON testdb.* TO 'user';

Esci da MySQL Shell.

exit

Passaggio 6:configura il caddy

Caddy può essere configurato in diversi modi:chiamate API, file JSON o un Caddyfile. Caddyfile è il modo più semplice per configurare Caddy che useremo nel nostro tutorial.

Prima di configurare Caddy, dobbiamo creare la directory principale per il nostro sito.

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

-p flag crea anche le directory principali mancanti.

Abbiamo anche bisogno di creare una directory per memorizzare i file di registro per Caddy.

$ sudo mkdir /var/log/caddy

Il server Caddy durante l'installazione crea un utente caddy che svolge i suoi compiti per esso. Dobbiamo concedere i permessi alla directory di registro in modo che Caddy possa accedervi e scriverci.

$ sudo chown -R caddy:caddy /var/log/caddy

Durante l'installazione, Caddy ha generato un Caddyfile predefinito in /etc/caddy/Caddyfile . Aprilo.

$ sudo nano /etc/caddy/Caddyfile

Dovrebbe essere simile al seguente.

# The Caddyfile is an easy way to configure your Caddy web server.
#
# Unless the file starts with a global options block, the first
# uncommented line is always the address of your site.
#
# To use your own domain name (with automatic HTTPS), first make
# sure your domain's A/AAAA DNS records are properly pointed to
# this machine's public IP, then replace the line below with your
# domain name.
:80

# Set this path to your site's directory.
root * /usr/share/caddy

# Enable the static file server.
file_server

# Another common task is to set up a reverse proxy:
# reverse_proxy localhost:8080

# Or serve a PHP site through php-fpm:
# php_fastcgi localhost:9000

# Refer to the Caddy docs for more information:
# https://caddyserver.com/docs/caddyfile

:80 dice a Caddy di servire tutto sulla porta numero 80. root imposta il percorso per la home directory del tuo sito. file_server consente a Caddy di funzionare come un file server statico.

Sostituisci il codice sopra con il codice seguente.

{
	experimental_http3
}
example.com {
    root * /var/www/example.com/html
    log {
        output file /var/log/caddy/example.com.access.log {
        	roll_size 3MiB
	        roll_keep 5
	        roll_keep_for 48h
        }
        format console
    }
    encode gzip zstd
    php_fastcgi unix//run/php/php7.4-fpm.sock
   
    tls [email protected] {
    	protocols tls1.2 tls1.3    	
    }
}

Esaminiamo tutte le sezioni del Caddyfile di seguito.

  • Il primo blocco in qualsiasi Caddyfile è un blocco globale a meno che tu non specifichi un nome host che poi diventa un blocco del sito. Un blocco globale contiene le direttive che vengono applicate a tutti i siti ospitati nel server. Nel nostro esempio, abbiamo abilitato il supporto per il protocollo sperimentale HTTP/3. Il blocco globale è completamente facoltativo e puoi sempre avviare il tuo Caddyfile direttamente con il blocco del sito.
  • Il blocco successivo è il blocco del sito. Se hai solo 1 sito sul tuo server, non è necessario racchiudere la tua configurazione in un blocco, ma se hai intenzione di ospitare più siti, dovresti ospitare la configurazione di ciascun sito nel proprio blocco. Un blocco di sito è contrassegnato da parentesi graffe. Ogni blocco del sito inizia con il nome host del sito.
  • log abilita e configura la registrazione delle richieste HTTP. Senza il log direttiva, Caddy non registrerà nulla. output configura dove scrivere il file di registro. format descrive come codificare o formattare i registri. La console formatta la voce di registro per la leggibilità umana.
  • encode la direttiva qui abilita la compressione Gzip e Zstandard per il sito.
  • php_fastcgi invia le richieste a un server PHP FastCGI come php-fpm . Qui stiamo ascoltando le richieste su un socket Unix.
  • tls block configura le impostazioni relative ai certificati SSL e alla sicurezza. Qui abbiamo abilitato il supporto per entrambi i protocolli TLSv1.2 e TLSv1.3. Per impostazione predefinita, Caddy supporta TLS v1.2 pronto all'uso. Caddy genera anche certificati SSL automaticamente per tutti i siti. Se non desideri che Caddy generi SSL per te, puoi farlo utilizzando l'indirizzo IP invece del nome host o specificando l'URL completo, ad esempio http://example.com. In questi casi, Caddy non genererà il certificato SSL.

Finora abbiamo trattato le basi assolute della scrittura di un Caddyfile che dovrebbe aiutarti a iniziare. Puoi leggere di più a riguardo nella documentazione ufficiale.

Passaggio 7 - Configura PHP

Ora che il nostro Caddyfile è pronto, è il momento di configurare PHP.

Innanzitutto, dobbiamo cambiare il nome utente per il processo PHP. Apri il file /etc/php-fpm.d/www.conf .

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

Trova il user=www-data e group=www-data righe nel file e cambiale in caddy .

...
; 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 = caddy
; RPM: Keep a group allowed to write in log dir.
group = caddy
...

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

listen.owner = caddy
listen.group = caddy

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

Riavvia il processo PHP-fpm.

$ sudo systemctl restart php7.4-fpm

Passaggio 8:avvia il sito dimostrativo

Ora che abbiamo creato un Caddyfile e configurato PHP per l'esecuzione con il server, è il momento di creare e avviare un sito Web demo.

Assicurati che il tuo nome di dominio sia puntato all'indirizzo IP del server.

Riavvia il server Caddy per applicare le modifiche al Caddyfile che abbiamo creato sopra.

$ sudo systemctl restart caddy

Controlla lo stato del server Caddy per assicurarti che funzioni correttamente.

$ sudo systemctl status caddy
? caddy.service - Caddy
     Loaded: loaded (/lib/systemd/system/caddy.service; enabled; vendor preset: enabled)
     Active: active (running) since Wed 2020-05-20 07:09:25 UTC; 2s ago
       Docs: https://caddyserver.com/docs/
   Main PID: 25410 (caddy)
      Tasks: 7 (limit: 1074)
     Memory: 17.8M
     CGroup: /system.slice/caddy.service
             ??25410 /usr/bin/caddy run --environ --config /etc/caddy/Caddyfile

May 20 07:09:25 example.com caddy[25410]: 2020/05/20 07:09:25 [INFO][example.com] Obtain: Lock acquired; proceeding...
May 20 07:09:25 example.com caddy[25410]: 2020/05/20 07:09:25 [INFO][cache:0xc0006f8cd0] Started certificate maintenance routine
May 20 07:09:25 example.com caddy[25410]: 2020/05/20 07:09:25 [INFO] acme: Registering account for [email protected]
May 20 07:09:26 example.com caddy[25410]: 2020/05/20 07:09:26 [INFO][example.com] Waiting on rate limiter...
May 20 07:09:26 example.com caddy[25410]: 2020/05/20 07:09:26 [INFO][example.com] Done waiting
May 20 07:09:26 example.com caddy[25410]: 2020/05/20 07:09:26 [INFO] [example.com] acme: Obtaining bundled SAN certificate given a CSR
May 20 07:09:27 example.com caddy[25410]: 2020/05/20 07:09:27 [INFO] [example.com] AuthURL: https://acme-v02.api.letsencrypt.org/acme/authz-v3/4696123289
May 20 07:09:27 example.com caddy[25410]: 2020/05/20 07:09:27 [INFO] [example.com] acme: use tls-alpn-01 solver
May 20 07:09:27 example.com caddy[25410]: 2020/05/20 07:09:27 [INFO] [example.com] acme: Trying to solve TLS-ALPN-01
May 20 07:09:27 example.com caddy[25410]: 2020/05/20 07:09:27 http: TLS handshake error from 127.0.0.1:39466: EOF

Puoi vedere dall'alto che Caddy ha generato automaticamente il certificato quando abbiamo riavviato il server per la prima volta dopo aver creato il Caddyfile.

Creiamo una pagina di test per verificare che Caddy possa eseguire il rendering di PHP e connettersi al database MariaDB.

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

Incolla il codice seguente nell'editor. Sostituisci "user" e "password" campi con le credenziali MariaDB che hai creato in precedenza.

<html>
<head>
    <title>Caddy Demo Site</title>
    <style type="text/css">
        #wrap {
            width: 900px;
            margin: 0 auto;
        }
    </style>
</head>
<body id="wrap">
    <h2>Caddy Demo Site</h2>
    <?php echo '<p>Hello,</p>';

    // Define PHP variables for the MySQL connection.
    $servername = "localhost";
    $username = "user";
    $password = "password";

    // Create a MySQL connection.
    $conn = mysqli_connect($servername, $username, $password);

    // Report if the connection fails or is successful.
    if (!$conn) {
        exit('<p>Your connection has failed.<p>' .  mysqli_connect_error());
    }
    echo '<p>You have connected successfully.</p>';
    ?>
</body>
</html>

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

Visita https://example.com/test.php in un browser web. Dovresti ottenere la seguente pagina.

Se vedi un messaggio di errore o se la pagina non si carica affatto, ricontrolla la tua configurazione

Rimuovi il file di prova una volta che sei soddisfatto.

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

Conclusione

Questo conclude il nostro tutorial in cui abbiamo installato il server web Caddy insieme a PHP e MariaDB SQL. Se hai domande, chiedile nei commenti qui sotto.


Ubuntu
  1. Come installare e configurare il server DHCP su Ubuntu 20.04

  2. Come installare il server Web Cherokee con PHP5 e MySQL su Ubuntu 11.04

  3. Come installare e configurare Mariadb 10 in Ubuntu 20.04

  4. Come installare il server Web OpenLiteSpeed ​​PHP e MariaDB su Ubuntu 20.10

  5. Come installare e configurare il server Web Apache su Ubuntu 13.10

Come installare e configurare DHCP su Ubuntu 18.04

Come installare e configurare Apache Web Server su Ubuntu

Come installare Lighttpd con PHP e MariaDB su Ubuntu 15.04

Come installare Lighttpd con PHP e MariaDB su Ubuntu 16.04 LTS

Come installare il server Web OpenLiteSpeed ​​con MariaDB e PHP

Come installare e configurare Caddy Web Server con PHP su Rocky Linux 8