Binary Coffee

Configurando nexus con docker

docker hack nexus
## ¬ŅQu√© es Nexus? Sonatype Nexus es un repositorio de software con el cual es posible almacenar paquetes y librer√≠as y manejar dependencias. Nexus maneja las versiones de las librer√≠as y almacena las mismas de manera tal que es posible utilizarlas cada vez que sean necesarias. **¬ŅPero para qu√© necesitar√≠amos Nexus?** En el contexto de Cuba, donde generalmente nos encontramos sin Internet o simplemente navegamos bajo tarifa de consumo por descarga, cada MB es oro. Entonces Nexus nos viene a ayudar con esto, y podemos de una forma muy sencilla cambiar nuestros repositorios a nuestro Repositorio local (Nexus). B√°sicamente Nexus retorna las dependencias que contiene y en caso de no contar con las dependencias, entonces la descarga desde los repositorios online que usualmente utilizamos. Las dependencias descargadas por Nexus son posteriormente cacheadas de forma local y luego las retornadas en posteriores peticiones. En la siguiente imagen se muestra c√≥mo funciona este proceso: ![How nexus work](https://api.binary-coffee.dev/uploads/a3e98c3f8b024a778e17d4ba3eb75156.jpg) Como se puede apreciar en la imagen, lo que ganamos con Nexus, es que nunca vamos a descargar las dependencias de nuestros proyectos 2 veces, ahorrando as√≠, nuestros megas de Internet. **Publicar nuestras librer√≠as de forma local** Otra de las ventajas que se pueden obtener con el uso de Nexus, es el contar con un completo y funcional repositorio de dependencias, lo que quiere decir, que es posible tambi√©n, publicar nuestras propias dependencias. Muchas veces ocurre que en nuestros proyectos creamos paquetes de librer√≠as que comparten entre ellos. Estas librer√≠as como es de esperarse no son librer√≠as p√ļblicas, por tanto con Nexus podemos brindarlas de forma controlada y local sin uso de ning√ļn servicio externo. ## Configurando Nexus con Docker **Usando Docker** Configurar Nexus con Docker es realmente f√°cil, y con el siguiente comando se puede iniciar el repositorio de forma local: ``` docker run -d -p 8081:8081 sonatype/nexus3 ``` Al terminar este paso, ya tendremos Nexus ejecut√°ndose en nuestro sistema con Docker. **Usando docker-compose** Con docker-compose, vamos a poder configurar con m√°s facilidad el Nexus, como por ejemplo, separar los datos del repositorio y llevarlo fuera del contenedor, de manera tal que si en alg√ļn momento se quiere actualizar a la √ļltima versi√≥n no se pierda la informaci√≥n. A continuaci√≥n, el archivo de configuraci√≥n de docker-compose que debe crearse. ``` # docker-compose.yml version: '3.3' services: nexus: image: sonatype/nexus3 restart: always ports: - 8088:8081 volumes: - /path/to/nexus/data:/nexus-data ``` Una vez creado este archivo de configuraci√≥n, debe crearse el directorio donde se guardar√°n los datos del Nexus y sustituir la direcci√≥n en el archivo de configuraci√≥n. Posteriormente para ejecutar el contenedor de Docker, se ejecuta el siguiente comando en un terminal y Nexus estar√° ejecut√°ndose correctamente en nuestro sistema: ``` docker-compose up -d ``` ## Configurar Nexus Para acceder a Nexus, solo tenemos que abrir en el navegador [http://localhost:8088](http://localhost:8088). ![nexus first interface](https://api.binary-coffee.dev/uploads/0f750ee54747442b8676bd323e00a12f.jpg) Para autenticarnos en el sistema, es necesario chequear el password inicial del usuario admin. Para ello es necesario ejecutar en un terminal el siguiente comando: ``` docker exec nexus-container-name cat nexus-data/admin.password // NOTA: cambiar nexus-container-name por el nombre // del contenedor creado, chequear con el comando // 'docker ps' ``` Esto imprimir√° en el terminal el password del usuario admin con el que ya pueden entrar al sistema y autom√°ticamente el sistema pide cambiar dicho password. Una vez dentro del sistema, podemos ir a la administraci√≥n y jugar un poco con las configuraciones. Por defecto Nexus cuenta con algunos repositorios por defecto que pueden utilizarse sin necesidad de configuraci√≥n adicional. ![list of default repos](https://api.binary-coffee.dev/uploads/nexus_list_b171d8ca86.png) **Crear un repositorio** Para crear un nuevo repositorio, es necesario ir a la administraci√≥n y en la secci√≥n de repositorios seleccionar la opci√≥n de crear un nuevo repositorio. ![new repository button](https://api.binary-coffee.dev/uploads/3e2783a10e934bd390d774e44d69ab98.jpg) Una vez seleccionado el tipo de repositorio que se desea crear (en el ejemplo se utilizar√° npm-proxy) y se define el nombre del repositorio y la url de donde se requerir√°n las dependencias. Con esto es suficiente para crear el nuevo repositorio y estar listo para ser usado. **Utilizar el repositorio local** En el siguiente ejemplo se utilizar√° npm como ejemplo, pero para otras tecnolog√≠as deben investigar c√≥mo cambiar el registry para utilizar su repositorio local en vez del repositorio online. En el ejemplo de *npm*, solo necesitamos ir al listado inicial de repositorios de nuestro Nexus [http://localhost:8088/#browse/browse](http://localhost:8088/#browse/browse) y en el repositorio que deseamos (el nuevo que creamos de npm) damos click en el bot√≥n `copy`, esto nos muestra la url de dicho repositorio, la cual ser√° utilizada para cambiar el registry. En caso de npm se puede ejecutar el siguiente comando `npm config set registry http://localhost:8088/repository/npm-internet/` o vamos al archivo `~/.npmrc` y se cambia el registry manualmente como se muestra en el ejemplo: ``` # .npmrc registry=http://localhost:8088/repository/npm-internet/ ``` De esta manera, ya tenemos nuestro repositorio de npm configurado y todas las dependencias de nuestros proyectos (como Angular) ser√°n descargadas por nuestro Nexus la primera vez y despu√©s de ello, solo las consumiremos del cach√© del repositorio. **Tipos de repositorio** Al crear el repositorio anterior, se seleccion√≥ la opci√≥n proxy, pero como se pudo apreciar existen 2 tipos m√°s de repositorios. A continuaci√≥n se explican: - **proxy**: fue el utilizado en el ejemplo y como su nombre lo dice, crea un enlace entre el repositorio de nexus y el repositorio online, de esta manera si Nexus no cuenta con una dependencia la descarga del repositorio online y si la tiene pues la brinda directamente. - **hosted**: este tipo de repositorio es utilizado cuando se desean subir dependencias locales. Como se explic√≥ anteriormente, es posible desarrollar librer√≠as y subirlas en nuestro Nexus local, de manera que solo nosotros y quienes trabajan junto a nosotros, tienen acceso a dichas dependencias. - **group**: cuando se cuenta con varias dependencias y nuestros proyectos utilizan m√°s de un repositorio, se hace necesaria la manera de agrupar repositorios. Este tipo de repositorio agrupa otros repositorios que tenemos creados y a la hora de configurar el registry se utiliza este repositorio. ## Conclusiones - Para configurar otros tipos de repositorios es b√°sicamente lo mismo, lo √ļnico a tener en cuenta, es la forma en que se manejan los repositorios en la tecnolog√≠a que estemos utilizando y c√≥mo cambiar el registry en estos. - Por defecto Nexus viene con repositorios de java configurados, estos pueden utilizarse sin esfuerzo extra (suerte para los desarrolladores de Java y Android). - Si Desarrollas en equipo, ya no tienen que gastar doble los megas que pesen las dependencias, uno de los desarrolladores puede bajarlas en su Nexus y el otro utilizar el Nexus del primero por la red local. Incluso pueden hacer un repositorio temporal, que utilice el Nexus de nuestro compa√Īero (s√≠, suena como la pel√≠cula Inception, pero ahorra megas) Si eres desarrollador en Cuba, definitivamente deber√≠a empezar a usarlo, puesto que vas a ahorrar tus preciados megas. Bueno, esto es todo y ya saben, cualquier duda o sugerencia no dudes en compartirla en los comentarios. > Happy coding!
Opiniones