Nexus3
Introducción
Las aplicaciones creadas requieren un lugar de almacenaje, y aunque GitLab permite guardar las versiones released, es muy posible que, para construirlas, se requieran de librerías o contenedores que hemos creado previamente.
Esas librerías deben ser almacenadas en un repositorio especifico acorde a su procedencia:
- Java requiere Maven
- JavaScript requiere NPM
- Contenedores pueden usar el Docker registry
Y así otros tantos.
Aquí es donde necesitaremos a Nexus Repository. Este es un proyecto que unifica varios tipos de repositorios en un solo punto, fusionando la gestión y mantenimiento de todos ellos en un único lugar. Esto también significa que, algunos de estos repositorios, no podrán utilizar el 100% de su potencial, debido a que Nexus tiene su propia UI e intenta unificarlo todo en ella. Según las funcionalidades que necesitemos, es posible que nos sea mejor instalar un repositorio especifico y dejar los más genéricos en Nexus.
Sea cual sea la opción elegida, en este artículo explicaré cómo configurar Nexus conectado al LDAP (OAuth2 requiere la versión de pago), configurar su seguridad y habilitar Maven, NPM y Docker registry, no iré al punto de cómo se utiliza cada uno, ya que depende mucho de cada persona o equipo, únicamente cómo configurarlos.
Además, se desplegarán 2 Nexus totalmente separados, uno de ellos será accesible únicamente desde la intranet y otro para la extranet.
Intranet
En la intranet necesitamos almacenar todas las versiones, tanto las de desarrollo y pruebas, como las released, así, los servidores tendrán acceso a ellas y podrán compilar y desplegar cualquier aplicación que tengamos.
Además de esto, debido a que muchas aplicaciones tendrán dependencias de los repositorios oficiales, crearemos un espejo de estos. Cuando una aplicación requiera descargarse una librería, en vez de descargarla del repositorio oficial, lo hará de Nexus, si este no la tiene, él la descargará y la devolverá, así reduciremos los tiempos de carga.
Nunca deberíamos exponer un sistema espejo de repositorios oficiales a internet, ya que otros podrían utilizarlo y consumir nuestro espacio y bando de ancha de internet.
Hay que tener en cuenta que todos los sistemas están diseñados para ir siempre al repositorio oficial, así que debemos configurar cada proceso para utilizar a este y no al oficial. Para facilitar este proceso, el acceso de lectura será público, lo que evitará tener que ir creando tokens o contraseñas.
Extranet
En este Nexus únicamente publicaremos las versiones released de aquellos contenedores y/o librerías que queramos exponer, no tiene sentido publicar versiones de desarrollo o que están siendo testeadas aún.
Cuando se genera una versión final, será copiada tanto en los repositorios de la intranet como de la extranet.
Descarga
El fichero de despliegue se encuentra en Git.
git clone https://gitlab.com/ReiIzumi/swarm-project.git
cd swarm-project/07-Nexus3
Preparación
Nexus requiere mucho espacio para almacenar todos los paquetes y contenedores, así que se conectará mediante una carpeta compartida de tipo NFS.
Debido a que cada Nexus estará totalmente separado, se crean 2 carpetas donde se anclarán sus volúmenes y se ajustan los permisos:
mkdir -p /mnt/nexus3/intranet-data
mkdir /mnt/nexus3/extranet-data
chown -R 200 /mnt/nexus3
Despliegue
- Únicamente debemos actualizar la URL de los 5 servicios: 2 para Nexus, 2 para el public/registry de Docker en la intranet y 1 para el registry de la extranet.
- traefik.http.routers.nexus3.rule
- traefik.http.routers.nexus3-docker-registry.rule
- traefik.http.routers.nexus3-docker-public.rule
- traefik.http.routers.nexus3-extranet.rule
- traefik.http.routers.nexus3-extranet-docker-registry.rule
- Desplegar en Portainer.
- Al acceder a la UI nos preguntará la contraseña que se ha creado en el volumen,
admin.passwordy debemos dejar habilitado el acceso anónimo.
Configuración
Igual que otros servicios, la configuración de Nexus dependerá mucho acorde a las necesidades.
Aquí se explica cómo definir el servidor de e-mail y la configuración básica para los usuarios de Maven, NPM y Docker.
Para descargar cualquier paquete o contenedor se utilizará el usuario anónimo, únicamente se definen usuarios para poder subir a los diferentes repositorios, así que estos se almacenarán dentro de Nexus, no vale la pena conectarlo al LDAP únicamente para ello.
La configuración será la misma para la Intranet y la Extranet, la diferencia es que la Extranet únicamente tendrá los repositorios "privados" con nuestros paquetes y contenedores, ya que no tiene sentido tener los grupos o réplicas de servidores externos.
Los repositorios que tiene por defecto se deberán borrar para definir los nuevos.
Email
En System - Email Server se configuran los datos del servicio de relay, estos son los que hay que añadir.
- Enabled: Seleccionar
- Host: tasks.relay
- From address: [email protected]
Almacén de datos
Aunque no es necesario, es altamente aconsejable separar el almacén de datos para cada repositorio en vez de utilizar el de por defecto, así podremos separar las copias de seguridad y límites de cada uno de ellos si algún día los necesitamos.
Este se define en Repository - Blob Stores, únicamente hay que indicar el tipo a File y el nombre, la ruta automáticamente se define hacia el volumen.