Saltar al contenido principal

mtls

Setting up and configuring mTLS certificate for Headless CMS OneEntry using tokens and mTLS, as well as deploying the application on a server with Nginx, Docker, and GitLab

Parte 1: Configuración de mTLS

Protegiendo la API
  1. 1. Usando Token: Genera un token en la configuración de OneEntry y añádelo a los encabezados de la solicitud con el parámetro 'x-app-token', donde el valor es el token.
  2. 2. Usando mTLS: Habilita la opción mTLS en tu panel de OneEntry y genera el certificado en la configuración de OneEntry.
Configuración del certificado
  1. 1. En tu panel, ve a la pestaña 'Acceso' y cambia de token a mTLS.
  2. 2. Genera un nuevo certificado en OneEntry ('Configuración' -> 'Certificados de Aplicación' -> 'Crear Nuevo Certificado').
  3. 3. Descárgalo en tu computadora y extráelo en la carpeta 'cert' en la raíz de tu proyecto.
Configuración del entorno local (usando ReactJS como ejemplo)
  1. 1. Descarga el archivo setupProxy.js y guárdalo en la carpeta 'src'.
  2. 2. Edita el parámetro 'target', especificando la dirección de tu proyecto.
  3. 3. Instala el paquete 'http-proxy-middleware': 'npm install http-proxy-middleware'.
  4. 4. Inicia la aplicación.

Parte 2: Configuración del Servidor

Preparando el Servidor
  1. 1. Actualiza la información del repositorio: `apt update`.
  2. 2. Añade el repositorio de Docker e instala los paquetes: `apt install nginx certbot docker-ce pwgen`.
Configuración de UFW
  1. 1. Bloquea todas las conexiones entrantes: `ufw default deny incoming`.
  2. 2. Permite todas las conexiones salientes: `ufw default allow outgoing`.
  3. 3. Permite conexiones TCP entrantes en los puertos 22, 80 y 443: `ufw allow 22,80,443/tcp`.
Configuración de SSH
  1. 1. Edita la configuración del demonio SSH: `nano /etc/ssh/sshd_config`.
  2. 2. Establece `PasswordAuthentication no`.
  3. 3. Reinicia el demonio SSH: `systemctl restart ssh`.
Configuración de Nginx
  1. 1. Elimina el archivo de configuración predeterminado: `rm /etc/nginx/sites-available/default`
  2. 2. Crea un nuevo archivo de configuración: `nano /etc/nginx/sites-available/my_app`.
  3. 3. Descarga y edita la configuración de Nginx de OneEntry, reemplazando "your_domain.com" con tu dominio.
  4. 4. Luego ejecuta el comando: ‘ln -s /etc/nginx/sites-available/my_app /etc/nginx/sites-enabled', reemplazando "my_app" con el nombre de tu archivo de configuración.
  5. 5. Emite certificados SSL usando Certbot: `certbot certonly --webroot -w /var/www/html -d your_domain`
  6. 6. Verifica la renovación automática del certificado: `certbot renew --dry-run`.
  7. 7. Edita la tarea cron de Certbot para recargar automáticamente la configuración de Nginx después de la emisión de certificados: ‘nano /etc/cron.d/certbot', reemplazando la última línea con: `echo "0 */12 * * * root certbot -q renew && nginx -s reload" > /etc/cron.d/certbot`
  8. 8. Descomenta las líneas en el archivo de configuración 'nano /etc/nginx/sites-available/my_app' (donde 'my_app' es el nombre de tu archivo de configuración).
  9. 9. Verifica la configuración de Nginx: `nginx -t`
  10. 10. Recarga Nginx después de cada cambio: `nginx -s reload`.

Parte 3: Despliegue de la Aplicación con GitLab y GitHub

GitHub
Creando un nuevo usuario para GitHub Runner
  1. 1. Genera una contraseña: 'pwgen -s 15 1'
  2. 2. Crea un nuevo usuario: 'useradd -m github-runner'
  3. 3. Establece una contraseña para él: 'passwd github-runner'
  4. 4. Añade el nuevo usuario a los grupos: 'usermod -aG docker github-runner' y 'usermod -aG sudo github-runner'.
  5. 5. Cambia el shell para el usuario GitHub Runner: 'chsh -s /bin/bash github-runner'
  6. 6. Cambia al nuevo usuario: 'sudo su - gitlab-runner'.
Configurando GitHub Runner
  1. 1. Crea un GitHub Runner: ve a la configuración de tu repositorio, haz clic en 'Actions' y selecciona 'Runners', luego haz clic en 'New self-hosted runner'.
  2. 2. Sigue las instrucciones en el bloque 'Download' y el primer comando en el bloque 'Configure'.
  3. 3. Añade el Runner al inicio automático del sistema: 'sudo ./svc.sh install'. Necesitarás ingresar la contraseña generada anteriormente.
  4. 4. Inicia el Runner: 'sudo ./svc.sh start'.
  5. 5. Ve a la sección 'Actions', haz clic en 'Runners' y asegúrate de que el 'Runner' esté en funcionamiento.
  6. 6. Vuelve al usuario 'root'.
  7. 7. Crea un directorio de trabajo: 'mkdir -p /var/apps/frontend'
  8. 8. Establece permisos para el usuario 'github-runner': 'chown -R github-runner:docker /var/apps/frontend'.
Configurando variables de entorno en GitHub
  1. 1. Crea las variables `DOMAIN`, `MTLS_USER_CERT`, y `MTLS_USER_KEY` en tu repositorio de GitHub ('Configuración' -> 'Secrets and Variables').
  2. 2. Genera un certificado en OneEntry, añade el certificado y la clave a las variables. En la variable `DOMAIN`, especifica la dirección de tu proyecto sin https.
  3. 3. Descarga el archivo docker-compose.yml y dos archivos comprimidos .github y .docker.
  4. 4. Coloca docker-compose.yml, .github.zip y .docker.zip en la carpeta raíz de tu proyecto y extrae los archivos (puedes eliminar los archivos comprimidos después de la extracción).
  5. 5. Ejecuta el comando de push en tu proyecto.
  6. 6. Verifica el proceso en la pestaña 'Actions'.
  7. 7. Verifica la accesibilidad de la aplicación en el navegador.
GitLab
Registrando GitLab Runner
  1. 1. Especifica etiquetas 'docker, frontend'.
  2. 2. Ve a 'Configuración -> CI/CD -> Runners' y haz clic en el botón 'Nuevo runner de proyecto'.
  3. 3. Ve al directorio creado: `cd /var/apps/gitlab-runner`.
  4. 4. Ejecuta el comando para iniciar el proceso de registro: `docker compose run runner register`.
  5. 5. Ingresa la URL de GitLab, por ejemplo, https://gitlab.com/.
  6. 6. Obtén el token de registro de GitLab (en la sección 'Runners' del proyecto) y pégalo en la terminal.
  7. 7. Especifica el ejecutor como 'docker'.
  8. 8. Especifica la imagen predeterminada como docker:20.10.16.
Configurando variables de entorno en GitLab
  1. 1. Crea las variables `DOMAIN`, `MTLS_USER_CERT`, y `MTLS_USER_KEY` en tu repositorio de GitLab ('Configuración' -> 'CI/CD' -> 'Variables').
  2. 2. Genera un certificado en OneEntry, añade el certificado y la clave a las variables, y especifica la dirección de tu proyecto sin https en la variable `DOMAIN`.
  3. 3. Descarga los archivos docker-compose.yml, .gitlab-ci.yml, y el archivo comprimido .docker, coloca los archivos en la raíz de tu proyecto y descomprime los archivos (puedes eliminar los archivos comprimidos después de descomprimir).
Preparando la configuración de GitLab Runner (ejecutor Docker)
  1. 1. Crea los directorios necesarios: `mkdir -p /var/apps/gitlab-runner/volumes/etc/gitlab-runner`
  2. 2. Ejecuta el comando: `cat \ /var/apps/gitlab-runner/docker-compose.yamlversion: '3' services: runner: image: 'gitlab/gitlab-runner:v16.2.0' restart: always container_name: 'gitlab-runner' privileged: true volumes: - './volumes/etc/gitlab-runner:/etc/gitlab-runner' - '/var/run/docker.sock:/var/run/docker.sock' EOT`
Configuración de GitLab Runner
  1. 1. Edita el archivo de configuración: `nano volumes/etc/gitlab-runner/config.toml`.
  2. 2. Establece el parámetro `priviledged` a `true` para habilitar Docker-in-Docker.
  3. 3. Cambia el valor de `volumes` a `['/var/run/docker.sock:/var/run/docker.sock', '/cache']` para que Docker funcione correctamente.
  4. 4. Añade `user = 'gitlab-runner'` al principio del archivo para ejecutar el Runner como ese usuario.
  5. 5. Guarda los cambios y sal del editor.
  6. 6. Reinicia el Runner: 'systemctl restart gitlab-runner'.
Activando y verificando GitLab Runner
  1. 1. Ejecuta el comando `docker compose up -d` para iniciar el Runner.
  2. 2. Ve a GitLab y verifica que el Runner esté activo y en funcionamiento (deberías ver su estado en la sección 'Runners' del proyecto).
Configurando un Runner adicional en el host (ejecutor shell)
  1. 1. Sigue las Instrucciones para instalar un Runner adicional que se ejecute directamente en el host (no en Docker).
  2. 2. Establece etiquetas para el Runner: 'shell, frontend'.
Permisos del Runner
  1. 1. Añade un nuevo usuario al grupo: 'usermod -aG docker gitlab-runner'
  2. 2. Si necesitas cambiar el propietario y los grupos de un archivo o directorio: 'chown -R gitlab-runner:docker /var/apps/frontend'

Configuración Final y Pruebas

  1. 1. Asegúrate de que todos los Runners estén correctamente configurados y listos para usar.
  2. 2. Ejecuta el comando de push en tu proyecto.
  3. 3. Verifica el progreso en 'Build' -> 'Pipelines'.
  4. 4. Verifica la disponibilidad de la aplicación en el navegador.

Conclusión

Sigue estos pasos para una configuración y despliegue exitoso de tu aplicación con OneEntry. ¡Buena suerte con el desarrollo!