Saltar al contenido principal

mtls

Configuración y configuración del certificado mTLS para Platform OneEntry utilizando tokens y mTLS, así como el despliegue de la aplicación en un servidor con Nginx, Docker y GitLab

Parte 1: Configuración de mTLS

Protegiendo la API

  1. Usando Token: Genera un token en la configuración de OneEntry y agrégalo a los encabezados de la solicitud con el parámetro 'x-app-token', donde el valor es el token.
  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. En tu panel, ve a la pestaña 'Acceso' y cambia de token a mTLS.
  2. Genera un nuevo certificado en OneEntry ('Configuración' -> 'Certificados de Aplicación' -> 'Crear Nuevo Certificado').
  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. Descarga el archivo setupProxy.js y guárdalo en la carpeta 'src'.
  2. Edita el parámetro 'target', especificando la dirección de tu proyecto.
  3. Instala el paquete 'http-proxy-middleware': 'npm install http-proxy-middleware'.
  4. Inicia la aplicación.

Parte 2: Configuración del Servidor

Preparando el Servidor

  1. Actualiza la información del repositorio: apt update.
  2. Agrega el repositorio de Docker e instala los paquetes: apt install nginx certbot docker-ce pwgen.

Configuración de UFW

  1. Bloquea todas las conexiones entrantes: ufw default deny incoming.
  2. Permite todas las conexiones salientes: ufw default allow outgoing.
  3. Permite conexiones TCP entrantes en los puertos 22, 80 y 443: ufw allow 22,80,443/tcp.

Configuración de SSH

  1. Edita la configuración del demonio SSH: nano /etc/ssh/sshd_config.
  2. Establece PasswordAuthentication no.
  3. Reinicia el demonio SSH: systemctl restart ssh.

Configuración de Nginx

  1. Elimina el archivo de configuración predeterminado: rm /etc/nginx/sites-available/default.
  2. Crea un nuevo archivo de configuración: nano /etc/nginx/sites-available/my_app.
  3. Descarga y edita la configuración de Nginx de OneEntry, reemplazando "your_domain.com" con tu dominio.
  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. Emite certificados SSL usando Certbot: certbot certonly --webroot -w /var/www/html -d your_domain.
  6. Verifica la renovación automática del certificado: certbot renew --dry-run.
  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. 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. Verifica la configuración de Nginx: nginx -t.
  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. Genera una contraseña: 'pwgen -s 15 1'.
  2. Crea un nuevo usuario: 'useradd -m github-runner'.
  3. Establece una contraseña para él: 'passwd github-runner'.
  4. Agrega el nuevo usuario a los grupos: 'usermod -aG docker github-runner' y 'usermod -aG sudo github-runner'.
  5. Cambia el shell para el usuario GitHub Runner: 'chsh -s /bin/bash github-runner'.
  6. Cambia al nuevo usuario: 'sudo su - gitlab-runner'.

Configurando GitHub Runner

  1. Crea un GitHub Runner: ve a la configuración de tu repositorio, haz clic en 'Acciones' y selecciona 'Runners', luego haz clic en 'Nuevo runner autoalojado'.
  2. Sigue las instrucciones en el bloque 'Descargar' y el primer comando en el bloque 'Configurar'.
  3. Agrega el Runner al inicio automático del sistema: 'sudo ./svc.sh install'. Necesitarás ingresar la contraseña generada anteriormente.
  4. Inicia el Runner: 'sudo ./svc.sh start'.
  5. Ve a la sección 'Acciones', haz clic en 'Runners' y asegúrate de que el 'Runner' esté en funcionamiento.
  6. Vuelve al usuario 'root'.
  7. Crea un directorio de trabajo: 'mkdir -p /var/apps/frontend'.
  8. Establece permisos para el usuario 'github-runner': 'chown -R github-runner:docker /var/apps/frontend'.

Configurando variables de entorno en GitHub

  1. Crea las variables DOMAIN, MTLS_USER_CERT y MTLS_USER_KEY en tu repositorio de GitHub ('Configuración' -> 'Secretos y Variables').
  2. Genera un certificado en OneEntry, agrega el certificado y la clave a las variables. En la variable DOMAIN, especifica la dirección de tu proyecto sin https.
  3. Descarga el archivo docker-compose.yml y dos archivos comprimidos .github y .docker.
  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. Ejecuta el comando de push en tu proyecto.
  6. Verifica el proceso en la pestaña 'Acciones'.
  7. Verifica la accesibilidad de la aplicación en el navegador.
GitLab

Registrando GitLab Runner

  1. Especifica etiquetas 'docker, frontend'.
  2. Ve a 'Configuración -> CI/CD -> Runners' y haz clic en el botón 'Nuevo runner de proyecto'.
  3. Ve al directorio creado: cd /var/apps/gitlab-runner.
  4. Ejecuta el comando para iniciar el proceso de registro: docker compose run runner register.
  5. Ingresa la URL de GitLab, por ejemplo, https://gitlab.com/.
  6. Obtén el token de registro de GitLab (en la sección 'Runners' del proyecto) y pégalo en la terminal.
  7. Especifica el ejecutor como 'docker'.
  8. Especifica la imagen predeterminada como docker:20.10.16.

Configurando variables de entorno en GitLab

  1. Crea las variables DOMAIN, MTLS_USER_CERT y MTLS_USER_KEY en tu repositorio de GitLab ('Configuración' -> 'CI/CD' -> 'Variables').
  2. Genera un certificado en OneEntry, agrega el certificado y la clave a las variables, y especifica la dirección de tu proyecto sin https en la variable DOMAIN.
  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 del GitLab Runner (ejecutor de Docker)

  1. Crea los directorios necesarios: mkdir -p /var/apps/gitlab-runner/volumes/etc/gitlab-runner.
  2. Ejecuta el comando: cat /var/apps/gitlab-runner/docker-compose.yaml version: '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 del GitLab Runner

  1. Edita el archivo de configuración: nano volumes/etc/gitlab-runner/config.toml.
  2. Establece el parámetro privileged en true para habilitar Docker-in-Docker.
  3. Cambia el valor de volumes a ['/var/run/docker.sock:/var/run/docker.sock', '/cache'] para que Docker funcione correctamente.
  4. Agrega user = 'gitlab-runner' al principio del archivo para ejecutar el Runner como ese usuario.
  5. Guarda los cambios y sal del editor.
  6. Reinicia el Runner: 'systemctl restart gitlab-runner'.

Activando y verificando el GitLab Runner

  1. Ejecuta el comando docker compose up -d para iniciar el Runner.
  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 de shell)

  1. Sigue las Instrucciones para instalar un Runner adicional que se ejecute directamente en el host (no en Docker).
  2. Establece etiquetas para el Runner: 'shell, frontend'.

Permisos del Runner

  1. Agrega un nuevo usuario al grupo: 'usermod -aG docker gitlab-runner'.
  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. Asegúrate de que todos los Runners estén correctamente configurados y listos para usar.
  2. Ejecuta el comando de push en tu proyecto.
  3. Verifica el progreso en 'Construir' -> 'Pipelines'.
  4. Verifica la disponibilidad de la aplicación en el navegador.

Conclusión

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