Introducción
Nexus es un repositorio que proporciona una plataforma que protege todo el ciclo de vida del desarrollo de software. Le permite recopilar y administrar sus dependencias y simplifica la distribución de software. Es una fuente única de todos los componentes, binarios y artefactos de compilación. Brinda soporte para Gradle, Ant, Maven e Ivy, y permite al desarrollador administrar componentes a través de rieles, contenedores, ensamblajes y productos terminados. También puede integrar Nexus con sus sistemas de usuario y autenticación existentes, como LDAP y Atlassian Crowd.
En este tutorial, le mostraremos cómo instalar el administrador de repositorio Nexus en Ubuntu 20.04 LTS Focal Fossa.
Prerrequisitos
- Un servidor que ejecuta Ubuntu 20.04 LTS.
- Usuario root o un usuario con privilegios sudo.
Para comenzar
Antes de comenzar, deberá actualizar los paquetes del sistema a la última versión. Puede actualizarlos usando el siguiente comando:
sudo apt-get update -y
Una vez que se actualice el servidor, puede continuar con el siguiente paso.
Instalar Java
Nexus se basa en Java, por lo que deberá instalar la versión 8 de Java en su sistema. Puedes instalarlo con el siguiente comando:
sudo apt-get install openjdk-8-jdk -y
Una vez que Java está instalado, puede verificar la versión instalada de Java con el siguiente comando:
java -version
Debería obtener el siguiente resultado:
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 que tenga Java instalado, puede continuar con el siguiente paso.
Instalar Nexus
Antes de comenzar, deberá crear un usuario independiente para ejecutar Nexus. Puede crearlo ejecutando el siguiente comando:
sudo useradd -M -d /opt/nexus -s /bin/bash -r nexus
A continuación, permite al usuario nexus ejecutar a todos los usuarios con sudo sin contraseña. Puede hacer esto ejecutando el siguiente comando:
sudo echo "nexus ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers.d/nexus
Luego, cree un directorio para Nexus con el comando mkdir y descargue la última versión de Nexus con el siguiente comando wget:
sudo 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 que se complete la descarga, extraiga el archivo descargado al directorio /opt/nexus
ejecutando el siguiente comando:
sudo tar xzf nexus-3.29.2-02-unix.tar.gz -C /opt/nexus --strip-components=1
Luego, establezca la propiedad adecuada en el directorio nexus ejecutando el siguiente comando:
sudo chown -R nexus:nexus /opt/nexus
A continuación, edite el archivo de configuración nexus.vmoptions y defina el tamaño máximo de memoria con su editor de texto:
sudo nano /opt/nexus/bin/nexus.vmoptions
Establezca el tamaño máximo de memoria de Java y reemplácelo ../sonatype-work
con ./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
Guarde y cierre el archivo, luego edite el archivo nexus.rc y defina ejecutar como usuario:
sudo nano /opt/nexus/bin/nexus.rc
Descomente y edite la siguiente línea con el nexo de usuario:
run_as_user="nexus"
Guarde y cierre el archivo y luego inicie el servicio Nexxus con el siguiente comando:
sudo -u nexus /opt/nexus/bin/nexus start
Luego, prueba el Nexus con el siguiente comando:
sudo tail -f /opt/nexus/sonatype-work/nexus3/log/nexus.log
Debería obtener el siguiente resultado:
2021-02-22 11:21:51,839+0000 INFO [jetty-main-1] *SYSTEM com.softwarementors.extjs.djn.servlet.DirectJNgineServlet - Servlet GLOBAL configuration: registryConfiguratorClass=
2021-02-22 11:21:51,853+0000 INFO [jetty-main-1] *SYSTEM com.softwarementors.extjs.djn.jscodegen.CodeFileGenerator - Creating source files for APIs...
2021-02-22 11:21: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-22 11:21: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-22 11:21:53,811+0000 INFO [jetty-main-1] *SYSTEM org.sonatype.nexus.siesta.SiestaServlet - Initialized
2021-02-22 11:21:53,817+0000 INFO [jetty-main-1] *SYSTEM org.sonatype.nexus.repository.httpbridge.internal.ViewServlet - Initialized
2021-02-22 11:21: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-22 11:21: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-22 11:21:53,884+0000 INFO [jetty-main-1] *SYSTEM org.eclipse.jetty.server.Server - Started @37529ms
2021-02-22 11:21: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 se inicia y escucha en el puerto 8081. Puede verificar esto con el siguiente comando:
sudo ss -altnp | grep 8081
Debería obtener el siguiente resultado:
LISTEN 0 50 0.0.0.0:8081 0.0.0.0:* users:(("java",pid=5548,fd=795))
A continuación, detenga el servicio Nexus con el siguiente comando:
sudo /opt/nexus/bin/nexus stop
Cree un archivo de servicio Systemd para Nexus
A continuación, deberá crear un archivo de servicio systemd para administrar el servicio Nexus. Puedes crearlo con el siguiente comando:
sudo nano /etc/systemd/system/nexus.service
Agrega 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
Guarde y cierre el archivo, luego vuelva a cargar el demonio systemd con el siguiente comando:
sudo systemctl daemon-reload
A continuación, inicie el servicio Nexus y habilítelo para que se inicie cuando el sistema se reinicie con el siguiente comando:
sudo systemctl start nexus
sudo systemctl enable nexus
También puede verificar el estado del servicio Nexus usando el siguiente comando:
sudo systemctl status nexus
Debería obtener el siguiente resultado:
? nexus.service - nexus service
Loaded: loaded (/etc/systemd/system/nexus.service; disabled; vendor preset: enabled)
Active: active (running) since Tue 2021-02-22 11:21:49 UTC; 11s 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 hecho esto, puede continuar con el siguiente paso.
Configurar Nginx como proxy inverso para Nexus
A continuación, deberá instalar Nginx y configurar Nginx como proxy inverso. Primero, instale los paquetes de Nginx con el siguiente comando:
sudo apt-get install nginx -y
Una vez que Nginx esté instalado, cree un archivo de configuración de host virtual Nginx con el siguiente comando:
sudo nano /etc/nginx/conf.d/nexus.conf
Agrega 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;
}
}
Guarde y cierre el archivo, luego verifique el archivo de configuración de Nginx con el siguiente comando:
sudo nginx -t
Debería obtener el siguiente resultado:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
nginx: la sintaxis del archivo de configuración /etc/nginx/nginx.conf es oknginx: la prueba del archivo de configuración /etc/nginx/nginx.conf es exitosa
Finalmente, reinicie el servicio Nginx para aplicar los cambios:
sudo systemctl restart nginx
También puede verificar el estado de Nginx con el siguiente comando:
sudo systemctl status nginx
Debería obtener el siguiente resultado:
? 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-22 11:54:57 UTC; 1s 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 22 11:54:17 ubuntu2004 systemd[1]: Starting A high performance web server and a reverse proxy server...
Feb 22 11:54:17 ubuntu2004 systemd[1]: Started A high performance web server and a reverse proxy server.
Inicie sesión en la interfaz web de Nexus
Antes de acceder a la interfaz de usuario web de Nexus, imprima la contraseña de administrador de Nexus con el siguiente comando:
sudo cat /opt/nexus/sonatype-work/nexus3/admin.password
Debería obtener el siguiente resultado:
b7c899cf-c6d3-4d11-a4cb-9a44e5d1787e
Ahora abra su navegador web y acceda a la interfaz de usuario web de Nexus usando la URL http://nexus.example.com. Serás redirigido al panel de Nexus.
Ahora, haga clic en el botón Iniciar sesión . Serás redirigido a la página de inicio de sesión de Nexus.
Proporcione el nombre de usuario y la contraseña del administrador y haga clic en el botón Iniciar sesión . Debería ver la página de configuración de Nexus.
Haga clic en el botón Siguiente para continuar. Debería ver la página de cambio de contraseña.
Establezca la nueva contraseña y haga clic en el botón Siguiente . Debería ver la página de inicio de sesión anónimo.
Seleccione la opción "Habilitar acceso anónimo" y haga clic en el botón Siguiente . Debería ver la página de configuración completa.
Haga clic en el botón Finalizar para completar la configuración y haga clic en el icono de engranaje de Configuración . Debería ver el panel del repositorio de Nexus:
Conclusión
¡Felicidades! ha instalado correctamente el administrador de repositorio Nexus con Nginx como proxy inverso en el servidor Ubuntu 20.04 LTS Focal Fossa.