Cómo instalar y configurar el gestor de repositorios Nexus en Ubuntu 20.04

Nexus es un gestor de repositorios que proporciona una plataforma que protege todo tu ciclo de vida de desarrollo de software. Te permite recopilar y gestionar tus dependencias y facilita la distribución de tu software. Es una fuente única de todos los componentes, binarios y artefactos de construcción. Es compatible con Gradle, Ant, Maven e Ivy, y permite a los desarrolladores gestionar los componentes a través de binarios, contenedores, ensamblajes y productos terminados. También puedes integrar Nexus con tus sistemas existentes de usuarios y autenticación como, LDAP y Atlassian Crowd.

En este tutorial, te mostraremos cómo instalar el gestor de repositorios Nexus en Ubuntu 20.04.

Requisitos previos

  • Un servidor con Ubuntu 20.04.
  • Una contraseña de root configurada el servidor.

Cómo empezar

Antes de empezar, tendrás que actualizar los paquetes del sistema a la última versión. Puedes actualizarlos mediante el siguiente comando:

apt-get update -y

Una vez que tu servidor esté actualizado, puedes pasar al siguiente paso.

Instalar Java

Nexus está basado en Java, por lo que necesitarás instalar la versión 8 de Java en tu sistema. Puedes instalarlo con el siguiente comando:

apt-get install openjdk-8-jdk -y

Una vez instalado Java, puedes verificar la versión instalada de Java con el siguiente comando:

java -version

Deberías obtener la siguiente salida:

openjdk version "1.8.0_282"
OpenJDK Runtime Environment (build 1.8.0_282-8u282-b08-0ubuntu1~20.04-b08)
OpenJDK 64-Bit Server VM (build 25.282-b08, mixed mode)

Una vez instalado Java, puedes pasar al siguiente paso.

Instalar Nexus

Antes de empezar, tendrás que crear un usuario independiente para ejecutar Nexus. Puedes crearlo ejecutando el siguiente comando:

useradd -M -d /opt/nexus -s /bin/bash -r nexus

A continuación, permite al usuario nexus ejecutar todo el usuario con sudo sin ninguna contraseña. Puedes hacerlo ejecutando el siguiente comando:

echo "nexus ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers.d/nexus

A continuación, crea un directorio para Nexus y descarga la última versión de Nexus con el siguiente comando:

mkdir /opt/nexus
wget https://sonatype-download.global.ssl.fastly.net/repository/downloads-prod-group/3/nexus-3.29.2-02-unix.tar.gz

Una vez completada la descarga, extrae el archivo descargado al directorio /opt/nexus ejecutando el siguiente comando:

tar xzf nexus-3.29.2-02-unix.tar.gz -C /opt/nexus --strip-components=1

A continuación, establece la propiedad adecuada del directorio nexus ejecutando el siguiente comando:

chown -R nexus:nexus /opt/nexus

A continuación, edita el archivo de configuración nexus.vmoptions y define el tamaño máximo de la memoria:

nano /opt/nexus/bin/nexus.vmoptions

Establece el tamaño máximo de memoria de Java y sustituye «../sonatype-work» por «./sonatype-work»:

-Xms1024m
-Xmx1024m
-XX:MaxDirectMemorySize=1024m

-XX:LogFile=./sonatype-work/nexus3/log/jvm.log
-XX:-OmitStackTraceInFastThrow
-Djava.net.preferIPv4Stack=true
-Dkaraf.home=.
-Dkaraf.base=.
-Dkaraf.etc=etc/karaf
-Djava.util.logging.config.file=/etc/karaf/java.util.logging.properties
-Dkaraf.data=./sonatype-work/nexus3
-Dkaraf.log=./sonatype-work/nexus3/log
-Djava.io.tmpdir=./sonatype-work/nexus3/tmp

Guarda y cierra el archivo y luego edita el archivo nexus.rc y define la ejecución como usuario:

nano /opt/nexus/bin/nexus.rc

Descomenta y cambia la siguiente línea con el usuario nexus:

run_as_user="nexus"

Guarda y cierra el archivo y luego inicia el servicio Nexxus con el siguiente comando:

sudo -u nexus /opt/nexus/bin/nexus start

A continuación, verifica el Nexus con el siguiente comando:

tail -f /opt/nexus/sonatype-work/nexus3/log/nexus.log

Deberías obtener la siguiente salida:

2021-02-23 12:20:51,839+0000 INFO  [jetty-main-1]  *SYSTEM com.softwarementors.extjs.djn.servlet.DirectJNgineServlet - Servlet GLOBAL configuration: registryConfiguratorClass=
2021-02-23 12:20:51,853+0000 INFO  [jetty-main-1]  *SYSTEM com.softwarementors.extjs.djn.jscodegen.CodeFileGenerator - Creating source files for APIs...
2021-02-23 12:20:52,582+0000 INFO  [jetty-main-1]  *SYSTEM org.sonatype.nexus.siesta.SiestaServlet - JAX-RS RuntimeDelegate: org.sonatype.nexus.siesta.internal.resteasy.SisuResteasyProviderFactory@649a69ca
2021-02-23 12:20:52,611+0000 INFO  [jetty-main-1]  *SYSTEM org.jboss.resteasy.plugins.validation.i18n - RESTEASY008550: Unable to find CDI supporting ValidatorFactory. Using default ValidatorFactory
2021-02-23 12:20:53,811+0000 INFO  [jetty-main-1]  *SYSTEM org.sonatype.nexus.siesta.SiestaServlet - Initialized
2021-02-23 12:20:53,817+0000 INFO  [jetty-main-1]  *SYSTEM org.sonatype.nexus.repository.httpbridge.internal.ViewServlet - Initialized
2021-02-23 12:20:53,852+0000 INFO  [jetty-main-1]  *SYSTEM org.eclipse.jetty.server.handler.ContextHandler - Started o.e.j.w.WebAppContext@7a65358d{Sonatype Nexus,/,file:///opt/nexus/public/,AVAILABLE}
2021-02-23 12:20:53,883+0000 INFO  [jetty-main-1]  *SYSTEM org.eclipse.jetty.server.AbstractConnector - Started ServerConnector@764a4935{HTTP/1.1, (http/1.1)}{0.0.0.0:8081}
2021-02-23 12:20:53,884+0000 INFO  [jetty-main-1]  *SYSTEM org.eclipse.jetty.server.Server - Started @37529ms
2021-02-23 12:20:53,884+0000 INFO  [jetty-main-1]  *SYSTEM org.sonatype.nexus.bootstrap.jetty.JettyServer - 
-------------------------------------------------

Started Sonatype Nexus OSS 3.29.2-02

-------------------------------------------------

En este punto, Nexus está iniciado y escuchando en el puerto 8081. Puedes comprobarlo con el siguiente comando:

ss -altnp | grep 8081

Deberías obtener la siguiente salida:

LISTEN    0         50                 0.0.0.0:8081             0.0.0.0:*        users:(("java",pid=5548,fd=795)) 

A continuación, detén el servicio Nexus con el siguiente comando:

/opt/nexus/bin/nexus stop

Crear un archivo de servicio Systemd para Nexus

A continuación, tendrás que crear un archivo de servicio systemd para gestionar el servicio Nexus. Puedes crearlo con el siguiente comando:

nano /etc/systemd/system/nexus.service

Añade las siguientes líneas:

[Unit]
Description=nexus service
After=network.target

[Service]
Type=forking
LimitNOFILE=65536
ExecStart=/opt/nexus/bin/nexus start
ExecStop=/opt/nexus/bin/nexus stop
User=nexus
Restart=on-abort

[Install]
WantedBy=multi-user.target

Guarda y cierra el archivo y luego recarga el demonio systemd con el siguiente comando:

systemctl daemon-reload

A continuación, inicia el servicio Nexus y permite que se inicie al reiniciar el sistema con el siguiente comando:

systemctl start nexus
systemctl enable nexus

También puedes verificar el estado del servicio Nexus con el siguiente comando:

systemctl status nexus

Deberías obtener la siguiente salida:

? nexus.service - nexus service
     Loaded: loaded (/etc/systemd/system/nexus.service; disabled; vendor preset: enabled)
     Active: active (running) since Tue 2021-02-23 12:22:49 UTC; 15s ago
    Process: 6181 ExecStart=/opt/nexus/bin/nexus start (code=exited, status=0/SUCCESS)
   Main PID: 6368 (java)
      Tasks: 40 (limit: 4691)
     Memory: 642.9M
     CGroup: /system.slice/nexus.service
             ??6368 /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java -server -Dinstall4j.jvmDir=/usr/lib/jvm/java-8-openjdk-amd64/jre -Dexe4j.mo>

Feb 23 12:22:49 ubuntu2004 systemd[1]: Starting nexus service...
Feb 23 12:22:49 ubuntu2004 nexus[6181]: Starting nexus
Feb 23 12:22:49 ubuntu2004 systemd[1]: Started nexus service.
lines 1-13/13 (END)

Una vez que hayas terminado, puedes pasar al siguiente paso.

Configurar Nginx como proxy inverso para Nexus

A continuación, tendrás que instalar Nginx y configurar Nginx como proxy inverso. Primero, instala los paquetes de Nginx con el siguiente comando:

apt-get install nginx -y

Una vez instalado Nginx, crea un archivo de configuración del host virtual de Nginx con el siguiente comando:

nano /etc/nginx/conf.d/nexus.conf

Añade las siguientes líneas:

upstream backend {
  server 127.0.0.1:8081;
}

server {
    listen 80;
    server_name nexus.example.com;

    location / {
        proxy_pass http://backend/;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $http_host;

        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forward-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forward-Proto http;
        proxy_set_header X-Nginx-Proxy true;

        proxy_redirect off;
    }
}

Guarda y cierra el archivo y luego verifica el archivo de configuración de Nginx con el siguiente comando:

nginx -t

Deberías obtener la siguiente salida:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Por último, reinicia el servicio Nginx para aplicar los cambios:

systemctl restart nginx

También puedes verificar el estado de Nginx con el siguiente comando:

systemctl status nginx

Deberías obtener la siguiente salida:

? nginx.service - A high performance web server and a reverse proxy server
     Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
     Active: active (running) since Tue 2021-02-23 12:24:57 UTC; 4s ago
       Docs: man:nginx(8)
    Process: 7106 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
    Process: 7107 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
   Main PID: 7123 (nginx)
      Tasks: 3 (limit: 4691)
     Memory: 3.5M
     CGroup: /system.slice/nginx.service
             ??7123 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
             ??7124 nginx: worker process
             ??7125 nginx: worker process

Feb 23 12:24:57 ubuntu2004 systemd[1]: Starting A high performance web server and a reverse proxy server...
Feb 23 12:24:57 ubuntu2004 systemd[1]: Started A high performance web server and a reverse proxy server.

Acceder a la interfaz web de Nexus

Antes de acceder a la interfaz web de Nexus, imprime la contraseña de administrador de Nexus con el siguiente comando:

cat /opt/nexus/sonatype-work/nexus3/admin.password

Deberías obtener la siguiente salida:

b7c899cf-c6d3-4d11-a4cb-9a44e5d1787e

Ahora, abre tu navegador web y accede a la interfaz web de Nexus utilizando la URL http://nexus.example.com. Serás redirigido a la siguiente página:

GUI Nexus

Ahora, haz clic en el botón Iniciar sesión. Serás redirigido a la página de inicio de sesión de Nexus:

Entra en

Proporciona tu nombre de usuario y contraseña de administrador y haz clic en el botón Iniciar sesión. Deberías ver la página de configuración de Nexus:

Asistente de configuración

Haz clic en el botón Siguiente para continuar. Deberías ver la siguiente página:

Establecer una nueva contraseña

Establece tu nueva contraseña y haz clic en el botón Siguiente. Deberías ver la siguiente página:

Configurar el acceso anónimo

Selecciona la opción «Activar el acceso anónimo» y haz clic en el botón Siguiente. Deberías ver la siguiente página:

Configuración completa

Haz clic en el botón Finalizar para completar la configuración y haz clic en el icono del engranaje de Configuración. Deberías ver el panel de control del repositorio Nexus:

Panel de control del Gestor de Repositorios Nexus

Conclusión

Enhorabuena! has instalado con éxito el gestor de repositorios Nexus con Nginx como proxy inverso en el servidor Ubuntu 20.04. No dudes en preguntarme si tienes alguna duda.

También te podría gustar...