Skip to content

Despliegue ​

Esta sección cubre la instalación y el mantenimiento centralizado del servidor de CertGuardian mediante contenedores Docker. Aquí encontrarás los requisitos del sistema, la configuración de la base de datos y la orquestación necesaria para desplegar la plataforma Backoffice y Backend.

Preparación de carpetas ​

Inicia sesión en nuestro repositorio de imágenes de docker:

bash
docker login gitea.entorno.es:3000

Clona el repositorio:

bash
git clone https://gitea.entorno.es:3000/CertGuardian/certguardian-docker-images

Entra a la carpeta del repositorio:

bash
cd certguardian-docker-images

Preparación de subdominios ​

Prepara 3 subdominios que apunten a la IP del servidor:

  • backoffice.mi-dominio.es
  • backend.mi-dominio.es
  • reverb.mi-dominio.es

Configuración backoffice(dejar por defecto) ​

bash
cp backoffice/config.js.example backoffice/config.js
bash
vi backoffice/config.js

Rellena los valores de configuración necesarios en el archivo config.js

  • API_BASE_URL: Pon la URL del backend incluyendo https y añade al final "/api". Si el subdominio de backend es: backend.mi-dominio.es, entonces la configuración será: "https://backend.mi-dominio.es/api",
  • LOGIN_ROUTE: (dejar por defecto)
  • REVERB_HOST: Pon el subdominio de reverb.mi-dominio.es, sin ningún protocolo.
  • REVERB_PORT: (dejar por defecto)
  • REVERB_KEY: Genera una clave con openssl rand -hex 16, guárdala para más adelante

img_3.png

Configuración backend y base de datos ​

bash
cp docker-compose.yml.example docker-compose.yml
bash
vi docker-compose.yml

Rellena esta variables en el enviroment del servicio certguardian del docker-compose:

      - BACKOFFICE_URL="https://backoffice.mi-dominio.es" // URL del backoffice
      - CERTBOT_MAIL="mail@mi-dominio.es" // Email de notificaciones de certbot https://community.letsencrypt.org/t/what-is-the-email-used-for-when-i-run-certbot-at-the-first-time/119911/2
      - CERTBOT_MAIL_PRIORITY=1
      - DAYS_EXPIRY_RENEW=5 // Numero de días que para que caduque un certificado para que certguardian empiece a renovar
      - DB_USERNAME=root
      - DB_PASSWORD=password // Genera una contreseña segura con `tr -cd [:graph:] < /dev/random | head -c15`
      - APP_KEY=base64:<salida de `openssl rand -base64 32`> # Añade el prefijo `base64:` delante del valor generado
      - REVERB_APP_ID=12345
      - REVERB_APP_KEY=xxxxx // Usa el valor de REVERB_KEY que generaste anteriormente
      - REVERB_APP_SECRET=xxxxx_secret // Ggenerála con `openssl rand -hex 32`
      - MAIL_ADDRESS_FOR_NOTIFICATIONS="mail@mi-dominio.es" // Dirección de correo que recibirá las notificaciones de errores de la aplicacion (error al emitir, error al instalar un certificado...)
      // configuración de la cuenta de correo que enviara los correos de la aplicación (hooks de correo y notificaciones de error de la aplicación)
      - MAIL_DRIVER=smtp
      - MAIL_MAILER=smtp
      - MAIL_SCHEME=smtp
      - MAIL_HOST=mail.mi-dominio.es
      - MAIL_PORT=587
      - MAIL_USERNAME=mail@mi-dominio.es
      - MAIL_PASSWORD="xxxxx"
      - MAIL_FROM_ADDRESS="mail@mi-dominio.es"

Ve al servicio db and rellena el MYSQL_ROOT_PASSWORD en la sección de enviroment con el valor del paso anterior.

  db:
    image: mysql:8.0
    container_name: certguardian_db
    restart: unless-stopped
    ports:
        - "3306:3306"
    environment:
      MYSQL_ROOT_PASSWORD: certguardian // <---- aquí
      MYSQL_DATABASE: certguardian
      MYSQL_ROOT_HOST: '%'

Configuración de correo sin autenticación ​

Si la dirección de correo no utiliza autenticación, pon esto en el enviroment del servicio certguardian en docker-compose.yml:

env
      - MAIL_MAILER=smtp
      - MAIL_HOST=mi.host.smtp
      - MAIL_PORT=puerto-smtp
      - MAIL_DRIVER=null
      - MAIL_SCHEME=null
      - MAIL_USERNAME=null
      - MAIL_PASSWORD=null
      - MAIL_ENCRYPTION=null
      - MAIL_FROM_ADDRESS="remitente@dominio.es"
      - MAIL_FROM_NAME="${COMPANY_NAME}"

Prueba de envío de correos ​

Ejecuta este comando (dentro del contenedor certguardian) para comprobar si la configuración del correo es correcta y puede enviar correos:

bash
php artisan mail:test direccion@de.destino

Configuración NGINX ​

Crea una copia del fichero de configuración de nginx

bash
cp nginx/conf.d/nginx.conf.example nginx/conf.d/nginx.conf

Y sustituye los subdominios por los que creaste

bash
sed -i \
-e 's/backend\.dominio\.es/backend.mi-dominio.es/g' \
-e 's/reverb\.dominio\.es/reverb.mi-dominio.es/g' \
-e 's/backoffice\.dominio\.es/backoffice.mi-dominio.es/g' \
nginx/conf.d/nginx.conf

Sustituye "mi-dominio.es" por el dominio que quieras usar. Y backend, reverb y backoffice por los subdominios que creaste.

Si no te funciona el comando anterior, puedes editar manualmente el archivo nginx.conf y reemplazar las ocurrencias de backend.mi-dominio.es, reverb.mi-dominio.es y backoffice.mi-dominio.es.

bash
vi nginx/conf.d/nginx.conf

Copia los certificados de tu dominio a la carpeta nginx/certs

bash
cp /ruta-de-mi-certificado/fullchain nginx/certs/fullchain.pem
bash
cp /ruta-de-mi-certificado/privkey.pem nginx/certs/privkey.pem

Levantar contenedores ​

Levanta los contenedores

bash
docker compose up -d

Entra al contendor del backend

bash
docker compose exec certguardian bash

Si falla puedes consultar el nombre del contenedor con docker ps

Generar las claves SSH ​

Crea las claves ssh para el hook de ssh. Dentro del contenedor, ejecuta:

bash
ssh-keygen -t rsa -b 4096 -f /var/www/certguardian/ssh-keys/id_rsa

Genera las claves ssh sin passphrase.

Asegúrate de establecer los permisos correctos una vez creada la claves ssh:

bash
chown www-data:www-data /var/www/certguardian/ssh-keys/
chown www-data:www-data /var/www/certguardian/ssh-keys/*
chmod 700 /var/www/certguardian/ssh-keys
ls -la /var/www/certguardian/ssh-keys/

Crea usuario administrador ​

Ve a <mi-url-del-backoffice>/register y completa el formulario para crear un usuario administrador: img_2.png Una vez creado el usuario, iniciarás sesión automáticamente.

Siguentes pasos ​

CertGuardian es una herramienta de automatización del ciclo de vida SSL/TLS desarrollada y respaldada por Entorno Digital.