180 lines
5.7 KiB
Markdown
180 lines
5.7 KiB
Markdown
This is a Vagrant Environment for a [Nexus Repository OSS](https://github.com/sonatype/nexus-public) service.
|
|
|
|
This will:
|
|
|
|
* Configure Nexus through Groovy scripts.
|
|
* Create the `adhoc-package` repository.
|
|
* Create the `npm-group`, `npm-hosted` and `npmjs.org-proxy` repositories.
|
|
* Create the `chocolatey-group`, `chocolatey-hosted` and `chocolatey.org-proxy` repositories.
|
|
* Create the `powershell-group`, `powershell-hosted` and `powershellgallery.com-proxy` repositories.
|
|
* Configure the NuGet `nuget-hosted` repository to accept pushing with an API key.
|
|
* Schedule a task to remove the old snapshots from the `maven-snapshots` repository.
|
|
* Create users and a custom `deployer` role.
|
|
* Setup an Active Directory LDAP user authentication source (when `config_authentication='ldap'` is set inside the `provision-nexus.sh` file).
|
|
* For more details look inside the [provision/provision-nexus](provision/provision-nexus) directory.
|
|
* Setup nginx as a Nexus HTTPS proxy and static file server.
|
|
* Test the installed repositories by using and publishing to them (see the `use-*` files).
|
|
|
|
**NB** If you are new to Groovy, be sure to check the [Groovy Learn X in Y minutes page](https://learnxinyminutes.com/docs/groovy/).
|
|
|
|
|
|
# Caveats
|
|
|
|
* Not all the repository plugins are open-source.
|
|
* The open-source ones are available at [sonatype/nexus-public/plugins](https://github.com/sonatype/nexus-public/tree/master/plugins).
|
|
|
|
|
|
# Usage
|
|
|
|
Build and install the [Ubuntu 22.04 Base Box](https://github.com/rgl/ubuntu-vagrant).
|
|
|
|
Build and install the [Windows 2022 Base Box](https://github.com/rgl/windows-vagrant).
|
|
|
|
Add the following entry to your `/etc/hosts` file:
|
|
|
|
```
|
|
192.168.56.3 nexus.example.com
|
|
```
|
|
|
|
Install Vagrant 2.1+.
|
|
|
|
Run `vagrant up --provider=virtualbox # or --provider=libvirt` to launch the environment.
|
|
|
|
Access the [Nexus home page](https://nexus.example.com) and login as the `admin` user and password `admin`.
|
|
|
|
You can also login with one of the example accounts, e.g. `alice.doe` and password `password`.
|
|
|
|
**NB** nginx is setup with a self-signed certificate that you have to trust before being
|
|
able to access the local Nexus home page.
|
|
|
|
# Notes
|
|
|
|
## Check for a component existence
|
|
|
|
With bash, [HTTPie](https://httpie.org/) and [jq](https://stedolan.github.io/jq/):
|
|
|
|
```bash
|
|
function nexus-component-exists {
|
|
[ \
|
|
"$(
|
|
http \
|
|
get \
|
|
https://nexus.example.com/service/rest/v1/search \
|
|
"repository==$1" \
|
|
"name==$2" \
|
|
"version==$3" \
|
|
| jq -r .items[].name)" == "$2" \
|
|
]
|
|
}
|
|
|
|
if nexus-component-exists npm-hosted hello-world 1.0.0; then
|
|
echo 'component exists'
|
|
else
|
|
echo 'component does not exists'
|
|
fi
|
|
```
|
|
|
|
With PowerShell:
|
|
|
|
```powershell
|
|
function Test-NexusComponent {
|
|
param(
|
|
[string]$repository,
|
|
[string]$name,
|
|
[string]$version)
|
|
$items = (Invoke-RestMethod `
|
|
-Method Get `
|
|
-Uri https://nexus.example.com/service/rest/v1/search `
|
|
-Body @{
|
|
repository = $repository
|
|
name = $name
|
|
version = $version
|
|
}).items
|
|
$items.Count -and ($items.name -eq $name)
|
|
}
|
|
|
|
if (Test-NexusComponent npm-hosted hello-world 1.0.0) {
|
|
Write-Host 'component exists'
|
|
} else {
|
|
Write-Host 'component does not exists'
|
|
}
|
|
```
|
|
|
|
# Troubleshooting
|
|
|
|
## Logs
|
|
|
|
The logs are at `/opt/nexus/log/nexus.log`.
|
|
|
|
You can also see them with `journalctl -u nexus`.
|
|
|
|
## OrientDB
|
|
|
|
Nexus uses [OrientDB](https://en.wikipedia.org/wiki/OrientDB) as its database. To directly use it from the console run:
|
|
|
|
```bash
|
|
sudo su -l # switch to the root user.
|
|
systemctl stop nexus # make sure nexus is not running while you use the database.
|
|
su -s /bin/bash nexus # switch to the nexus user.
|
|
nexus_home=/opt/nexus/nexus-3.49.0-02 # make sure you have the correct version here.
|
|
nexus_data=$nexus_home/../sonatype-work/nexus3
|
|
function orientdb-console {
|
|
java -jar $nexus_home/lib/support/nexus-orient-console.jar $*
|
|
}
|
|
cd $nexus_data
|
|
ls -laF db | grep ^d # list the databases
|
|
orientdb-console # start the console.
|
|
```
|
|
|
|
Then connect to one of the databases, e.g. to the `security` database:
|
|
|
|
```plain
|
|
connect plocal:db/security admin admin
|
|
```
|
|
|
|
Then execute some commands and exit the orientdb console, e.g.:
|
|
|
|
```plain
|
|
help
|
|
config
|
|
list classes
|
|
exit
|
|
```
|
|
|
|
Exit the nexus user shell:
|
|
|
|
```bash
|
|
exit
|
|
```
|
|
|
|
And start nexus again:
|
|
|
|
```bash
|
|
systemctl start nexus
|
|
```
|
|
|
|
For more information about the console see [Running the OrientDB Console](http://orientdb.com/docs/master/Tutorial-Run-the-console.html).
|
|
|
|
## OrientDB Check Databases
|
|
|
|
Execute the commands from the OrientDB section to stop nexus, to enter the
|
|
nexus account and create the `orientdb-console` function, then:
|
|
|
|
```bash
|
|
# check the databases.
|
|
# NB use CHECK DATABASE -v to see the verbose log.
|
|
orientdb-console 'CONNECT PLOCAL:db/component admin admin; CHECK DATABASE;'
|
|
#orientdb-console 'CONNECT PLOCAL:db/component admin admin; REPAIR DATABASE;'
|
|
orientdb-console 'CONNECT PLOCAL:db/config admin admin; CHECK DATABASE;'
|
|
orientdb-console 'CONNECT PLOCAL:db/security admin admin; CHECK DATABASE;'
|
|
#orientdb-console 'CONNECT PLOCAL:db/OSystem admin admin; CONFIG; LIST CLASSES;' # XXX fails to connect. see https://groups.google.com/a/glists.sonatype.com/forum/#!topic/nexus-users/7dVofIwC5HM
|
|
```
|
|
|
|
Then start nexus.
|
|
|
|
## Reference
|
|
|
|
* [How to reset a forgotten admin password in Nexus 3.x](https://support.sonatype.com/hc/en-us/articles/213467158-How-to-reset-a-forgotten-admin-password-in-Nexus-3-x)
|
|
* [Backup and Restore](https://help.sonatype.com/repomanager3/backup-and-restore)
|
|
* [Upgrading](https://help.sonatype.com/repomanager3/upgrading)
|