Pesquisa de site

Instalar o Servidor Web Caddy no Rocky/AlmaLinux 9|8


Caddy é uma plataforma web poderosa, amigável e de código aberto usada para hospedar sites, aplicativos e serviços. Caddy é escrito na linguagem de programação Go, tornando-o um dos servidores web mais rápidos no mercado de código aberto. Ele foca em segurança, desempenho e facilidade de uso, podendo ser utilizado para projetos simples, como sites estáticos, ou para hospedar aplicações web mais complexas.

Por que usar o Servidor Web Caddy

  • HTTPS Automático: O Caddy faz a geração e renovação automática de certificados SSL/TLS para seus sites.
  • Sua Simplicidade: O Caddy é projetado com base no princípio de torná-lo simples. Ele utiliza um único arquivo de configuração simples e legível por humanos chamado Caddyfile
  • Super Desempenho: O Caddy foi projetado para usar poucos recursos de hardware, sendo rápido e eficiente
  • Arquitetura modular: Você pode expandir as funcionalidades do servidor web Caddy usando plugins e extensões
  • Suporte multiplataforma: O Caddy pode ser executado no Linux, Windows, macOS ou em containers como Docker/Podman
  • Grande comunidade: Caddy conta com uma comunidade ativa e solidária, disponível para ajudar você enquanto começa.

Nas próximas seções, veremos como você pode instalar, configurar e usar o servidor web Caddy em sistemas Rocky Linux/AlmaLinux ou CentOS Stream Linux. Para tornar este tutorial prático e dinâmico, iremos hospedar um site WordPress com banco de dados MariaDB. Para este tutorial, estamos usando o domínio blog.cloudlabske.com.

Instale o servidor web Caddy

Para instalar o servidor web Caddy em uma máquina Rocky/AlmaLinux/CentOS Steam Linux, precisamos instalar o copr em nosso sistema:

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

Habilitar repositório caddy usando copr:

sudo dnf copr enable @caddy/caddy

Pressione a tecla y no seu teclado quando solicitado:

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.

Uma vez que o repositório tenha sido habilitado, instale o servidor web Caddy em seu sistema:

sudo dnf -y install caddy

Você pode obter o pacote de detalhes extras usando rpm ou dnf

sudo dnf info caddy
# OR
rpm -qi caddy

O arquivo de configuração padrão do servidor Caddy está localizado em /etc/caddy/Caddyfile. Você pode verificar o conteúdo:

cat /etc/caddy/Caddyfile

Para iniciar o serviço, use o comando systemctl:

sudo systemctl start caddy

Habilitar o serviço para iniciar na inicialização do sistema.

sudo systemctl enable caddy

Verificando status do serviço:

$ 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"}

Hospedando WordPress usando o Servidor Web Caddy

Vamos instalar o PHP no seu sistema.

sudo dnf -y install @php

Também instale outras extensões PHP necessárias.

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

Defina o usuário caddy como o proprietário do 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

Inicie e habilite o serviço PHP FPM.

sudo systemctl enable --now php-fpm

Instale o servidor de banco de dados MariaDB.

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

Crie um banco de dados para o seu site WordPress:

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

Baixe o WordPress, extraia e mova a pasta wordpress para /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 

Configurar conexão do banco de dados do 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' );

Defina as permissões para o diretório para o usuário caddy:

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

Configure o Caddy para WordPress

Abrir arquivo de configuração do Caddy para edição

sudo vim /etc/caddy/Caddyfile

Modifique as configurações abaixo para adequar ao seu ambiente. Altere o domínio blog.cloudlabske.com, o nome de usuário do administrador

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'
}

Criar diretório de log.

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

Confirme se a sintaxe das suas configurações é válida:

$ 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"}

Reinicie o servidor web Caddy assim que confirmar que a configuração está correta.

sudo systemctl restart caddy

Verifique o status dos serviços do Caddy e procure pelas linhas de geração de SSL. Fique atento à geração bem-sucedida do 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"}

Acesse o site WordPress em http://seudominio e ele deve redirecionar automaticamente para https://seudominio

Saiba mais na página oficial do guia Introdução.