mtls
Configuración del certificado mTLS en la plataforma OneEntry con tokens y mTLS, y despliegue de la aplicación en un servidor con Nginx, Docker y GitLab.
Parte 1: Configuración de mTLS
Protección de la API
- Con 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', cuyo valor es el token.
- Con mTLS: activa la opción mTLS en tu panel de OneEntry y genera el certificado en la configuración de OneEntry.
Configuración del certificado
info
La pestaña 'Application Certificates' aparece en la configuración de OneEntry solo después de activar mTLS para el proyecto. Mientras mTLS esté desactivado, la configuración muestra en su lugar la pestaña 'App tokens'.
- En tu panel, abre la pestaña 'Access' y cambia de token a mTLS.
- Genera un nuevo certificado en OneEntry: abre 'Settings' -> 'Application Certificates', escribe el nombre en el campo 'Application name' de la tarjeta 'Generate certificates for the application' y haz clic en 'Create'.
- Descárgalo en tu computadora y extráelo en la carpeta 'cert' de la raíz de tu proyecto.
Configuración del entorno local (con ReactJS como ejemplo)
- Descarga el archivo setupProxy.js y guárdalo en la carpeta 'src'.
- Edita el parámetro 'target' e indica la dirección de tu proyecto.
- Instala el paquete 'http-proxy-middleware': 'npm install http-proxy-middleware'.
- Inicia la aplicación.
Parte 2: Configuración del servidor
Preparación del servidor
- Actualiza la información de los repositorios: `apt update`.
- Agrega el repositorio de Docker e instala los paquetes: `apt install nginx certbot docker-ce pwgen`.
Configuración de UFW
- Bloquea todas las conexiones entrantes: `ufw default deny incoming`.
- Permite todas las conexiones salientes: `ufw default allow outgoing`.
- Permite las conexiones TCP entrantes en los puertos 22, 80 y 443: `ufw allow 22,80,443/tcp`.
Configuración de SSH
- Edita la configuración del demonio SSH: `nano /etc/ssh/sshd_config`.
- Establece `PasswordAuthentication no`.
- Reinicia el demonio SSH: `systemctl restart ssh`.
Configuración de Nginx
- Elimina el archivo de configuración predeterminado: `rm /etc/nginx/sites-available/default`
- Crea un nuevo archivo de configuración: `nano /etc/nginx/sites-available/my_app`.
- Descarga la configuración de Nginx de OneEntry y edítala: reemplaza "your_domain.com" por tu dominio.
- Ejecuta el comando ‘ln -s /etc/nginx/sites-available/my_app /etc/nginx/sites-enabled' y reemplaza "my_app" por el nombre de tu archivo de configuración.
- Emite los certificados SSL con Certbot: `certbot certonly --webroot -w /var/www/html -d your_domain`
- Comprueba la renovación automática de los certificados: `certbot renew --dry-run`.
- Edita la tarea cron de Certbot para que recargue automáticamente la configuración de Nginx después de emitir los certificados: ‘nano /etc/cron.d/certbot'. Reemplaza la última línea por: `echo "0 */12 * * * root certbot -q renew && nginx -s reload" > /etc/cron.d/certbot`
- Quita el comentario de las líneas del archivo de configuración 'nano /etc/nginx/sites-available/my_app' (donde 'my_app' es el nombre de tu archivo de configuración).
- Comprueba la configuración de Nginx: `nginx -t`
- Recarga Nginx después de cada cambio: `nginx -s reload`.
Parte 3: Despliegue de la aplicación con GitLab y GitHub
GitHub
Creación de un nuevo usuario para GitHub Runner
- Genera una contraseña: 'pwgen -s 15 1'
- Crea un nuevo usuario: 'useradd -m github-runner'
- Asígnale una contraseña: 'passwd github-runner'
- Agrega el nuevo usuario a los grupos: 'usermod -aG docker github-runner' y 'usermod - aG sudo github-runner'.
- Cambia el shell del usuario de GitHub Runner: 'chsh -s /bin/bash github-runner'
- Cambia al nuevo usuario: 'sudo su - gitlab-runner'.
Configuración de GitHub Runner
- Crea un GitHub Runner: abre la configuración de tu repositorio, haz clic en 'Actions', selecciona 'Runners' y haz clic en 'New self-hosted runner'.
- Sigue las instrucciones del bloque 'Download' y ejecuta el primer comando del bloque 'Configure'.
- Agrega el Runner al inicio automático del sistema: 'sudo ./svc.sh install'. Tendrás que introducir la contraseña que generaste antes.
- Inicia el Runner: 'sudo ./svc.sh start'.
- Abre la sección 'Actions', haz clic en 'Runners' y comprueba que el 'Runner' está en ejecución.
- Vuelve al usuario 'root'.
- Crea un directorio de trabajo: 'mkdir -p /var/apps/frontend'
- Asigna los permisos al usuario 'github-runner': 'chown -R github-runner:docker /var/apps/frontend'.
Configuración de variables de entorno en GitHub
- Crea las variables `DOMAIN`, `MTLS_USER_CERT` y `MTLS_USER_KEY` en tu repositorio de GitHub ('Settings' -> 'Secrets and Variables').
- Genera un certificado en OneEntry y agrega el certificado y la clave a las variables. En la variable `DOMAIN`, indica la dirección de tu proyecto sin https.
- Descarga el archivo docker-compose.yml y dos archivos comprimidos: .github y .docker.
- Coloca docker-compose.yml, .github.zip y .docker.zip en la carpeta raíz de tu proyecto y extrae los archivos comprimidos (después puedes eliminarlos).
- Ejecuta el comando push en tu proyecto.
- Sigue el proceso en la pestaña 'Actions'.
- Comprueba en el navegador que la aplicación está accesible.
GitLab
Registro de GitLab Runner
- Indica las etiquetas 'docker, frontend'.
- Abre 'Settings -> CI/CD -> Runners' y haz clic en el botón 'New project runner'.
- Ve al directorio creado: `cd /var/apps/gitlab-runner`.
- Inicia el proceso de registro: `docker compose run runner register`.
- Introduce la URL de GitLab, por ejemplo, https://gitlab.com/.
- Copia el token de registro de GitLab (en la sección 'Runners' del proyecto) y pégalo en la terminal.
- Indica 'docker' como ejecutor.
- Indica docker:20.10.16 como imagen predeterminada.
Configuración de variables de entorno en GitLab
- Crea las variables `DOMAIN`, `MTLS_USER_CERT` y `MTLS_USER_KEY` en tu repositorio de GitLab ('Settings' -> 'CI/CD' -> 'Variables').
- Genera un certificado en OneEntry, agrega el certificado y la clave a las variables e indica en la variable `DOMAIN` la dirección de tu proyecto sin https.
- Descarga los archivos docker-compose.yml y .gitlab-ci.yml y el archivo comprimido .docker. Colócalos en la raíz de tu proyecto y descomprime los archivos comprimidos (después puedes eliminarlos).
Preparación de la configuración de GitLab Runner (ejecutor Docker)
- Crea los directorios necesarios: `mkdir -p /var/apps/gitlab-runner/volumes/etc/gitlab-runner`
- 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
- Edita el archivo de configuración: `nano volumes/etc/gitlab-runner/config.toml`.
- Establece el parámetro `priviledged` en `true` para habilitar Docker-in-Docker.
- Cambia el valor de `volumes` a `['/var/run/docker.sock:/var/run/docker.sock', '/cache']` para que Docker funcione correctamente.
- Agrega `user = 'gitlab-runner'` al principio del archivo para ejecutar el Runner con ese usuario.
- Guarda los cambios y sal del editor.
- Reinicia el Runner: 'systemctl restart gitlab-runner'.
Activación y comprobación de GitLab Runner
- Ejecuta `docker compose up -d` para iniciar el Runner.
- En GitLab, comprueba que el Runner está activo y en ejecución (su estado aparece en la sección 'Runners' del proyecto).
Configuración de un Runner adicional en el host (ejecutor shell)
- Sigue las instrucciones para instalar un Runner adicional que se ejecute directamente en el host (no en Docker).
- Asigna al Runner las etiquetas 'shell, frontend'.
Permisos del Runner
- Agrega un nuevo usuario al grupo: 'usermod -aG docker gitlab-runner'
- 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
- Comprueba que todos los Runners están bien configurados y listos para usarse.
- Ejecuta el comando push en tu proyecto.
- Sigue el progreso en 'Build' -> 'Pipelines'.
- Comprueba en el navegador que la aplicación está disponible.
Conclusión
Sigue estos pasos para configurar y desplegar tu aplicación con OneEntry. ¡Mucha suerte con el desarrollo!