Cómo instalar y utilizar el gestor de proxy Nginx con Docker

Pantalla de inicio de sesión del Administrador de Proxy Nginx

Un proxy inverso es un servidor web que puede situarse delante de otro servidor web o de un servicio web. Puede cifrar el tráfico saliente, actuar como equilibrador de carga, redirigir el tráfico y ofrecer protección. El servidor web Nginx puede utilizarse como servidor proxy frente a los servidores tradicionales, pero a veces su configuración puede ser tediosa y causar problemas si no se hace correctamente.

Nginx Proxy Manager es una aplicaci√≥n que facilita la configuraci√≥n de Nginx como servidor proxy proporcionando una interfaz gr√°fica de usuario (GUI) con caracter√≠sticas como soporte SSL incorporado usando Let’s Encrypt, soporte para m√ļltiples hosts, autenticaci√≥n HTTP, listas de acceso y gesti√≥n de usuarios.

Este tutorial le ense√Īar√° c√≥mo instalar el gestor de proxy Nginx en un servidor Linux usando Docker. Cubriremos todas las distribuciones populares de Linux en un solo tutorial.

Requisitos previos

  • Un servidor Linux con Ubuntu/Debian/CentOS/Alma Linux/Rocky Linux con un m√≠nimo de 1 GB de RAM.
  • Un usuario no root con privilegios sudo.
  • Un nombre de dominio completo (FQDN) como npm.example.com que apunte al servidor.

Paso 1 – Configurar el Firewall

Cent OS/Rocky Linux/Alma Linux

Debería tener instalado el cortafuegos Firewalld. Compruebe el estado del cortafuegos.

$ sudo firewall-cmd --state
running

Abra los puertos 80, 81 y 443.

$ sudo firewall-cmd --permanent --add-service=http
$ sudo firewall-cmd --permanent --add-service=https
$ sudo firewall-cmd --permanent --add-port=81/tcp

Recargue el cortafuegos para activar los cambios.

$ sudo firewall-cmd --reload

Ubuntu/Debian

Los sistemas Ubuntu y Debian utilizan ufw (Uncomplicated Firewall) por defecto.

Compruebe si el cortafuegos se est√° ejecutando.

$ sudo ufw status

Si est√° funcionando, abra los puertos 80, 81 y 443.

$ sudo ufw allow 80
$ sudo ufw allow 81
$ sudo ufw allow 443

Abra el puerto SSH si el cortafuegos no se est√° ejecutando.

$ sudo ufw allow "OpenSSH"

Habilite el cortafuegos si no se est√° ejecutando.

$ sudo ufw enable

Si se est√° ejecutando, rec√°rguelo para aplicar los cambios.

$ sudo ufw reload

Paso 2 – Instalar Docker

Cent OS/Rocky Linux/Alma Linux

Ejecute el siguiente comando para instalar Docker.

$ sudo yum install -y yum-utils
$ sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo
$ sudo yum install docker-ce docker-ce-cli containerd.io

Ubuntu

$ sudo apt install ca-certificates curl gnupg lsb-release
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
$ echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
$ sudo apt update
$ sudo apt install docker-ce docker-ce-cli containerd.io

Debian

$ sudo apt install ca-certificates curl gnupg lsb-release
$ curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
$ echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
$ sudo apt update
$ sudo apt install docker-ce docker-ce-cli containerd.io

Habilite e inicie el servicio Docker.

$ sudo systemctl start docker --now

A√Īada su nombre de usuario al grupo Docker.

$ sudo usermod -aG docker $USER

Salga del sistema y vuelva a entrar para aplicar el cambio.

Paso 3 – Instalar Docker Compose

Descargue e instale el binario de Docker Compose.

$ sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

Aplique el permiso de ejecución al binario.

$ sudo chmod +x /usr/local/bin/docker-compose

Paso 4 – Crear el archivo Docker Compose

Cree un directorio para el gestor de proxy Nginx.

$ mkdir ~/nginx-proxy

Cambiar al directorio.Anuncio

$ cd ~/nginx-proxy

Crear directorios para los datos del usuario y los certificados SSL.

$ mkdir {data,letsencrypt}

Cree y abra el archivo docker-compose.yml para editarlo.

$ nano docker-compose.yml

Pegue el siguiente código en él.

version: "3"
services:
  npm-app:
    image: 'jc21/nginx-proxy-manager:latest'
    container_name: npm-app
    restart: unless-stopped
    ports:
      - '80:80' # Public HTTP Port
      - '443:443' # Public HTTPS Port
      - '81:81' # Admin Web Port
      # Add any other Stream port you want to expose
      # - '21:21' # FTP
    environment:
      DB_MYSQL_HOST: "npm-db"
      DB_MYSQL_PORT: 3306
      DB_MYSQL_USER: "npm"
      DB_MYSQL_PASSWORD: "npm"
      DB_MYSQL_NAME: "npm"
      # Uncomment the line below if IPv6 is not enabled on your host
      # DISABLE_IPV6: 'true'
    volumes:
      - ./data:/data
      - ./letsencrypt:/etc/letsencrypt
    depends_on:
      - npm-db
    networks:
      - npm-nw
      - npm-internal

  npm-db:
    image: 'mariadb:latest'
    container_name: npm-db
    restart: unless-stopped
    environment:
      MYSQL_ROOT_PASSWORD: 'npm'
      MYSQL_DATABASE: 'npm'
      MYSQL_USER: 'npm'
      MYSQL_PASSWORD: 'npm'
    volumes:
      - ./data/mysql:/var/lib/mysql
    networks:
      - npm-internal

networks:
  npm-internal:
  npm-nw:
    external: true

Guarde el archivo pulsando Ctrl + X e introduciendo Y cuando se le solicite.

Revisemos el archivo. La primera parte del archivo es donde importamos la imagen del gestor de proxy Nginx y establecemos algunas variables de entorno en forma de credenciales de la base de datos. Tambi√©n exponemos los puertos 80, 81 y 443 al servidor para el acceso. Puedes exponer m√°s puertos, como el 21, para el acceso FTP. Puedes desactivar el soporte de IPV6 descomentando la l√≠nea DISABLE_IPV6: ‘true’. Hemos mapeado varios directorios de nuestro host al Docker para el almacenamiento de datos y SQL.

Estamos usando dos redes aquí. Una es la red interna npm-interna para conectar el gestor de proxy y la base de datos. Esta es opcional ya que se crea automáticamente. Pero aquí, lo estamos haciendo manualmente dándole un nombre de nuestra elección.

Hemos a√Īadido una red externa al contenedor del gestor de proxy llamada npm-nw. Esta red es esencial porque puedes usarla para conectar el gestor de proxy a cualquier otro contenedor Docker que instales. El uso de una red le permitir√° conectar cualquier contenedor directamente sin necesidad de exponer sus puertos al servidor.

Paso 5 – Ejecutar el Gestor de Proxy Nginx

Antes de lanzar el contenedor Docker, necesitamos crear la red externa npm-nw. Las redes internas se crean autom√°ticamente. Ejecute el siguiente comando para crear la red externa.

$ docker network create npm-nw

Inicie el contenedor Docker con el siguiente comando.

$ docker-compose up -d

Compruebe el estado de los contenedores.

$ docker ps
CONTAINER ID   IMAGE                             COMMAND                  CREATED              STATUS              PORTS                                                                                  NAMES
c91ca0ddca97   jc21/nginx-proxy-manager:latest   "/init"                  About a minute ago   Up About a minute   0.0.0.0:80-81->80-81/tcp, :::80-81->80-81/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp   npm-app
1738d71b95da   mariadb:latest                    "docker-entrypoint.s…"   About a minute ago   Up About a minute   3306/tcp                                                                               npm-db

Paso 6 – Acceder al Gestor de Proxy Nginx

Ahora puede acceder a su gestor de proxy Nginx a través de la URL http://yourserverIP:81. Debería obtener la siguiente pantalla de acceso.

Pantalla de inicio de sesión del Administrador de Proxy Nginx

Introduzca las siguientes credenciales por defecto para iniciar sesión.

Direcci√≥n de correo electr√≥nico: [email¬†protected] Contrase√Īa: changeme

A continuación, se le pedirá inmediatamente que establezca un nombre y una dirección de correo electrónico.Anuncio

Nginx Proxy Manager Edit User Popup

Haga clic en el bot√≥n Guardar y se le pedir√° que establezca una nueva contrase√Īa.

Ventana emergente del Administrador de Proxy Nginx para establecer la contrase√Īa

Haga clic en el botón Guardar y ya puede empezar a utilizar la aplicación.

Tablero del Administrador de Proxy Nginx

Si abre la URL http://yourserverIP en su navegador, ser√° llevado a una p√°gina por defecto que el gestor de proxy ha establecido.

Sitio por defecto del gestor de proxy Nginx

Paso 7 РConfiguración del nombre de dominio y SSL para el Administrador de Proxy Nginx

Establezcamos un nombre de dominio para acceder al Gestor de Proxy Nginx. Este paso es opcional, pero es √ļtil si desea poner la aplicaci√≥n detr√°s de SSL.

Haga clic en Hosts >> Proxy Hosts del men√ļ del tablero para abrir la p√°gina de Hosts Proxy. Desde all√≠, haga clic en el bot√≥n A√Īadir host proxy para continuar.

Pantalla de nuevo host proxy de Nginx Proxy Manager

A√Īada el nombre FQDN (npm.ejemplo.com) y haga clic en √©l. Introduzca la direcci√≥n IP de su servidor y 81 como Puerto de reenv√≠o.

Cambia a la pesta√Īa SSL.

Nginx Proxy Manager Configurar SSL

Seleccione Solicitar un nuevo certificado SSL en el men√ļ desplegable. Seleccione las opciones Forzar SSL y Soporte de HTTP/2. Si quieres habilitar HSTS, puedes habilitarlo tambi√©n. Si tiene su dominio configurado a trav√©s de Cloudflare, no habilite la opci√≥n Forzar SSL de lo contrario, se quedar√° atascado en un bucle de redirecci√≥n.

Introduzca su direcci√≥n de correo electr√≥nico, acepte las condiciones de servicio de Let’s Encrypt y haga clic en el bot√≥n Guardar para terminar.

Lista de hosts proxy del gestor de proxies Nginx

Tu dominio debería estar activo y funcionando. Intente abrir https://npm.example.com en su navegador, y debería obtener la pantalla de inicio de sesión de Nginx Proxy Manager.

Puedes hacerlo de forma similar para la página de aterrizaje por defecto y asignarla a un nombre de dominio como https://example.com. Sólo tienes que cambiar el puerto de 81 a 81 mientras configuras el host proxy.

Paso 8 РUsar el Administrador de Proxy Nginx con otra aplicación web Docker

Ahora que hemos instalado el gestor de proxy, es el momento de darle alg√ļn uso. Lo primero que vamos a hacer es utilizarlo para alojar otra aplicaci√≥n web Docker. Para ello, instalaremos el blog Ghost. Si quieres saber m√°s, consulta nuestro tutorial sobre la instalaci√≥n de Ghost usando Docker en un servidor Ubuntu.

Crea otro directorio para tu blog de Ghost.

$ mkdir ~/ghost

Cambia al directorio de Ghost.

$ cd ~/ghost

Cree dos directorios para el contenido y la base de datos.

$ mkdir {content,mysql}

Incluso si está usando la misma imagen de MySQL, debería mantener los datos y sus contenedores separados de los del gestor de Proxy. Esto ayudará a aislar cualquier problema que puedas encontrar y te permitirá mover cosas en caso de que lo necesites.

Cree y abra el archivo Docker compose para editarlo.

$ nano docker-compose.yml

Pegue el siguiente código. Sustituye example.com por el nombre de dominio real de tu blog Ghost. Introduce los datos SMTP si quieres recibir correos electrónicos. Puedes eliminarlos si no los necesitas.

version: '3.3'
services:

  ghost-app:
    image: ghost:latest
    container_name: ghost-app
    restart: always
    depends_on:
      - ghost-db
    environment:
      url: https://ghost.example.com
      database__client: mysql
      database__connection__host: ghost-db
      database__connection__user: ghost
      database__connection__password: ghostdbpass
      database__connection__database: ghostdb
      mail__transport: SMTP
      mail__options__host: {Your Mail Service host}
      mail__options__port: {Your Mail Service port}
      mail__options__secureConnection: {true/false}
      mail__options__service: {Your Mail Service}
      mail__options__auth__user: {Your User Name}
      mail__options__auth__pass: {Your Password}
    volumes:
      - /home/<username>/ghost/content:/var/lib/ghost/content
    networks:
      - npm-nw
      - ghost-network

  ghost-db:
    image: mariadb:latest
    container_name: ghost-db
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: your_mysql_root_password
      MYSQL_USER: ghost
      MYSQL_PASSWORD: ghostdbpass
      MYSQL_DATABASE: ghostdb
    volumes:
      - /home/<username>/ghost/mysql:/var/lib/mysql
    networks:
      - ghost-network

networks:
  ghost-network:
  npm-nw: 
    external: true

Guarde el archivo pulsando Ctrl + X e introduciendo Y cuando se le solicite.

Como puedes ver, hemos conectado el contenedor Ghost con el gestor de proxies Nginx utilizando la red externa npm-nw. De esta manera, no estamos exponiendo los puertos de Ghost al sistema. También hemos utilizado una red interna ghost-network para conectar nuestra app Ghost y el contenedor de base de datos correspondiente.

Inicie el contenedor.

$ docker-compose up -d

Configurar Ghost en el gestor de proxies de Nginx

Ahora, necesitamos configurar el proxy inverso para nuestra instalaci√≥n de Ghost. Abra el gestor de proxy Nginx en su navegador, vaya a Dashboard >> Hosts >> Proxy Hosty a√Īada un nuevo Proxy Host.

Ghost Blog Nginx Proxy Manager Configurar

Agregue el nombre de dominio que eligi√≥ para su blog Ghost. Para el Nombre de host/IP introduzca el nombre de su contenedor. En este caso, ser√≠a ghost-app. No podemos a√Īadir la direcci√≥n IP aqu√≠ porque no hemos expuesto el puerto de Ghost al servidor, y el proxy Nginx no podr√° llegar a Ghost a trav√©s de la IP. Por lo tanto, usamos el nombre del contenedor, al que NPM puede acceder usando la red de Docker npm-nw, que hemos creado. Utiliza 2368 como puerto, el puerto por defecto utilizado por el Blog de Ghost. Comprueba las otras opciones como se muestra en la captura de pantalla anterior.

A continuaci√≥n, cambie a la pesta√Īa SSL y cree un nuevo certificado SSL siguiendo el paso 6. Como vas a subir contenido a tu blog de Ghost, ser√≠a bueno establecer un tama√Īo m√°ximo de carga para tus subidas.

Afortunadamente, NPM te permite a√Īadir configuraciones personalizadas. Cambie a la Avanzado e introduzca client_max_body_size 50m; en la casilla.

Configuración avanzada de Ghost Blog NPM

Haga clic en el bot√≥n Guardar para terminar de a√Īadir el host proxy. Deber√≠as poder acceder a tu blog de Ghost a trav√©s de la URL https://ghost.exampl.com

Inicio del blog de Ghost

Paso 9 РUsar Nginx Proxy Manager como servicio de redirección

Veamos c√≥mo puedes utilizar NPM para redirigir un dominio a otro f√°cilmente. Para ello, visita Panel de control >> Hosts >> Hosts de redirecci√≥n. Desde all√≠, haga clic en el A√Īadir host de redirecci√≥n para empezar.

Host de redirección del gestor de proxy Nginx

Introduzca el nombre del dominio que desea redirigir. E introduzca el dominio de reenv√≠o. El dominio de reenv√≠o deber√≠a estar ya configurado. Deje el esquema como auto. Dependiendo de sus necesidades, puede elegir http o https. Seleccione la opci√≥n correcta C√≥digo HTTP y compruebe Preservar la ruta y Bloqueo de explotaciones comunes opciones. Si est√° utilizando un esquema auto o https, aseg√ļrese de haber seleccionado o creado un certificado SSL utilizando NPM. Haga clic en Guardar para terminar de a√Īadir el host de redirecci√≥n.

Su dominio example.com debería empezar a redirigir a blog.example.com.

Otros usos de Nginx Proxy Manager

Hay otras dos formas en las que puedes utilizar Nginx Proxy Manager. Puedes usarlo como un host 404, lo que significa que puedes usar un dominio como p√°gina de aterrizaje para mostrar a los motores de b√ļsqueda que las p√°ginas del dominio no existen. El paso incluye simplemente introducir un dominio y configurar SSL para √©l. Tambi√©n puede utilizar esto como una oportunidad para rastrear los registros para el nombre de dominio y ver el tr√°fico de referencia.

La otra caracter√≠stica es usar NPM como un host de flujo. Puede utilizar esta funci√≥n para reenviar puertos TCP/UDP a otro ordenador de la red. Esto es √ļtil si est√°s alojando servidores de juegos. Lo √ļnico que requiere es que introduzcas el puerto de entrada, el dominio de reenv√≠o o la direcci√≥n IP, el puerto de reenv√≠o y selecciones el tipo de puerto.

Ventana emergente del Administrador de Proxy de Nginx Nuevo Host de Flujo

Utilice el Administrador de Proxy Nginx para alojar un sitio web est√°tico

Nginx Proxy Manager puede alojar tambi√©n sitios web est√°ticos o din√°micos simples. Para ello, a√Īada un nuevo host proxy y elija 127.0.0.1 como el Dominio de reenv√≠o y 80 como el puerto.

Nginx Proxy Manager Static Website Host

Bajo el Avanzado introduzca la configuraci√≥n especificando el directorio ra√≠z. Aseg√ļrese de que el directorio ra√≠z para el sitio est√° montado en la configuraci√≥n inicial de Docker compose. Aqu√≠ estamos utilizando el directorio /data/static para alojar nuestro sitio web est√°tico.

Configuración avanzada del sitio estático del administrador de proxy Nginx

Haga clic en Guardar para terminar, y su sitio debería ser accesible. Del mismo modo, puedes alojar cualquier tipo de sitio utilizando el gestor de proxies.

Página de demostración del sitio estático

Paso 10 РCaracterísticas diversas

Utilizar la función de control de acceso de Nginx Proxy Manager

Puede utilizar la función de listas de acceso de NPM para habilitar la autenticación HTTP o bloquear rangos de IP. Abra NPM y visite la sección Dashboard >> Listas de Acceso página.

Haga clic en el A√Īadir lista de acceso para empezar.

Nueva lista de acceso del gestor de proxies Nginx

Puede nombrar su configuración de Lista de Acceso (ACL). El Satisfacer cualquier si está marcada, permitirá el acceso si el cliente cumple alguna de las condiciones especificadas. Si un cliente pasa la autenticación HTTP pero puede fallar el acceso basado en la IP, será permitido. Pero si el Satisface cualquier no está marcada, el cliente tendrá que cumplir todas las condiciones.

La página web Pasar la autenticación al host La función de autenticación se reenviará al servidor anfitrión.

A continuaci√≥n, cambie a la Autorizaci√≥n ficha. Aqu√≠ puede crear un nombre de usuario y una contrase√Īa para el m√©todo de autenticaci√≥n HTTP. Para a√Īadir m√°s de un usuario, haga clic en el bot√≥n A√Īadir …]. S√≥lo puedes a√Īadir hasta 5 usuarios. Y hay un error con el bot√≥n de a√Īadir, as√≠ que usa primero el bot√≥n y luego rellena los detalles. Si rellenas los detalles y haces clic en el bot√≥n despu√©s para a√Īadir otro usuario, se borran los datos del usuario anterior.

Configuración de la Autorización del Administrador de Proxy Nginx

Cambiar a la Acceda a ficha. Aquí puede establecer a qué direcciones IP se les debe dar o denegar el acceso.

Pesta√Īa de Acceso a IP del Administrador de Proxy Nginx

Haga clic en Guardar para terminar.

Para utilizar esta lista de acceso, es necesario seleccionarla al a√Īadir el host proxy. Como en el ejemplo de Ghost Blog de abajo, hemos seleccionado nuestra lista de acceso.

Soporte de la lista de acceso de proxy del gestor de proxys de Nginx

Habilitar soporte para m√°s nombres de dominio

A medida que el n√ļmero de hosts y dominios crece, su Nginx puede quedarse sin espacio de hash o puede tener problemas de memoria. Podemos a√Īadir una configuraci√≥n personalizada que se aplicar√° a todos los hosts para resolver este problema.

Para hacer esto, cree el directorio personalizado dentro de ~/nginx-proxy/data/nginx.

$ sudo mkdir ~/nginx-proxy/data/nginx/custom

Cree y abra el archivo http.conf dentro de este directorio.

$ sudo nano ~/nginx-proxy/data/nginx/custom/http.conf

Pegue las siguientes líneas en él.

proxy_headers_hash_max_size 1024;
proxy_headers_hash_bucket_size 128;

Guarde el archivo pulsando Ctrl + X e introduciendo Y cuando se le solicite.

Nginx debería aceptar automáticamente estos valores. Si no sucede, puedes reiniciar el contenedor NPM usando el siguiente comando.

$ docker restart npm-app

Redirigir la p√°gina de destino por defecto

En el paso 6, usted ve la página por defecto cuando escribe la URL http://<yourserverIP>. Si quiere cambiar eso, es posible hacerlo. Para ello, visite la página Página de configuración. Haga clic en los tres puntos de la derecha y pulse el botón Editar botón.

Nginx Proxy Manager Landing Page Edit

Puede configurar la p√°gina de destino para que act√ļe como una p√°gina 404, una p√°gina de redirecci√≥n o a√Īadirle HTML personalizado utilizando la opci√≥n P√°gina personalizada. Si selecciona Redirigir, tendr√° que especificar la URL de destino.

Configuración del sitio por defecto del Administrador de Proxy Nginx

Este es el HTML personalizado que utilizamos para nuestro propósito.

<!doctype html>
<html>
  <head>
    <title>Nothing Here</title>
    <meta charset="utf-8"/>
    <meta name="robots" content="noindex"/>
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <style>
      body { 
          text-align: center; 
          padding: 20px; 
          font: 20px Helvetica, sans-serif; 
          color: #333; 
        }
      @media (min-width: 768px){
          body{ padding-top: 150px; 
        }
      }
      h1 { 
          font-size: 50px; 
        }
      article { 
          display: block; 
          text-align: left; 
          max-width: 650px; 
          margin: 0 auto; 
        }
    </style>
  </head>
  <body>
    <article>
        <h1>Oops!</h1>
        <div>
            <p>Sorry for the inconvenience but you are not supposed to be here. You won't get anything here. This page was set for HowtoForge Nginx Proxy Manager Guide.  Maybe, someday it will show something.</p>
        </div>
    </article>
  </body>
</html>

Haga clic en Guardar para terminar. Su página de aterrizaje debería cambiar a algo como lo siguiente.

P√°gina de aterrizaje personalizada del Administrador de Proxy Nginx

Paso 11 – Actualizar el Gestor de Proxy Nginx

Para actualizar NPM, primero, detenga los contenedores.

$ cd ~/nginx-proxy
$ docker-compose down --remove-orphans

Saque las √ļltimas im√°genes.

$ docker-compose pull

Inicie los contenedores de nuevo.

$ docker-compose up -d

Conclusión

Con esto concluye nuestro tutorial en el que has instalado Nginx Proxy Manager y has aprendido a utilizarlo para a√Īadir un host proxy para otro contenedor Docker, utilizarlo como servicio de redirecci√≥n y controlar el acceso con √©l. Si tienes alguna pregunta, publ√≠cala en los comentarios a continuaci√≥n.

Deja una respuesta

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