Caddy: Instalação e Configuração Simples de Servidor Web com HTTPS

Nos tempos atuais, o protocolo HTTPS é indispensável para qualquer site. Sem essa camada de segurança, os dados confidenciais dos seus usuários podem ficar expostos na internet. Para mitigar esse problema, muitos administradores de servidores Linux passaram a utilizar ferramentas como o LetsEncrypt, que simplificam a emissão de certificados. No entanto, apesar da facilidade proporcionada pelo LetsEncrypt, a configuração em servidores como Nginx ou Apache pode ser um processo complexo. Felizmente, existe uma solução mais eficaz: o servidor web Caddy. Ele se destaca por ter o HTTPS habilitado por padrão. Se você está cansado das complexidades dos certificados SSL, o Caddy pode ser a resposta que procura.

Instalação do Caddy

O processo de instalação do servidor web Caddy é semelhante em diversos sistemas operacionais. A simplicidade na instalação se deve à escolha do desenvolvedor de utilizar um script Bash para download e instalação do software, eliminando a necessidade de adicionar repositórios de terceiros ou instalar através de binários.

Neste guia, utilizaremos o Ubuntu Server como referência, embora o Caddy funcione perfeitamente na maioria dos sistemas Linux, inclusive em desktops. Antes de iniciar, certifique-se de que o aplicativo Curl está presente no seu sistema. Caso contrário, abra um terminal, localize o pacote “curl” no seu gerenciador de pacotes e instale-o.

Observação: Para verificar se o Curl já está instalado, execute o comando `curl` no terminal. Se a tela de ajuda do programa aparecer, o Curl já está disponível em sua máquina.

curl https://getcaddy.com | bash -s personal

O servidor web Caddy é gratuito para uso pessoal, mas é necessário especificar essa condição durante a instalação. Para ambientes empresariais, utilize o seguinte comando:

curl https://getcaddy.com | bash -s commercial

A execução do comando Curl, através do Bash, iniciará automaticamente o processo de instalação. O instalador do Caddy irá baixar o binário do servidor web e o colocará no diretório /usr/local/bin/. Se a instalação for bem-sucedida, você verá uma mensagem confirmando a instalação.

Neste ponto, será necessário modificar o binário do Caddy. Execute o seguinte comando no terminal, com privilégios sudo:

sudo setcap cap_net_bind_service=+ep /usr/local/bin/caddy

Configurando o Caddy

Com o Caddy instalado no servidor, o próximo passo é configurar a estrutura de diretórios. Para agilizar o processo, acesse um terminal com privilégios de root. Isso evita a necessidade de usar `sudo` para cada comando e digitar a senha repetidamente.

Em muitos sistemas, o acesso direto à conta root é feito com o comando:

su

No Ubuntu Server, a conta root é bloqueada por questões de segurança. Para contornar isso, obtenha um shell root utilizando `sudo`:

sudo -s

Com acesso root, crie os diretórios necessários para o correto funcionamento do servidor Caddy:

mkdir /etc/caddy
mkdir /etc/ssl/caddy

Observação: Se o seu servidor já tiver um diretório `/var/www/`, ignore o último comando `mkdir`.

mkdir /var/www

Em seguida, crie um novo arquivo “Caddyfile” dentro de `/etc/caddy/`:

touch /etc/caddy/Caddyfile

Utilizando o comando `chmod`, atualize as permissões da subpasta `caddy` em `/etc/ssl/`:

chmod 0770 /etc/ssl/caddy

Por fim, altere o proprietário do diretório `/var/www/`:

chown www-data: /var/www

Arquivo Caddy Systemd

A maioria dos servidores, especialmente o Ubuntu Server, utiliza o sistema `systemd init`. No entanto, como o servidor web é instalado via script Bash, um arquivo systemd não é criado automaticamente. Portanto, precisamos criar o nosso próprio. Utilize o comando `touch` para criar um novo arquivo de serviço vazio:

touch /lib/systemd/system/caddy.service

Abra o novo arquivo `caddy.service` e copie o seguinte código:

[Unit]
Description=Servidor web Caddy HTTP/2
Documentation=https://caddyserver.com/docs
After=network-online.target
Wants=network-online.target

[Service]
Restart=on-failure
StartLimitInterval=86400
StartLimitBurst=5

User=www-data
Group=www-data
; Os certificados emitidos pelo Letsencrypt serão armazenados neste diretório.
Environment=CADDYPATH=/etc/ssl/caddy

ExecStart=/usr/local/bin/caddy -log stdout -agree=true -conf=/etc/caddy/Caddyfile -root=/var/tmp
ExecReload=/bin/kill -USR1 $MAINPID

LimitNOFILE=1048576
LimitNPROC=64

PrivateTmp=true
PrivateDevices=true
ProtectHome=true
ProtectSystem=full
ReadWriteDirectories=/etc/ssl/caddy

; As seguintes diretivas de segurança adicionais funcionam apenas com o systemd v229 ou posterior.
; Elas restringem ainda mais os privilégios que o Caddy pode obter. Remova o comentário se desejar.
; Observe que pode ser necessário adicionar recursos exigidos por qualquer plug-in em uso.
;CapabilityBoundingSet=CAP_NET_BIND_SERVICE
;AmbientCapabilities=CAP_NET_BIND_SERVICE
;NoNewPrivileges=true

[Install]
WantedBy=multi-user.target

Este arquivo `caddy.service` contém bastante código. Certifique-se de que tudo esteja copiado corretamente. Ao finalizar, salve as alterações pressionando Ctrl + X e saia do editor.

systemctl enable caddy.service
systemctl start caddy.service

Após a configuração do systemd, o servidor deve estar pronto para uso.

Configurando Domínios

Assim como qualquer servidor web, o Caddy necessita de algumas configurações adicionais antes de ser utilizado. Inicie criando uma pasta para o domínio:

Observação: Certifique-se de substituir “test-domain.org” pelo seu domínio real.

mkdir -p /var/www/test-domain.org/

Em seguida, edite o arquivo `Caddyfile` que criamos anteriormente:

nano /etc/caddy/Caddyfile

Cole o seguinte código para ativar seu domínio:

meu-dominio.com {
root /var/www/test-domain.org
}

Reinicie o serviço Caddy systemd para salvar as alterações. Após a reinicialização do serviço, o Caddy estará pronto para ser utilizado em seu servidor.

systemctl restart caddy.service