mTLS y despliegue
Cómo proteger un proyecto de OneEntry con un token o un certificado mTLS y desplegar la aplicación en un servidor con Nginx, Docker y GitLab o GitHub.
Parte 1: Configurar mTLS
Proteger la API
- Token: genera un token en la configuración de OneEntry y envíalo en el encabezado de solicitud
x-app-token. - mTLS: activa mTLS en tu panel de OneEntry y genera un certificado en la configuración de OneEntry.
Configurar el certificado
- En tu panel, abre la pestaña Access y cambia de token a mTLS.
- Genera un certificado nuevo en OneEntry (Settings → Application Certificates → Create New Certificate).
- Descárgalo y extráelo en una carpeta
certen la raíz de tu proyecto.
Configurar el entorno local (ejemplo con React)
- Descarga setupProxy.js y guárdalo en la carpeta
src. - Establece el parámetro
targetcon la dirección de tu proyecto. - Instala
http-proxy-middleware:npm install http-proxy-middleware. - Inicia la aplicación.
Inicializar el SDK
Con mTLS activado, la API no comprueba el token de la aplicación. Inicializa el SDK con la URL de tu proyecto como siempre. El SDK 1.0.175 sigue exigiendo un token no vacío, así que pasa cualquier cadena de relleno:
const api = defineOneEntry('https://your-project.oneentry.cloud', {
token: 'mtls', // not checked when mTLS is enabled
});
Parte 2: Configuración del servidor
Preparar el servidor
- Actualiza la información de los repositorios:
apt update. - Añade 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 daemon SSH:
nano /etc/ssh/sshd_config. - Establece
PasswordAuthentication no. - Reinicia el daemon 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 sustituye "your_domain.com" por tu dominio.
- Ejecuta:
ln -s /etc/nginx/sites-available/my_app /etc/nginx/sites-enabled, sustituyendo "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 certificados:
certbot renew --dry-run. - Edita la tarea cron de Certbot para que Nginx recargue su configuración después de emitir los certificados:
nano /etc/cron.d/certbot, sustituyendo la última línea por:echo "0 */12 * * * root certbot -q renew && nginx -s reload" > /etc/cron.d/certbot - Descomenta las líneas del archivo de configuración
nano /etc/nginx/sites-available/my_app(dondemy_appes 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: Desplegar la aplicación con GitLab o GitHub
Acceso del runner. El usuario del runner de GitHub se une a los grupos
dockerysudo, y el runner de GitLab se ejecuta en modo privilegiado con el socket de Docker del host. Ambos dan control de nivel root sobre el host, así que registra el runner solo para tu propio repositorio y no le permitas ejecutar trabajos de forks ni de merge requests que no sean de confianza. Las versiones de las imágenes son las que se usaron para probar esta guía; usa versiones actuales con soporte degitlab/gitlab-runnerydocker.
GitHub
Crear un usuario para el runner de GitHub
- 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. - Añade el nuevo usuario a los grupos:
usermod -aG docker github-runneryusermod -aG sudo github-runner. - Cambia el shell del usuario del runner:
chsh -s /bin/bash github-runner. - Cambia al nuevo usuario:
sudo su - github-runner.
Configurar el runner de GitHub
- Crea un runner: en la configuración de tu repositorio, abre Actions → Runners y haz clic en New self-hosted runner.
- Sigue las instrucciones del bloque Download y ejecuta el primer comando del bloque Configure.
- Añade el runner al inicio automático del sistema:
sudo ./svc.sh install. Introduce la contraseña que generaste antes. - Inicia el runner:
sudo ./svc.sh start. - En Actions → Runners, comprueba que el runner está en ejecución.
- Vuelve al usuario
root. - Crea un directorio de trabajo:
mkdir -p /var/apps/frontend. - Concede permisos al usuario
github-runner:chown -R github-runner:docker /var/apps/frontend.
Configurar las variables de entorno en GitHub
- Crea las variables
DOMAIN,MTLS_USER_CERTyMTLS_USER_KEYen tu repositorio de GitHub (Settings → Secrets and Variables). - Genera un certificado en OneEntry y coloca el certificado y la clave en las variables. Establece
DOMAINcon la dirección de tu proyecto sin https. - Descarga el archivo docker-compose.yml y los dos archivos comprimidos .github y .docker.
- Coloca
docker-compose.ymly los dos archivos comprimidos en la carpeta raíz de tu proyecto y extráelos (después puedes eliminar los archivos comprimidos). - Haz push a tu repositorio.
- Sigue la ejecución en la pestaña Actions.
- Abre la aplicación en el navegador para comprobar que está disponible.
GitLab
Preparar la configuración del runner de GitLab (executor Docker)
-
Crea los directorios necesarios:
mkdir -p /var/apps/gitlab-runner/volumes/etc/gitlab-runner. -
Crea
docker-compose.yaml:cat <<EOT > /var/apps/gitlab-runner/docker-compose.yamlversion: '3'services:runner:image: 'gitlab/gitlab-runner:v16.2.0'restart: alwayscontainer_name: 'gitlab-runner'privileged: truevolumes:- './volumes/etc/gitlab-runner:/etc/gitlab-runner'- '/var/run/docker.sock:/var/run/docker.sock'EOT
Registro del runner de GitLab
- Abre Settings → CI/CD → Runners y haz clic en New project runner.
- Establece las etiquetas
docker, frontendy crea el runner. - Ve al directorio del runner:
cd /var/apps/gitlab-runner. - Ejecuta el comando para iniciar 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 la sección Runners del proyecto en GitLab y pégalo en la terminal.
- Establece el executor en
docker. - Establece la imagen predeterminada en
docker:20.10.16.
Configuración de variables de entorno en GitLab
- Crea las variables
DOMAIN,MTLS_USER_CERTyMTLS_USER_KEYen tu repositorio de GitLab (Settings → CI/CD → Variables). - Genera un certificado en OneEntry, coloca el certificado y la clave en las variables y establece
DOMAINcon la dirección de tu proyecto sin https. - Descarga docker-compose.yml, el archivo .gitlab-ci.yml y el archivo .docker, colócalos en la raíz de tu proyecto y extrae los archivos comprimidos (después puedes eliminarlos).
Configuración del runner de GitLab
- Edita el archivo de configuración:
nano volumes/etc/gitlab-runner/config.toml. - Establece el parámetro
privilegedentruepara habilitar Docker-in-Docker. - Cambia el valor de
volumesa['/var/run/docker.sock:/var/run/docker.sock', '/cache']para que Docker funcione correctamente. - Añade
user = 'gitlab-runner'al principio del archivo para ejecutar el runner como ese usuario. - Guarda los cambios y sal del editor.
Iniciar y comprobar el runner de GitLab
- Inicia el runner:
docker compose up -d. - En GitLab, comprueba que el runner está activo; su estado se muestra en la sección Runners del proyecto.
Configurar un runner adicional en el host (executor shell)
- Sigue las instrucciones para instalar un runner adicional que se ejecute directamente en el host, no en Docker.
- Establece las etiquetas del runner:
shell, frontend.
Permisos del runner
- Añade el usuario al grupo:
usermod -aG docker gitlab-runner. - Para cambiar el propietario y el grupo de un archivo o directorio:
chown -R gitlab-runner:docker /var/apps/frontend.
Comprobación final
- Comprueba que todos los runners están configurados y listos.
- Haz push a tu repositorio.
- Sigue el progreso en Build → Pipelines.
- Abre la aplicación en el navegador para comprobar que está disponible.