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. 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. 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. Añade 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. Añade 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 'Actions' y selecciona 'Runners', luego haz clic en 'New self-hosted runner'.
- 2. Sigue las instrucciones en el bloque 'Download' y el primer comando en el bloque 'Configure'.
- 3. Añade 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 'Actions', 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' -> 'Secrets and Variables').
- 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. 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 'Actions'.
- 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, 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. 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. 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.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. Edita el archivo de configuración: `nano volumes/etc/gitlab-runner/config.toml`.
- 2. Establece el parámetro `priviledged` a `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. Añade `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 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 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. Añade 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 'Build' -> 'Pipelines'.
- 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!