Configurar mirror local de maven

2021/10/04

Para configurar un mirror local se utilizará nexus repository oss, más específicamente la imagen de contenedores que se encuentra en dockerhub: https://hub.docker.com/r/sonatype/nexus3/.

Para ejecutar la imagen se realizarán los siguientes pasos:

  1. Agregar entrada en /etc/hosts para agregar nombre de host a usar y asociarla a la IP del equipo (no localhost):

    • Obtener ip físico del equipo:

      $ ip -o -4 a | grep -o -P '\sinet\s\K[^/]*' | grep -v 127.0.0.1
      192.168.1.106
      

      En este caso se obtuvo solo una IP. En caso de que se obtenga más de una hay que elegir cual utilizar.

    • Agregar la ip a /etc/hosts:

      $ grep -q mvn-mirror.example.com /etc/hosts \
          || echo '192.168.1.106 mvn-mirror.example.com' | sudo tee -a /etc/hosts
      
  2. Ejecutar la imagen de contenedores sonatype/nexus3 de dockerhub. Ya que es deseable que se mantenga el caché de artefactos entre ejecuciones en lugar de tener que descargar los artefactos cada vez es que se ejecutará la imagen utilizando un volumen creado previamente como se indica en la página de la imagen:

    $ podman volume create nexus-data
    $ podman run -d -p 192.168.1.106:8081:8081 -v nexus-data:/nexus-data \
        --name nexus docker.io/sonatype/nexus3:3.34.1
    

    Nota: tomar en cuenta que según la documentación de la imagen, el contenedor demora unos dos~tres minutos en estar listo y lo mismo al detener la imagen.

  3. Obtener las credenciales de la imagen creada. De la documentación se tiene que el usuario es admin y el password se obtiene de la imagen:

    $ podman exec nexus cat /nexus-data/admin.password
    4b0efdbf-d4c4-4b45-a479-8cadf0b06690
    
  4. Realizar el setup de la aplicación. Para ello hay que loguearse abriendo la página de nexus: http://mvn-mirror.example.com:8081.

    Se elige como nueva password password y se habilitan los accesos anonimos.

Por defecto está configurado el repositorio maven-central bajo la url http://mvn-mirror.example.com:8081/repository/maven-central/ que es un proxy a https://repo1.maven.org/maven2/.