Ricerca nel sito web

Installare il server web Caddy su Rocky/AlmaLinux 9|8


Caddy è una piattaforma web potente, facile da usare e open source, utilizzata per servire siti web, applicazioni e servizi. Caddy è scritto nel linguaggio di programmazione Go, rendendolo uno dei server web più veloci nel mercato open source. Si concentra sulla sicurezza, sulle prestazioni e sulla facilità d'uso e può essere utilizzato per progetti semplici come siti statici o per ospitare applicazioni web più complesse.

Perché usare il server web Caddy

  • HTTPS automatico: Caddy gestisce la generazione automatica e il rinnovo dei certificati SSL/TLS per i tuoi siti web.
  • La sua semplicità: Caddy è progettato secondo il principio del rendere tutto semplice. Utilizza un unico file di configurazione semplice e leggibile dall'uomo chiamato Caddyfile
  • Prestazioni Super: Caddy è progettato per utilizzare pochissime risorse hardware pur essendo veloce ed efficiente
  • Architettura modulare: puoi estendere le funzionalità del server web Caddy utilizzando plugin ed estensioni
  • Supporto multipiattaforma: Caddy può funzionare su Linux, Windows, macOS o in container come Docker/Podman
  • Grande comunità: Caddy gode di una comunità attiva e solidale, pronta ad aiutarti mentre inizi.

Nelle sezioni successive vedremo come installare, configurare e utilizzare il server web Caddy nei sistemi Rocky Linux/AlmaLinux o CentOS Stream Linux. Per rendere questo tutorial pratico e dinamico, ospiteremo un sito WordPress con database MariaDB. Per questo tutorial stiamo utilizzando il dominio blog.cloudlabske.com.

Installa il server web Caddy

Per installare il server web Caddy su una macchina Rocky/AlmaLinux/CentOS Steam Linux, dobbiamo installare copr nel nostro sistema:

sudo dnf -y install 'dnf-command(copr)'

Abilita il repository caddy usando copr:

sudo dnf copr enable @caddy/caddy

Premi il tasto y sulla tastiera quando richiesto:

Enabling a Copr repository. Please note that this repository is not part
of the main distribution, and quality may vary.

The Fedora Project does not exercise any power over the contents of
this repository beyond the rules outlined in the Copr FAQ at
<https://docs.pagure.org/copr.copr/user_documentation.html#what-i-can-build-in-copr>,
and packages are not held to any quality or security level.

Please do not file bug reports about these packages in Fedora
Bugzilla. In case of problems, contact the owner of this repository.

Do you really want to enable copr.fedorainfracloud.org/@caddy/caddy? [y/N]: y
Repository successfully enabled.

Una volta abilitato il repository, installa il server web Caddy nel tuo sistema:

sudo dnf -y install caddy

Puoi ottenere pacchetti di dettagli aggiuntivi usando rpm o dnf

sudo dnf info caddy
# OR
rpm -qi caddy

Il file di configurazione predefinito del server Caddy si trova in /etc/caddy/Caddyfile. Puoi controllarne il contenuto:

cat /etc/caddy/Caddyfile

Per avviare il servizio, usa il comando systemctl:

sudo systemctl start caddy

Abilita il servizio per l'avvio all'avvio del sistema.

sudo systemctl enable caddy

Controllo dello stato del servizio:

$ systemctl status caddy
● caddy.service - Caddy
   Loaded: loaded (/usr/lib/systemd/system/caddy.service; enabled; vendor preset: disabled)
   Active: active (running) since Fri 2024-08-02 17:43:26 UTC; 39s ago
     Docs: https://caddyserver.com/docs/
 Main PID: 42001 (caddy)
    Tasks: 7 (limit: 48750)
   Memory: 20.0M
   CGroup: /system.slice/caddy.service
           └─42001 /usr/bin/caddy run --environ --config /etc/caddy/Caddyfile

Aug 02 17:43:26 rocky8.computingforgeeks.com caddy[42001]: {"level":"info","ts":1722620606.719293,"msg":"adapted config to JSON","adapter":"caddyfile"}
Aug 02 17:43:26 rocky8.computingforgeeks.com caddy[42001]: {"level":"info","ts":1722620606.7204406,"logger":"admin","msg":"admin endpoint started","address":"localhost:2019","enforce_origin":false,"origins":["//localhost:2019",">
Aug 02 17:43:26 rocky8.computingforgeeks.com caddy[42001]: {"level":"warn","ts":1722620606.7205217,"logger":"http.auto_https","msg":"server is listening only on the HTTP port, so no automatic HTTPS will be applied to this server>
Aug 02 17:43:26 rocky8.computingforgeeks.com caddy[42001]: {"level":"info","ts":1722620606.7206764,"logger":"http.log","msg":"server running","name":"srv0","protocols":["h1","h2","h3"]}
Aug 02 17:43:26 rocky8.computingforgeeks.com caddy[42001]: {"level":"info","ts":1722620606.7208471,"msg":"autosaved config (load with --resume flag)","file":"/var/lib/caddy/.config/caddy/autosave.json"}
Aug 02 17:43:26 rocky8.computingforgeeks.com caddy[42001]: {"level":"info","ts":1722620606.7209103,"msg":"serving initial configuration"}
Aug 02 17:43:26 rocky8.computingforgeeks.com caddy[42001]: {"level":"info","ts":1722620606.7212656,"logger":"tls.cache.maintenance","msg":"started background certificate maintenance","cache":"0xc000488e00"}
Aug 02 17:43:26 rocky8.computingforgeeks.com systemd[1]: Started Caddy.
Aug 02 17:43:26 rocky8.computingforgeeks.com caddy[42001]: {"level":"info","ts":1722620606.7246072,"logger":"tls","msg":"cleaning storage unit","storage":"FileStorage:/var/lib/caddy/.local/share/caddy"}
Aug 02 17:43:26 rocky8.computingforgeeks.com caddy[42001]: {"level":"info","ts":1722620606.7248337,"logger":"tls","msg":"finished cleaning storage units"}

Ospitare WordPress utilizzando il server web Caddy

Installiamo PHP nel tuo sistema.

sudo dnf -y install @php

Installa anche le altre estensioni PHP necessarie.

sudo dnf install php-{cli,fpm,mysqlnd,zip,gd,mbstring,curl,xml,pear,bcmath,json}

Imposta l'utente caddy come proprietario del socket FPM.

$ sudo vim /etc/php-fpm.d/www.conf
user = caddy
group = caddy
listen = /run/php-fpm/www.sock
listen.owner = caddy
listen.group = caddy
listen.mode = 0660
listen.acl_users = apache,nginx,caddy

Avvia e abilita il servizio PHP FPM.

sudo systemctl enable --now php-fpm

Installa il server di database MariaDB.

sudo dnf -y install @mariadb
sudo systemctl enable --now mariadb
sudo mysql -u root

Crea un database per il tuo sito WordPress:

CREATE DATABASE wp_db;
GRANT ALL PRIVILEGES ON wp_db.* to 'wp_user'@'localhost' IDENTIFIED BY 'DBStr%ngPassw0rd';
FLUSH PRIVILEGES;
EXIT

Scarica WordPress, estrai e sposta la cartella wordpress in /var/www

wget wordpress.org/latest.tar.gz
tar xvf latest.tar.gz
sudo mv wordpress /var/www
sudo cp  /var/www/wordpress/wp-config-sample.php  /var/www/wordpress/wp-config.php 

Configura la connessione al database di WordPress

$ sudo vim /var/www/wordpress/wp-config.php
// ** Database settings - You can get this info from your web host ** //
/** The name of the database for WordPress */
define( 'DB_NAME', 'wp_db' );

/** Database username */
define( 'DB_USER', 'wp_user' );

/** Database password */
define( 'DB_PASSWORD', 'DBStr%ngPassw0rd' );

/** Database hostname */
define( 'DB_HOST', 'localhost' );

Imposta i permessi per la directory all'utente caddy:

sudo chown -R caddy:caddy /var/www/wordpress/

Configura Caddy per WordPress

Apri il file di configurazione di Caddy per modificarlo

sudo vim /etc/caddy/Caddyfile

Modifica le configurazioni qui sotto per adattarle al tuo ambiente. Cambia il dominio blog.cloudlabske.com e il nome utente dell'amministratore

blog.cloudlabske.com {
	tls [email 
	log {
		output file /var/log/caddy/wordpress.log
		format console
	}

	root * /var/www/wordpress
	encode gzip
	file_server
	php_fastcgi unix//run/php-fpm/www.sock

	@disallowed {
		path /xmlrpc.php
		path *.sql
		path /wp-content/uploads/*.php
	}

	rewrite @disallowed '/index.php'
}

Crea la directory dei log.

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

Conferma che la sintassi delle tue configurazioni sia valida:

$ sudo caddy validate --config /etc/caddy/Caddyfile
2024/08/03 07:25:16.349	INFO	using config from file	{"file": "/etc/caddy/Caddyfile"}
2024/08/03 07:25:16.351	INFO	adapted config to JSON	{"adapter": "caddyfile"}
2024/08/03 07:25:16.351	INFO	http.auto_https	server is listening only on the HTTPS port but has no TLS connection policies; adding one to enable TLS	{"server_name": "srv0", "https_port": 443}
2024/08/03 07:25:16.351	INFO	http.auto_https	enabling automatic HTTP->HTTPS redirects	{"server_name": "srv0"}
2024/08/03 07:25:16.351	WARN	http.auto_https	server is listening only on the HTTP port, so no automatic HTTPS will be applied to this server	{"server_name": "srv1", "http_port": 80}
2024/08/03 07:25:16.351	INFO	tls.cache.maintenance	started background certificate maintenance	{"cache": "0xc000157680"}
2024/08/03 07:25:16.352	INFO	tls.cache.maintenance	stopped background certificate maintenance	{"cache": "0xc000157680"}

Riavvia il server web Caddy una volta confermato che la configurazione è corretta.

sudo systemctl restart caddy

Verifica lo stato dei servizi di Caddy e controlla le righe relative alla generazione degli SSL. Presta attenzione alla generazione riuscita di Let’s Encrypt:

$ systemctl status caddy
● caddy.service - Caddy
   Loaded: loaded (/usr/lib/systemd/system/caddy.service; enabled; vendor preset: disabled)
   Active: active (running) since Sat 2024-08-03 07:23:34 UTC; 5s ago
     Docs: https://caddyserver.com/docs/
 Main PID: 45140 (caddy)
    Tasks: 7 (limit: 48750)
   Memory: 19.6M
   CGroup: /system.slice/caddy.service
           └─45140 /usr/bin/caddy run --environ --config /etc/caddy/Caddyfile

Aug 03 07:23:36 rocky8.cloudspinx.com caddy[45140]: {"level":"info","ts":1722669816.0895815,"logger":"tls.issuance.acme","msg":"served key authentication","identifier":"blog.cloudlabske.com","challenge":"http-01","remote">
Aug 03 07:23:36 rocky8.cloudspinx.com caddy[45140]: {"level":"info","ts":1722669816.2393315,"logger":"tls.issuance.acme","msg":"served key authentication","identifier":"blog.cloudlabske.com","challenge":"http-01","remote">
Aug 03 07:23:36 rocky8.cloudspinx.com caddy[45140]: {"level":"info","ts":1722669816.3801627,"logger":"tls.issuance.acme","msg":"served key authentication","identifier":"blog.cloudlabske.com","challenge":"http-01","remote">
Aug 03 07:23:36 rocky8.cloudspinx.com caddy[45140]: {"level":"info","ts":1722669816.7106369,"logger":"tls.issuance.acme.acme_client","msg":"authorization finalized","identifier":"blog.cloudlabske.com","authz_status":"vali>
Aug 03 07:23:36 rocky8.cloudspinx.com caddy[45140]: {"level":"info","ts":1722669816.7106667,"logger":"tls.issuance.acme.acme_client","msg":"validations succeeded; finalizing order","order":"https://acme-v02.api.letsencryp>
Aug 03 07:23:37 rocky8.cloudspinx.com caddy[45140]: {"level":"info","ts":1722669817.3649049,"logger":"tls.issuance.acme.acme_client","msg":"got renewal info","names":["blog.cloudlabske.com"],"window_start":1727765075,"win>
Aug 03 07:23:37 rocky8.cloudspinx.com caddy[45140]: {"level":"info","ts":1722669817.666609,"logger":"tls.issuance.acme.acme_client","msg":"got renewal info","names":["blog.cloudlabske.com"],"window_start":1727765075,"wind>
Aug 03 07:23:37 rocky8.cloudspinx.com caddy[45140]: {"level":"info","ts":1722669817.6666691,"logger":"tls.issuance.acme.acme_client","msg":"successfully downloaded available certificate chains","count":2,"first_url":"http>
Aug 03 07:23:37 rocky8.cloudspinx.com caddy[45140]: {"level":"info","ts":1722669817.6672106,"logger":"tls.obtain","msg":"certificate obtained successfully","identifier":"blog.cloudlabske.com","issuer":"acme-v02.api.letsen>
Aug 03 07:23:37 rocky8.cloudspinx.com caddy[45140]: {"level":"info","ts":1722669817.6673443,"logger":"tls.obtain","msg":"releasing lock","identifier":"blog.cloudlabske.com"}

Accedi al sito WordPress su http://yourdomain e dovrebbe reindirizzarti automaticamente a https://yourdomain

Scopri di più sulla pagina ufficiale della guida Iniziare.