¿Cómo implementar un sitio web estático usando el servidor web Caddy?

El servidor web Caddy es un servidor web de código abierto escrito en Go. Utiliza la biblioteca estándar Go para su funcionalidad HTTP y es compatible con HTTPS de forma nativa, lo que significa que se encarga de la gestión de su certificado SSL. En este artículo, vamos a implementar un sitio web estático en un servidor web caddy en un VPS. estaremos usando ubuntu

requisitos previos

  • Experiencia básica en Linux
  • Un VP de Ubuntu (nuevo/existente)
  • Conocimientos básicos de HTML y CSS
  • Nombre de dominio

Paso 1: inicie sesión en su VPS nuevo/existente y asegúrese de que sus paquetes estén actualizados.

ssh user@<vps-ip/hostname>
sudo apt update && sudo apt upgrade

Paso 2: Instale la última versión del lenguaje de programación Go. El siguiente comando instalará la última versión de Go Snap (independientemente de la versión que instale, asegúrese de que sea superior a 1.14.2)

sudo snap install go --classic

Ir instalado

Paso 3: Descargue e instale la última versión de xcaddy, xcaddy nos ayuda a instalar caddy fácilmente

sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/xcaddy/gpg.key' | sudo apt-key add -
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/xcaddy/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-xcaddy.list
sudo apt update
sudo apt install xcaddy

Instalación de Xcaddy

Paso 4:  Después de instalar xcaddy ahora necesitamos instalar el servidor web Caddy. Para eso sigue los siguientes comandos

mkdir ~/caddyserver
cd ~/caddyserver

// for only caddy build
xcaddy build

// for building caddy with some plugins
xcaddy build --with=github.com/caddy-dns/cloudflare

sudo mv caddy /usr/bin

Para verificar si caddy se instaló correctamente o no, puede usar el siguiente comando, si imprime la versión de caddy, entonces está instalado

caddy version

//output
v2.4.2 h1:chB106RlsIaY4mVEyq9OQM5g/9lHYVputo/LAX2ndFg=

Servidor web Caddy instalado

Paso 5: configure un servicio systemd para que Caddy pueda iniciarse automáticamente al iniciar el sistema

sudo groupadd --system caddy
sudo useradd --system --gid caddy --create-home --home-dir /var/lib/caddy --shell /usr/sbin/nologin --comment "Caddy web server | learned from GFG" caddy

Caddy de usuario y grupo agregado

Como caddy requiere su propio grupo y usuario para ejecutar el proceso systemd, el primer comando crea un nuevo caddy de grupo (puede dar su propio nombre, pero será útil para identificarlo en caso de solución de problemas) y el segundo comando crea un usuario nuevamente llamado caddy y lo asigna al grupo de caddy. El comando nologin dice que no puede iniciar sesión en Shell como usuario caddy.

Paso 6: Cree un archivo de servicio de caddy y agréguele los permisos necesarios.

sudo nano /etc/systemd/system/caddy.service

Copie y pegue el siguiente archivo de servicio del sistema precompilado del repositorio de Caddy

# caddy.service
#
# For using Caddy with a config file.
#
# Make sure the ExecStart and ExecReload commands are correct
# for your installation.
#
# See https://caddyserver.com/docs/install for instructions.
#
# WARNING: This service does not use the --resume flag, so if you
# use the API to make changes, they will be overwritten by the
# Caddyfile next time the service is restarted. If you intend to
# use Caddy's API to configure it, add the --resume flag to the
# `caddy run` command or use the caddy-api.service file instead.

[Unit]
Description=Caddy
Documentation=https://caddyserver.com/docs/
After=network.target network-online.target
Requires=network-online.target

[Service]
Type=notify
User=caddy
Group=caddy
ExecStart=/usr/bin/caddy run --environ --config /etc/caddy/Caddyfile
ExecReload=/usr/bin/caddy reload --config /etc/caddy/Caddyfile
TimeoutStopSec=5s
LimitNOFILE=1048576
LimitNPROC=512
PrivateTmp=true
ProtectSystem=full
AmbientCapabilities=CAP_NET_BIND_SERVICE

[Install]
WantedBy=multi-user.target

servicio systemd

Asignar permiso para que solo el usuario root pueda modificarlo

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

Paso 7: ahora necesitamos establecer permisos de directorio para los directorios de caddy 

// 755 permission gives root user rwx but others only rx for caddy binary
sudo chmod 755 /usr/bin/caddy

// creating caddy configuration folder
sudo mkdir /etc/caddy

// creating caddy config file
sudo touch /etc/caddy/Caddyfile

//giving ownership of caddy config folder to both root user and caddy group
sudo chown -R root:caddy /etc/caddy

// creating ssl folder for caddy to store the fetched ssl certificates
sudo mkdir /etc/ssl/caddy

//giving ownership of caddy config folder to both root user and caddy group
sudo chown -R root:caddy /etc/ssl/caddy

// 770 ensures that caddy can write to the folder and it can't be executed
sudo chmod 0770 /etc/ssl/caddy

// create and assign ownership of website contents to caddy uper and group
sudo mkdir /var/www/public_html
sudo chown caddy:caddy /var/www/public_html

Configuración de permisos

Paso 8: cree un archivo index.html simple en la carpeta public_html que creamos en el paso anterior

sudo nano /var/www/public_html/index.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8" />
    <meta name="viewport"content="width=device-width,initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta2/dist/css/bootstrap.min.css"rel="stylesheet"integrity="sha384-BmbxuPwQa2lc/FVzBcNJ7UAyJxM6wuqIj61tLrc4wSX0szH/Ev+nYRRuWlolflfl"crossorigin="anonymous">
    <title>Host Static website using Caddy web server</title>
</head>
<body class="text-center">
    <div class="jumbotron text-center">
        <h1>Welcome to GeeksForGeeks</h1>
        <h2 class="h2 card-title">This article explains how to host static websites using caddy webserver</h2>
        <h6 class="h6 card-text">Thank You for Reading</h6>
    </div>
</body>
</html>

índice.html

Paso 9: Configurando Caddy para esto necesitas editar el archivo de configuración que creamos en el paso 7.

sudo nano /etc/caddy/Caddyfile

A continuación se muestra un archivo de configuración de caddy de muestra .

example.com {
    tls {
        email hostmaster@example.com
    }
    root * /var/www/public_html
    encode gzip
    file_server
    header / {
        Content-Security-Policy = "upgrade-insecure-requests; default-src 'self'; style-src 'self'; script-src 'self'; img-src 'self'; object-src 'self'; worker-src 'self'; manifest-src 'self';"
        Strict-Transport-Security = "max-age=63072000; includeSubDomains; preload"
           X-Xss-Protection = "1; mode=block"
          X-Frame-Options = "DENY"
          X-Content-Type-Options = "nosniff"
          Referrer-Policy = "strict-origin-when-cross-origin"
        Permissions-Policy = "fullscreen=(self)"
        cache-control = "max-age=0,no-cache,no-store,must-revalidate"
    }
}
  • La primera línea le dice al caddie el nombre de dominio (example.com) al que pertenece el bloque de configuración. También se utiliza para obtener certificados SSL.
  • El bloque TLS nos ayuda a configurar SSL para el dominio, para esta configuración de archivo específica, envíe un correo electrónico al nombre de host para cualquier emisión y errores en la obtención y configuración de SSL.
  • Root le dice al directorio raíz de los contenidos del sitio web
  • Codificación del contenido
  • File_server ayuda a caddy a servir archivos estáticos
  • El bloque de encabezado le dice a caddy que envíe estos encabezados junto con la respuesta, la configuración específica le dice a caddy que sirva CSP, XSS, HSTS y encabezados de control de caché junto con la respuesta

caddie

Paso 10: ahora ejecute caddy usando los siguientes comandos

// reloading daemon to apply caddy system service file
sudo systemctl daemon-reload

// starting caddy
sudo systemctl start caddy

//activating caddy system file
sudo systemctl enable caddy
sudo systemctl restart caddy

Servidor Caddy ejecutándose correctamente

Ahora visite su sitio web desde su navegador favorito:

Ejecutando en el navegador

Publicación traducida automáticamente

Artículo escrito por kushwanthreddy y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *