GNU/Linux >> Tutoriales Linux >  >> Ubuntu

Cómo instalar y configurar el servidor web Caddy con PHP y MariaDB en Ubuntu 20.04

Caddy Web Server es un moderno servidor web de código abierto escrito en lenguaje GO. No tiene dependencias y funciona con un archivo binario estático y genera y renueva certificados SSL automáticamente. Puede funcionar como un servidor de archivos estático, un proxy inverso escalable o un potente servidor dinámico y se puede expandir a través de complementos. También incluye compatibilidad con los protocolos HTTP/2 y HTTP/3 experimental.

En este tutorial, instalará y configurará Caddy para que se ejecute junto con PHP y MariaDB en un servidor basado en Ubuntu 20.04.

Requisitos

  • Un servidor Ubuntu 20.04 con una cuenta no raíz que tenga privilegios sudo.
  • Un nombre de dominio completamente registrado apuntando a la dirección IP de su servidor.

Paso 1:configurar el cortafuegos

Si está utilizando UFW (cortafuegos sin complicaciones), debe configurarlo para permitir el acceso a los puertos HTTP y HTTPS para que el servidor funcione.

Compruebe el estado del cortafuegos.

$ sudo ufw status

Debería ver algo como lo siguiente.

Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)

Permitir puertos HTTP y HTTPs.

$ sudo ufw allow http
$ sudo ufw allow https

Vuelva a comprobar el estado para confirmar.

$ sudo ufw status
Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
80/tcp                     ALLOW       Anywhere
443/tcp                    ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
80/tcp (v6)                ALLOW       Anywhere (v6)
443/tcp (v6)               ALLOW       Anywhere (v6)

Paso 2:Instalar Caddy

Hay varias formas de instalar Caddy, que incluyen la instalación de una ventana acoplable, el uso de repositorios oficiales o la compilación desde la fuente. El método de construcción desde la fuente es útil si desea una funcionalidad que solo se puede agregar a través de un módulo/complemento de terceros.

A los efectos de este tutorial, nos ceñiremos al uso del repositorio oficial de Caddy para sistemas basados ​​en Ubuntu/Debian.

Agregue el Repositorio a la lista.

$ echo "deb [trusted=yes] https://apt.fury.io/caddy/ /" | sudo tee -a /etc/apt/sources.list.d/caddy-fury.list
$ sudo apt update

Esto creará un archivo de repositorio caddy en /etc/apt/sources.list.d directorio con la ubicación del repositorio de Caddy.

Instale Caddy.

$ sudo apt install caddy

Esto instalará y ejecutará automáticamente el servidor web Caddy. Abra http:// en su navegador y debería ser recibido por la siguiente página.

Paso 3 - Instalar PHP

Instale el repositorio PHP de Ondrej.

$ sudo add-apt-repository ppa:ondrej/php

Instale PHP 7.4 junto con algunos paquetes adicionales.

$ sudo apt install php-cli php-fpm php-mysql

Compruebe si PHP funciona correctamente.

$ php --version

Debería ver un resultado similar.

PHP 7.4.6 (cli) (built: May 14 2020 10:03:35) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
    with Zend OPcache v7.4.6, Copyright (c), by Zend Technologies

Paso 4:instalar MariaDB

MariaDB es un reemplazo directo de MySQL, lo que significa que los comandos para ejecutar y operar MariaDB son los mismos que para MySQL.

Agregue el repositorio oficial de Mariadb. Puede optar por un espejo diferente que esté más cerca de la ubicación de su servidor desde la página del repositorio de MariaDB.

$ sudo apt-key adv --fetch-keys 'https://mariadb.org/mariadb_release_signing_key.asc'
$ sudo add-apt-repository 'deb [arch=amd64] http://mirror.lstn.net/mariadb/repo/10.4/ubuntu f
ocal main'

Para instalar MariaDB emita el siguiente comando.

$ sudo apt install mariadb-server

Compruebe si MariaDB se instaló correctamente.

$ mysql --version

Debería ver el siguiente resultado.

mysql  Ver 15.1 Distrib 10.4.13-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2

Habilite el servicio MariaDB.

$ sudo systemctl enable mariadb

Paso 5:configurar MariaDB

Ejecute el siguiente comando para realizar la configuración predeterminada, como proporcionar una contraseña de root, eliminar usuarios anónimos, prohibir el inicio de sesión de root de forma remota y descartar tablas de prueba.

$ sudo mysql_secure_installation

Con MariaDB 10.4, ahora se le preguntará entre usar la contraseña de root o unix_socket enchufar. El unix_socket El complemento le permite iniciar sesión en MariaDB con sus credenciales de usuario de Linux. Se considera más seguro, aunque necesitará un nombre de usuario/contraseña tradicional para usar aplicaciones de terceros como phpMyAdmin. Nos limitaremos a usar unix_socket plugin para este tutorial. Todavía puede usar phpMyAdmin a través de cualquier usuario que cree para sus bases de datos.

Al pulsar Intro se elige la opción predeterminada (la que está en mayúsculas, Y en este caso).

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we'll need the current
password for the root user. If you've just installed MariaDB, and
haven't set the root password yet, you should just press enter here.

Enter current password for root (enter for none): [PRESS ENTER]
OK, successfully used password, moving on...

Setting the root password or using the unix_socket ensures that nobody
can log into the MariaDB root user without the proper authorisation.

You already have your root account protected, so you can safely answer 'n'.

Switch to unix_socket authentication [Y/n] [PRESS ENTER]
Enabled successfully!
Reloading privilege tables..
 ... Success!

You already have your root account protected, so you can safely answer 'n'.

Change the root password? [Y/n] [ANSWER n]
... skipping.

By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n] [PRESS ENTER]
 ... Success!

Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n] [PRESS ENTER]
 ... Success!

By default, MariaDB comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n] [PRESS ENTER]
 \- Dropping test database...
 ... Success!
 \- Removing privileges on test database...
 ... Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n] [PRESS ENTER]
 ... Success!

Cleaning up...

All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!

Inicie sesión en el SQL Shell de MariaDB.

$ sudo mysql

Introduzca su contraseña raíz cuando se le solicite.

Cree una base de datos de prueba y un usuario con permiso de acceso. Reemplazar database y user con tu elección. Reemplazar password con una contraseña segura.

CREATE DATABASE testdb;
CREATE USER 'user' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON testdb.* TO 'user';

Salga de MySQL Shell.

exit

Paso 6 - Configurar Caddy

Caddy se puede configurar de varias maneras:llamadas API, archivo JSON o un archivo Caddy. Caddyfile es la forma más fácil de configurar Caddy que usaremos en nuestro tutorial.

Antes de configurar Caddy, debemos crear el directorio raíz de nuestro sitio.

$ sudo mkdir -p /var/www/example.com/html

-p flag también crea los directorios principales que faltan.

También necesitamos crear un directorio para almacenar los archivos de registro de Caddy.

$ sudo mkdir /var/log/caddy

El servidor Caddy en la instalación crea un usuario caddy que maneja sus tareas por él. Necesitamos otorgar permisos al directorio de registro para que Caddy pueda acceder y escribir en él.

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

Durante la instalación, Caddy generó un Caddyfile predeterminado en /etc/caddy/Caddyfile . Ábrelo.

$ sudo nano /etc/caddy/Caddyfile

Debería ser algo como lo siguiente.

# The Caddyfile is an easy way to configure your Caddy web server.
#
# Unless the file starts with a global options block, the first
# uncommented line is always the address of your site.
#
# To use your own domain name (with automatic HTTPS), first make
# sure your domain's A/AAAA DNS records are properly pointed to
# this machine's public IP, then replace the line below with your
# domain name.
:80

# Set this path to your site's directory.
root * /usr/share/caddy

# Enable the static file server.
file_server

# Another common task is to set up a reverse proxy:
# reverse_proxy localhost:8080

# Or serve a PHP site through php-fpm:
# php_fastcgi localhost:9000

# Refer to the Caddy docs for more information:
# https://caddyserver.com/docs/caddyfile

:80 le dice a Caddy que entregue todo a través del número de puerto 80. root establece la ruta para el directorio de inicio de su sitio. file_server permite que Caddy se ejecute como un servidor de archivos estático.

Reemplace el código anterior con el siguiente código.

{
	experimental_http3
}
example.com {
    root * /var/www/example.com/html
    log {
        output file /var/log/caddy/example.com.access.log {
        	roll_size 3MiB
	        roll_keep 5
	        roll_keep_for 48h
        }
        format console
    }
    encode gzip zstd
    php_fastcgi unix//run/php/php7.4-fpm.sock
   
    tls [email protected] {
    	protocols tls1.2 tls1.3    	
    }
}

Repasemos todas las secciones del Caddyfile a continuación.

  • El primer bloque en cualquier Caddyfile es un bloque global a menos que especifique un nombre de host que luego se convierte en un bloque de sitio. Un bloque global lleva directivas que se aplican a todos los sitios alojados en el servidor. En nuestro ejemplo, hemos habilitado la compatibilidad con el protocolo experimental HTTP/3. El bloqueo global es completamente opcional y siempre puede iniciar su Caddyfile con el bloqueo del sitio directamente.
  • El bloque siguiente es el bloque del sitio. Si solo tiene 1 sitio en su servidor, no necesita encerrar su configuración en un bloque, pero si va a alojar varios sitios, debe alojar la configuración de cada sitio en su propio bloque. Un bloque de sitio está marcado con corchetes. Cada bloque de sitio comienza con el nombre de host del sitio.
  • log habilita y configura el registro de solicitudes HTTP. Sin el log directiva, Caddy no registrará nada. output configura dónde escribir el archivo de registro. format describe cómo codificar o formatear los registros. La console da formato a la entrada de registro para la legibilidad humana.
  • encode directiva aquí habilita la compresión Gzip y Zstandard para el sitio.
  • php_fastcgi envía solicitudes a un servidor PHP FastCGI como php-fpm . Aquí estamos escuchando solicitudes a través de un socket Unix.
  • tls block configura los ajustes relacionados con los certificados SSL y la seguridad. Aquí, hemos habilitado la compatibilidad con los protocolos TLSv1.2 y TLSv1.3. De forma predeterminada, Caddy es compatible con TLS v1.2 de fábrica. Caddy también genera certificados SSL automáticamente para todos los sitios. Si no desea que Caddy genere SSL por usted, puede hacerlo utilizando la dirección IP en lugar del nombre de host o especificando la URL completa, es decir, http://example.com. En tales casos, Caddy no generará el certificado SSL.

Hasta ahora hemos cubierto los conceptos básicos absolutos de cómo escribir un Caddyfile que debería ayudarlo a comenzar. Puede leer más sobre esto en la documentación oficial.

Paso 7 - Configurar PHP

Ahora que nuestro Caddyfile está listo, es hora de configurar PHP.

Primero, tenemos que cambiar el nombre de usuario para el proceso de PHP. Abra el archivo /etc/php-fpm.d/www.conf .

$ sudo nano /etc/php/7.4/fpm/pool.d/www.conf

Encuentra el user=www-data y group=www-data líneas en el archivo y cámbielas a caddy .

...
; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
;       will be used.
; RPM: apache user chosen to provide access to the same directories as httpd
user = caddy
; RPM: Keep a group allowed to write in log dir.
group = caddy
...

Además, busque las líneas listen.owner=www-data y listen.group=www-data en el archivo y cámbielos a caddy .

listen.owner = caddy
listen.group = caddy

Guarde el archivo presionando Ctrl+X e ingresando Y cuando se le solicite.

Reinicie el proceso PHP-fpm.

$ sudo systemctl restart php7.4-fpm

Paso 8 - Iniciar sitio de demostración

Ahora que hemos creado un Caddyfile y configurado PHP para que se ejecute con el servidor, es hora de crear y lanzar un sitio web de demostración.

Asegúrese de que su nombre de dominio apunte a la dirección IP del servidor.

Reinicie el servidor Caddy para aplicar los cambios en el archivo Caddy que creamos anteriormente.

$ sudo systemctl restart caddy

Compruebe el estado del servidor Caddy para asegurarse de que funciona correctamente.

$ sudo systemctl status caddy
? caddy.service - Caddy
     Loaded: loaded (/lib/systemd/system/caddy.service; enabled; vendor preset: enabled)
     Active: active (running) since Wed 2020-05-20 07:09:25 UTC; 2s ago
       Docs: https://caddyserver.com/docs/
   Main PID: 25410 (caddy)
      Tasks: 7 (limit: 1074)
     Memory: 17.8M
     CGroup: /system.slice/caddy.service
             ??25410 /usr/bin/caddy run --environ --config /etc/caddy/Caddyfile

May 20 07:09:25 example.com caddy[25410]: 2020/05/20 07:09:25 [INFO][example.com] Obtain: Lock acquired; proceeding...
May 20 07:09:25 example.com caddy[25410]: 2020/05/20 07:09:25 [INFO][cache:0xc0006f8cd0] Started certificate maintenance routine
May 20 07:09:25 example.com caddy[25410]: 2020/05/20 07:09:25 [INFO] acme: Registering account for [email protected]
May 20 07:09:26 example.com caddy[25410]: 2020/05/20 07:09:26 [INFO][example.com] Waiting on rate limiter...
May 20 07:09:26 example.com caddy[25410]: 2020/05/20 07:09:26 [INFO][example.com] Done waiting
May 20 07:09:26 example.com caddy[25410]: 2020/05/20 07:09:26 [INFO] [example.com] acme: Obtaining bundled SAN certificate given a CSR
May 20 07:09:27 example.com caddy[25410]: 2020/05/20 07:09:27 [INFO] [example.com] AuthURL: https://acme-v02.api.letsencrypt.org/acme/authz-v3/4696123289
May 20 07:09:27 example.com caddy[25410]: 2020/05/20 07:09:27 [INFO] [example.com] acme: use tls-alpn-01 solver
May 20 07:09:27 example.com caddy[25410]: 2020/05/20 07:09:27 [INFO] [example.com] acme: Trying to solve TLS-ALPN-01
May 20 07:09:27 example.com caddy[25410]: 2020/05/20 07:09:27 http: TLS handshake error from 127.0.0.1:39466: EOF

Puede ver desde arriba que Caddy generó el certificado automáticamente cuando reiniciamos el servidor por primera vez después de crear el archivo Caddy.

Vamos a crear una página de prueba para verificar que Caddy puede renderizar PHP y conectarse a la base de datos MariaDB.

$ sudo nano /var/www/example.com/html/test.php

Pegue el siguiente código en el editor. Reemplazar "user" y "password" campos con las credenciales de MariaDB que creó anteriormente.

<html>
<head>
    <title>Caddy Demo Site</title>
    <style type="text/css">
        #wrap {
            width: 900px;
            margin: 0 auto;
        }
    </style>
</head>
<body id="wrap">
    <h2>Caddy Demo Site</h2>
    <?php echo '<p>Hello,</p>';

    // Define PHP variables for the MySQL connection.
    $servername = "localhost";
    $username = "user";
    $password = "password";

    // Create a MySQL connection.
    $conn = mysqli_connect($servername, $username, $password);

    // Report if the connection fails or is successful.
    if (!$conn) {
        exit('<p>Your connection has failed.<p>' .  mysqli_connect_error());
    }
    echo '<p>You have connected successfully.</p>';
    ?>
</body>
</html>

Guarde el archivo presionando Ctrl+X e ingresando Y cuando se le solicite.

Visite https://example.com/test.php en un navegador web. Debería obtener la siguiente página.

Si ve un mensaje de error o si la página no se carga, vuelva a verificar su configuración

Elimina el archivo de prueba una vez que estés satisfecho.

$ sudo rm /var/www/example.com/html/test.php

Conclusión

Esto concluye nuestro tutorial donde instalamos el servidor web Caddy junto con PHP y MariaDB SQL. Si tiene alguna consulta, pregúntela en los comentarios a continuación.


Ubuntu
  1. Cómo instalar y configurar el servidor DHCP en Ubuntu 20.04

  2. Cómo instalar el servidor web Cherokee con PHP5 y MySQL en Ubuntu 11.04

  3. Cómo instalar y configurar Mariadb 10 en Ubuntu 20.04

  4. Cómo instalar el servidor web OpenLiteSpeed ​​PHP y MariaDB en Ubuntu 20.10

  5. Cómo instalar y configurar el servidor web Apache en Ubuntu 13.10

Cómo instalar y configurar DHCP en Ubuntu 18.04

Cómo instalar y configurar el servidor web Apache en Ubuntu

Cómo instalar Lighttpd con PHP y MariaDB en Ubuntu 15.04

Cómo instalar Lighttpd con PHP y MariaDB en Ubuntu 16.04 LTS

Cómo instalar el servidor web OpenLiteSpeed ​​con MariaDB y PHP

Cómo instalar y configurar el servidor web Caddy con PHP en Rocky Linux 8