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
- 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.
- 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
- En tu panel, ve a la pestaña 'Acceso' y cambia de token a mTLS.
- Genera un nuevo certificado en OneEntry ('Configuración' -> 'Certificados de Aplicación' -> 'Crear Nuevo Certificado').
- 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)
- Descarga el archivo setupProxy.js y guárdalo en la carpeta 'src'.
- Edita el parámetro 'target', especificando 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
Preparando el Servidor
- Actualiza la información del repositorio: `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 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 y edita la configuración de Nginx de OneEntry, reemplazando "your_domain.com" con tu dominio.
- 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.
- Emite certificados SSL usando Certbot: `certbot certonly --webroot -w /var/www/html -d your_domain`
- Verifica la renovación automática del certificado: `certbot renew --dry-run`.
- 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`
- 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).
- Verifica 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
Creando un nuevo usuario para GitHub Runner
- Genera una contraseña: 'pwgen -s 15 1'
- Crea un nuevo usuario: 'useradd -m github-runner'
- Establece una contraseña para él: 'passwd github-runner'
- Agrega el nuevo usuario a los grupos: 'usermod -aG docker github-runner' y 'usermod -aG sudo github-runner'.
- Cambia el shell para el usuario GitHub Runner: 'chsh -s /bin/bash github-runner'
- Cambia al nuevo usuario: 'sudo su - gitlab-runner'.
Configurando GitHub Runner
- Crea un GitHub Runner: ve a la configuración de tu repositorio, haz clic en 'Actions' y selecciona 'Runners', luego haz clic en 'Nuevo runner autoalojado'.
- Sigue las instrucciones en el bloque 'Descargar' y el primer comando en el bloque 'Configurar'.
- Agrega el Runner al inicio automático del sistema: 'sudo ./svc.sh install'. Necesitarás ingresar la contraseña generada anteriormente.
- Inicia el Runner: 'sudo ./svc.sh start'.
- Ve a la sección 'Actions', haz clic en 'Runners' y asegúrate de que el 'Runner' esté en funcionamiento.
- Cambia de nuevo al usuario 'root'.
- Crea un directorio de trabajo: 'mkdir -p /var/apps/frontend'
- Establece permisos para el usuario 'github-runner': 'chown -R github-runner:docker /var/apps/frontend'.
Configurando variables de entorno en GitHub
- Crea las variables `DOMAIN`, `MTLS_USER_CERT`, y `MTLS_USER_KEY` en tu repositorio de GitHub ('Configuración' -> 'Secretos y Variables').
- 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.
- 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 (puedes eliminar los archivos comprimidos después de la extracción).
- Ejecuta el comando de push en tu proyecto.
- Verifica el proceso en la pestaña 'Actions'.
- Verifica la accesibilidad de la aplicación en el navegador.
GitLab
Registrando GitLab Runner
- Especifica etiquetas 'docker, frontend'.
- Ve a 'Configuración -> CI/CD -> Runners' y haz clic en el botón 'Nuevo runner de proyecto'.
- Ve al directorio creado: `cd /var/apps/gitlab-runner`.
- Ejecuta el comando para iniciar el proceso de registro: `docker compose run runner register`.
- Ingresa la URL de GitLab, por ejemplo, https://gitlab.com/.
- Obtén el token de registro de GitLab (en la sección 'Runners' del proyecto) y pégalo en la terminal.
- Especifica el ejecutor como 'docker'.
- Especifica la imagen predeterminada como docker:20.10.16.
Configurando variables de entorno en GitLab
- Crea las variables `DOMAIN`, `MTLS_USER_CERT`, y `MTLS_USER_KEY` en tu repositorio de GitLab ('Configuración' -> 'CI/CD' -> 'Variables').
- 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`.
- 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)
- 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 como ese usuario.
- Guarda los cambios y sal del editor.
- Reinicia el Runner: 'systemctl restart gitlab-runner'.
Activando y verificando GitLab Runner
- Ejecuta el comando `docker compose up -d` para iniciar el Runner.
- 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)
- Sigue las Instrucciones para instalar un Runner adicional que se ejecute directamente en el host (no en Docker).
- Establece etiquetas para el Runner: 'shell, frontend'.
Permisos del Runner
- Agrega un nuevo usuario al grupo: 'usermod -aG docker gitlab-runner'
- Si necesitas cambiar el propietario y los grupos para un archivo o directorio: 'chown -R gitlab-runner:docker /var/apps/frontend'
Configuración Final y Pruebas
- Asegúrate de que todos los Runners estén correctamente configurados y listos para usar.
- Ejecuta el comando de push en tu proyecto.
- Verifica el progreso en 'Build' -> 'Pipelines'.
- 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!