¿Cómo instalar Caddy Server en Debian 9?

⚠️ Tutorial Anticuado⚠️

📝Revisa el tutorial para la versión v2: ¿Cómo instalar Caddy v2 en Debian? Sirve para cualquier versión de Debian

Antes de empezar tenemos que instalar los siguiente paquetes:

sudo apt-get install curl

apt install libcap2-bin

Empezamos descargando Caddy Server

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

Con ese comando ya tenemos Caddy descargado en nuestro servidor, se guarda en la ruta /usr/local/bin/. Para comprobar si Caddy se encuntra en esa carpeta escribimos:

which caddy

Y nos tiene que devolver la ruta /usr/local/bin/caddy

Preparando Caddy

Como vimos, no instalamos Caddy mediante un paquete, por lo que no tenemos ningún servicio o archivo de configuración para nuestro servidor web. En esta sección vamos a crear archivos de configuración de Caddy, establecer sus permisos y finalmente crear un servicio para nuestro Servidor web.

Directorios necesarios para Caddy

Antes que nada, tenemos que establecer el permiso del archivo binario como "root" y hacerlo ejecutable con los siguientes comandos:

chown root:root /usr/local/bin/caddy

chmod 755 /usr/local/bin/caddy

Ejecutando el siguiente comando permitimos que el archivo binario del Caddy escuche las peticiones en el puerto preferido:

setcap CAP_NET_BIND_SERVICE=+eip /usr/local/bin/caddy

Ahora crearemos el usuario y el grupo Caddy:

groupadd caddy

Y después copiamos todo el siguiente código tal cual y lo pegamos en la terminal:

useradd \
-g caddy \
--home-dir /var/www --no-create-home \
--shell /usr/sbin/nologin \
--system caddy

Creamos el directorio principal de Caddy (donde configuraremos el servidor) y configuramos el propietario y el permisos adecuados con los siguientes comandos:

mkdir /etc/caddy

touch /etc/caddy/Caddyfile

chown -R root:caddy /etc/caddy

chown caddy:caddy /etc/caddy/Caddyfile

chmod 444 /etc/caddy/Caddyfile

Ahora creamos el directorio SSL para almacenar sus configuraciones SSL:

mkdir /etc/ssl/caddy

chown -R caddy:root /etc/ssl/caddy

chmod 770 /etc/ssl/caddy

A continuación creamos el directorio raíz de Caddy (es la carpeta donde pondrás los archivos de tú sitio web):

mkdir /var/www

Caddy Service

En esta sección, vamos a crear un archivo "caddy.service" para tener la capacidad de controlar nuestro servidor web.

nano /etc/systemd/system/caddy.service

Pegue el siguiente script en el archivo, luego guárdelo y salga:

[Unit]
Description=Caddy HTTP/2 web server
Documentation=https://caddyserver.com/docs
After=network-online.target
Wants=network-online.target systemd-networkd-wait-online.service

[Service]
#Restart=on-failure
StartLimitInterval=864000
StartLimitBurst=500

; User and group the process will run as.
User=caddy
Group=caddy

; Letsencrypt-issued certificates will be written to this directory.
Environment=CADDYPATH=/etc/ssl/caddy

; Always set "-root" to something safe in case it gets forgotten in the Caddyfile.
ExecStart=/usr/local/bin/caddy -log stdout -agree=true -conf=/etc/caddy/Caddyfile -root=/var/tmp
ExecReload=/bin/kill -USR1 $MAINPID

; Limit the number of file descriptors; see `man systemd.exec` for more limit settings.
LimitNOFILE=1048576
; Unmodified caddy is not expected to use more than that.
LimitNPROC=64

; Use private /tmp and /var/tmp, which are discarded after caddy stops.
PrivateTmp=true
; Use a minimal /dev
PrivateDevices=true
; Hide /home, /root, and /run/user. Nobody will steal your SSH-keys.
ProtectHome=true
; Make /usr, /boot, /etc and possibly some more folders read-only.
ProtectSystem=full
; … except /etc/ssl/caddy, because we want Letsencrypt-certificates there.
;   This merely retains r/w access rights, it does not add any new. Must still be writable on the host!
ReadWriteDirectories=/etc/ssl/caddy

; The following additional security directives only work with systemd v229 or later.
; They further restrict privileges that can be gained by Caddy. Uncomment if you like.
; Note that you may have to add capabilities required by any plugins in use.
CapabilityBoundingSet=CAP_NET_BIND_SERVICE
AmbientCapabilities=CAP_NET_BIND_SERVICE
;NoNewPrivileges=true

[Install]
WantedBy=multi-user.target

Establezca el propietario y los permisos para el archivo Caddy Service:

chown root:root /etc/systemd/system/caddy.service

chmod 644 /etc/systemd/system/caddy.service

Ahora ejecuta el siguiente comando para que se apliquen los cambios:

systemctl daemon-reload

Ahora vas a poder iniciar, detener y habilitar el servicio Caddy con los siguientes comandos:

systemctl start caddy

systemctl enable caddy

systemctl status caddy

Poner todos los comandos anteriores en la terminal para arrancar Caddy, activar caddy para que se inicie cada vez que reiniciamos el Vps y para ver su estado actual.

Configurar los dominios y como usar http o https en Caddy

Empezamos haciendo la prueba con http, para ello tenemos que tener nuestro dominio apuntando a la ip de nuestro servidor. Una vez tenemos el dominio apuntando a nuestro servidor editamos el archivo de configuración de Caddy para probar su funcionamiento:

nano /etc/caddy/Caddyfile

Dentro del archivo escrimos algo parecido a esto, cambiando "dominio.es" por el nombre de nuestro dominio o subdominio.

dominio.es:80 {
tls admin@dominio.es
root /var/www/
gzip
}

Después guardamos y reiniciamos el servicio Caddy de la siguiente menera:

systemctl restart caddy

Importante poner algún index.html en "/var/www" que es la carpeta de nuestro dominio. Si la carpeta está vacia nos aparecera en la pantalla "404 Not Found".

Ahora vamos a usar htpps en Caddy, para ello volvemos a editar el Caddyfile:

nano /etc/caddy/Caddyfile

Y ahora borramos el puerto 80, así Caddy instala los certificados https y nuestra web pasa a usar https por defecto:

dominio.es {
tls admin@dominio.es
root /var/www/
gzip
}

Por último volvemos a reiniciar el servicio Caddy para que se apliquen los cambios y listo con el siguiente comando:

systemctl restart caddy

Tip

Cuando veis que no arranca o algo es porque lo más seguro es que escribisteis algo mal en el Caddy File. Para revisar que todo esta bien lo que teneis que hacer es usar el comando:

systemctl status caddy

Siguiente Parte: Como instalar php 7.1 en Caddy Server (Debian 9)