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 'Acciones' 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 'Acciones', haz clic en 'Runners' y asegúrate de que el 'Runner' esté en funcionamiento.
- Vuelve 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
yMTLS_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 'Acciones'.
- 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
yMTLS_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 del GitLab Runner (ejecutor de 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.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
- Edita el archivo de configuración:
nano volumes/etc/gitlab-runner/config.toml
. - Establece el parámetro
privileged
entrue
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 el 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 de 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 de 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 'Construir' -> '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!