¿Cómo instalar Caddy Server en Ubuntu?

⚠️ Leer el aviso del princio del post⚠️

¿Cómo instalar Caddy Server en Ubuntu?

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

⚠️Este tutorial es para la versión v1 de Caddy, por ahora aún se puede seguir usando pero es mejor que instales la versión v2 que tiene grandes cambios y mejoras al respecto en comparación con la versión v1.

Antes de empezar tenemos que instalar los siguiente paquetes:

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 bajarnos el archivo "caddy.service" para poder ejecutar el servidor caddy desde systemd y así tendremos el servidor siempre activo. Para ello usamos uno de los siguientes comandos dependiendo de la versión de Ubuntu que estemos usando:

Ubuntu 16.04:

sudo curl -s https://raw.githubusercontent.com/danielperez9430/MyCaddyFiles/master/linux-systemd/ubuntu%2016.04/caddy.service -o /etc/systemd/system/caddy.service

Ubuntu 18.04:

sudo curl -s https://raw.githubusercontent.com/danielperez9430/MyCaddyFiles/master/linux-systemd/ubuntu%2018.04/caddy.service -o /etc/systemd/system/caddy.service

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.

⚠️ Si veis que Caddy no arranca o no os llega a funcionar poner en la terminal el siguiente comando para que os muestre el error: journalctl -f -u caddy

Permitir conexiones HTTP y HTTPS

Debido a que Caddy no se instaló usando APT (administrador de paquetes de Ubuntu), UFW no tiene forma de saber cómo administrar las reglas para ello. Agregaremos esas reglas manualmente aquí.

Caddy sirve sitios web utilizando protocolos HTTP y HTTPS, por lo que debemos permitir el acceso a los puertos apropiados para que Caddy esté disponible en Internet.

sudo ufw allow http

sudo ufw allow https

Ambos comandos, cuando se ejecutan, mostrarán los siguientes mensajes de éxito:

UFW output
Rule added
Rule added (v6)

Esto permitirá a Caddy servir los sitios web a los visitantes libremente.

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 [email protected]
     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 [email protected]
     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