--- title: "Cómo instalar Nexus Repository en Ubuntu 24.04" description: "Instala Sonatype Nexus Repository en Ubuntu 24.04 como servicio systemd tras Nginx con HTTPS y configura repositorios proxy y hosted de npm y Maven para tu CI." category: "CI/CD DevOps" language: es source: https://cubepath.com/es/docs/ci-cd-devops/instalacion-de-nexus-repository-manager updated: 2026-09-25 --- # Cómo instalar Nexus Repository en Ubuntu 24.04 Sonatype Nexus Repository es un gestor de artefactos: guarda los paquetes que produce tu equipo (Maven, npm, PyPI y otros formatos) y hace de caché de los registros públicos, de modo que tus builds descargan las dependencias desde tu red y siguen funcionando aunque el registro público falle. En este tutorial instalarás Nexus Repository Community Edition en Ubuntu 24.04 como servicio systemd, lo publicarás con Nginx y HTTPS y configurarás repositorios de npm y Maven para usarlos desde tus proyectos. ## Requisitos previos Para seguir esta guía necesitas: - Un servidor con Ubuntu 24.04 LTS, por ejemplo un VPS de CubePath, con al menos 4 GB de RAM, 2 vCPU y espacio en disco suficiente para tus artefactos (empieza con 50 GB). - Un usuario no root con privilegios `sudo`. - Un dominio o subdominio, por ejemplo `nexus.your_domain`, con un registro A apuntando a la IP del servidor. - Los puertos 22, 80 y 443 abiertos en UFW. > Nota: Nexus Repository Community Edition es gratuita pero tiene límites de uso publicados por Sonatype. Revisa las condiciones vigentes en su web si vas a usarlo con mucho volumen. ## Paso 1: Crear el usuario de servicio Nexus no debe ejecutarse como root. Crea un usuario de sistema sin shell de acceso: ```bash sudo useradd --system --no-create-home --shell /usr/sbin/nologin nexus ``` ## Paso 2: Descargar Nexus Repository Las versiones actuales para Linux incluyen su propio entorno Java, así que no necesitas instalar un JDK aparte. Consulta el número de la última versión en la página de descargas de Sonatype (`https://help.sonatype.com/en/download.html`) y guárdalo en una variable, sustituyendo `VERSION` por el número real (con el formato `3.x.y-zz`): ```bash NEXUS_VERSION=VERSION ``` Descarga el archivo para Linux x86_64 y descomprímelo en `/opt`: ```bash cd /tmp curl -fLO "https://download.sonatype.com/nexus/3/nexus-${NEXUS_VERSION}-linux-x86_64.tar.gz" sudo tar -xzf "nexus-${NEXUS_VERSION}-linux-x86_64.tar.gz" -C /opt ``` El archivo crea dos directorios: `nexus-`, con la aplicación, y `sonatype-work`, con los datos (base de datos, blobs, logs). Crea un enlace simbólico estable para la aplicación, para que las actualizaciones solo tengan que cambiar el enlace, y asigna los datos al usuario `nexus`: ```bash sudo ln -sfn "/opt/nexus-${NEXUS_VERSION}" /opt/nexus sudo chown -R nexus:nexus "/opt/nexus-${NEXUS_VERSION}" /opt/sonatype-work ``` Comprueba el resultado: ```bash ls -l /opt ``` ```output lrwxrwxrwx 1 root root ... nexus -> /opt/nexus-3.x.y-zz drwxr-xr-x 10 nexus nexus ... nexus-3.x.y-zz drwxr-xr-x 3 nexus nexus ... sonatype-work ``` ## Paso 3: Escuchar solo en localhost Por defecto Nexus escucha en el puerto 8081 de todas las interfaces. Como vas a publicarlo a través de Nginx, haz que solo escuche en local. La configuración propia de la instancia va en `/opt/sonatype-work/nexus3/etc/nexus.properties`, que se crea en el primer arranque; créalo ya con este contenido: ```bash sudo mkdir -p /opt/sonatype-work/nexus3/etc sudo nano /opt/sonatype-work/nexus3/etc/nexus.properties ``` ```ini application-host=127.0.0.1 application-port=8081 ``` Asigna el archivo al usuario `nexus`: ```bash sudo chown -R nexus:nexus /opt/sonatype-work/nexus3 ``` La memoria de la JVM se define en `/opt/nexus/bin/nexus.vmoptions` (`-Xms` y `-Xmx`). Los valores por defecto están pensados para un servidor de unos 8 GB; en un servidor de 4 GB, baja ambos a `-Xms1200m` y `-Xmx1200m` para dejar memoria al sistema y a la caché de disco. ## Paso 4: Crear el servicio systemd Crea la unidad de systemd: ```bash sudo nano /etc/systemd/system/nexus.service ``` ```ini [Unit] Description=Nexus Repository After=network.target [Service] Type=forking User=nexus Group=nexus LimitNOFILE=65536 ExecStart=/opt/nexus/bin/nexus start ExecStop=/opt/nexus/bin/nexus stop Restart=on-abort TimeoutSec=600 [Install] WantedBy=multi-user.target ``` `LimitNOFILE=65536` es el mínimo de descriptores de archivo que recomienda Sonatype. Recarga systemd y arranca Nexus: ```bash sudo systemctl daemon-reload sudo systemctl enable --now nexus ``` El primer arranque tarda uno o dos minutos. Sigue el log hasta ver el mensaje de inicio: ```bash sudo tail -f /opt/sonatype-work/nexus3/log/nexus.log ``` ```output ------------------------------------------------- Started Sonatype Nexus ... 3.x.y-zz ------------------------------------------------- ``` Pulsa `Ctrl+C` y comprueba el endpoint de estado, que responde `200` cuando Nexus acepta peticiones: ```bash curl -s -o /dev/null -w '%{http_code}\n' http://127.0.0.1:8081/service/rest/v1/status ``` ```output 200 ``` ## Paso 5: Publicar Nexus con Nginx y HTTPS Instala Nginx y Certbot: ```bash sudo apt update sudo apt install nginx certbot python3-certbot-nginx ``` Crea el bloque de servidor: ```bash sudo nano /etc/nginx/sites-available/nexus ``` ```nginx server { listen 80; server_name nexus.your_domain; client_max_body_size 1g; proxy_read_timeout 300; proxy_send_timeout 300; location / { proxy_pass http://127.0.0.1:8081; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } } ``` `client_max_body_size 1g` permite subir artefactos grandes y los timeouts evitan cortes al descargar paquetes pesados desde los registros públicos. Activa el sitio, abre el firewall y obtén el certificado: ```bash sudo ln -s /etc/nginx/sites-available/nexus /etc/nginx/sites-enabled/ sudo nginx -t sudo systemctl reload nginx sudo ufw allow 'Nginx Full' sudo certbot --nginx -d nexus.your_domain ``` ```output Congratulations! You have successfully enabled HTTPS on https://nexus.your_domain ``` ## Paso 6: Completar la configuración inicial Nexus genera una contraseña de administrador aleatoria en el primer arranque. Léela: ```bash sudo cat /opt/sonatype-work/nexus3/admin.password ``` Abre `https://nexus.your_domain`, pulsa **Sign in** e inicia sesión con el usuario `admin` y esa contraseña. El asistente inicial te pedirá: 1. Una contraseña nueva para `admin`. 2. Si quieres permitir el **acceso anónimo**. Desactívalo si tus artefactos son privados; tendrás que autenticar a los clientes, como se muestra más abajo. Al terminar, el asistente borra el archivo `admin.password`. Nexus trae varios repositorios de Maven creados por defecto: `maven-central` (proxy de Maven Central), `maven-releases` y `maven-snapshots` (hosted, para tus artefactos) y `maven-public` (un grupo que los une). Los verás en **Settings** (el icono del engranaje) **> Repository > Repositories**. ## Paso 7: Crear repositorios npm Los repositorios de Nexus son de tres tipos: **proxy** (caché de un registro remoto), **hosted** (paquetes propios) y **group** (una URL única que combina varios). Crea los tres para npm desde **Settings > Repository > Repositories > Create repository**: 1. **npm (proxy)**: nombre `npm-proxy`, **Remote storage** `https://registry.npmjs.org`. 2. **npm (hosted)**: nombre `npm-hosted`, con **Deployment policy** en **Disable redeploy** para que una versión publicada no se pueda sobrescribir. 3. **npm (group)**: nombre `npm-group`, y añade como miembros `npm-hosted` y `npm-proxy`, en ese orden. Así tus paquetes internos tienen prioridad sobre los públicos del mismo nombre. Para poder publicar con `npm publish`, activa el realm de npm en **Settings > Security > Realms**: mueve **npm Bearer Token Realm** a la lista **Active** y guarda. Crea también un usuario para tu CI en **Settings > Security > Users > Create local user**, con un rol que tenga permisos sobre estos repositorios. Evita usar la cuenta `admin` desde los pipelines. ## Paso 8: Usar Nexus desde npm y Maven ### npm En tu proyecto, apunta npm al grupo creando un `.npmrc`: ```bash nano .npmrc ``` ```ini registry=https://nexus.your_domain/repository/npm-group/ ``` Si desactivaste el acceso anónimo, inicia sesión contra el grupo con el usuario de CI. Las versiones actuales de npm intentan un login por navegador por defecto; `--auth-type=legacy` fuerza el usuario y contraseña que entiende Nexus: ```bash npm login --auth-type=legacy --registry=https://nexus.your_domain/repository/npm-group/ ``` Comprueba que las dependencias se resuelven a través de Nexus: ```bash npm view express version ``` ```output 5.x.x ``` En Nexus, navega por `npm-proxy` en **Browse**: verás el paquete `express` en caché. Para publicar tus paquetes, añade en su `package.json` un bloque `"publishConfig": { "registry": "https://nexus.your_domain/repository/npm-hosted/" }` y ejecuta `npm publish` tras autenticarte contra esa URL. ### Maven Para que Maven descargue todas las dependencias a través de Nexus, declara un mirror en `~/.m2/settings.xml`, con las credenciales del usuario de CI: ```bash nano ~/.m2/settings.xml ``` ```xml nexus * https://nexus.your_domain/repository/maven-public/ nexus ci-user your_strong_password ``` El `id` del bloque `server` debe coincidir con el del mirror. Ejecuta un build en un proyecto Maven (`mvn -U dependency:resolve`) y comprueba en **Browse > maven-central** que aparecen los artefactos descargados. ## Paso 9: Limpieza y copias de seguridad Los repositorios proxy crecen sin límite si no los limpias. En **Settings > Repository > Cleanup Policies** crea una política, por ejemplo que elimine componentes no descargados en los últimos 90 días, y asígnala a los repositorios proxy en su configuración. Las tareas de **Settings > System > Tasks** ejecutan la limpieza; el espacio en disco se recupera cuando se ejecuta la tarea **Admin - Compact blob store**, que conviene programar después. Todo el estado de Nexus (base de datos, blobs y configuración) está en `/opt/sonatype-work/nexus3`. La forma más sencilla de obtener una copia coherente es detener el servicio durante la copia: ```bash sudo systemctl stop nexus sudo tar -czf "/var/backups/nexus-$(date +%F).tar.gz" -C /opt sonatype-work sudo systemctl start nexus ``` Guarda las copias fuera del servidor. Si el volumen de blobs es grande, programa esta operación en una ventana de poco uso. Para actualizar, descarga la versión nueva en `/opt`, asígnala al usuario `nexus`, cambia el enlace `/opt/nexus` y reinicia el servicio. Si modificaste `nexus.vmoptions`, repite el cambio en la versión nueva. ## Solución de problemas **Nginx devuelve `502 Bad Gateway`**: Nexus aún está arrancando o se ha detenido. Revisa `sudo systemctl status nexus` y `/opt/sonatype-work/nexus3/log/nexus.log`. **El servicio se detiene por falta de memoria**: el `-Xmx` de `nexus.vmoptions` es demasiado alto para la RAM del servidor. Bájalo como se indica en el paso 3. **`npm publish` devuelve `401 Unauthorized`**: el **npm Bearer Token Realm** no está activo, o el usuario no tiene permiso de escritura sobre `npm-hosted`. **Error `413 Request Entity Too Large` al subir artefactos**: aumenta `client_max_body_size` en el bloque de Nginx y recárgalo. ## Conclusión Tienes Nexus Repository funcionando en Ubuntu 24.04 como servicio systemd, publicado con HTTPS a través de Nginx, con repositorios proxy y hosted de npm y Maven que tus proyectos ya pueden usar. Como siguientes pasos, puedes configurar tu GitLab Runner o Jenkins para que resuelva dependencias desde Nexus, añadir repositorios PyPI siguiendo el mismo esquema proxy, hosted y group, o usar Harbor como registro dedicado para imágenes de contenedores.