Nexus Repository OSSをUbuntu 18.04 LTSにインストールする

# はじめに

この記事は、インストール直後のUbuntu Server 18.04 LTS(以降、Ubuntu)へ[Nexus Repository OSS](https://www.sonatype.com/nexus-repository-oss)(以降、Nexus)をインストールした、記録です。
なお、この記事では、VirtualBoxで作ったUbuntuのVM(1コア、メモリ2GB、可変ストレージ50GB)を利用します。

# この記事を書くのに使った環境
* ホスト : Windows 10 Professional (バージョン1803)
* VM実行アプリケーション : [Oracle VM VirtualBox](https://www.virtualbox.org/) (バージョン5.2.12)
* VM : [Ubuntu Server 18.04.1 LTS](https://www.ubuntu.com/download/server)
* [Nexus Repository OSS](https://www.sonatype.com/nexus-repository-oss) : 3.13.0-01

# 注意

* HTTPSじゃない
* パスワードは初期状態のまま

ここら辺を変えたいという場合は、資料を参考にして、変更が必要です。

# 手順

## 0. 準備

### 0-1. Ubuntuをインストールする
```
$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=18.04
DISTRIB_CODENAME=bionic
DISTRIB_DESCRIPTION="Ubuntu 18.04 LTS"

$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 18.04 LTS
Release:        18.04
Codename:       bionic
```

### 0-1. パッケージを最新化する
```
$ sudo apt -y update && sudo apt -y upgrade
```

### 0-2. JREをインストールする
```
$ sudo apt -y install openjdk-8-jre
```

ここでは、OpenJRE8を利用する


#### 0-2-1. バージョン
```
$ java -version
openjdk version "1.8.0_171"
OpenJDK Runtime Environment (build 1.8.0_171-8u171-b11-0ubuntu0.18.04.1-b11)
OpenJDK 64-Bit Server VM (build 25.171-b11, mixed mode)
```

## 1. Nexusを起動するユーザー( `nexus` )を作成する
```
$ sudo useradd nexus
```

## 2. Nexusをダウンロードし、 `/opt` に置く

```
$ export NEXUS_VERSION=3.13.0-01
$ curl -O https://sonatype-download.global.ssl.fastly.net/nexus/3/nexus-${NEXUS_VERSION}-unix.tar.gz
$ tar -zxvf nexus-${NEXUS_VERSION}-unix.tar.gz
$ sudo cp -rf nexus-${NEXUS_VERSION} /opt/
$ sudo cp -rf sonatype-work/ /opt/
$ unset NEXUS_VERSION
```

コピーしている2つのディレクトリは、以下の意味があります

* `nexus-${NEXUS_VERSION}` は、プログラムが格納されているディレクトリ
* `sonatype-work` は、データを格納するディレクトリ

## 3. Nexusの所有者を起動するユーザーに変更する

```
$ export NEXUS_VERSION=3.13.0-01
$ cd /opt/
$ sudo ln -nfs /opt/nexus-${NEXUS_VERSION}/ /opt/nexus
$ sudo chown -R nexus:nexus nexus-${NEXUS_VERSION}/
$ sudo chown -R nexus:nexus sonatype-work/
$ sudo chown -R nexus:nexus nexus
$ unset NEXUS_VERSION
```

「バージョン(ここでは、 `3.13.0-01`)が変わった時の影響範囲がバージョンだけ」になるように、シンボリックリンクを作成しています

#### 3-1. 実行結果
これで、実行するのは `/opt/nexus` 以下のファイルを指定すれば良くなりました。
バージョンに依存する部分を隠蔽したので、バージョン更新時に楽になります。

```
$ ls -lh /opt
total 8.0K
lrwxrwxrwx 1 nexus nexus   21 Aug  7 05:53 nexus -> /opt/nexus-3.13.0-01/
drwxr-xr-x 9 nexus nexus 4.0K Aug  7 05:50 nexus-3.13.0-01
drwxr-xr-x 3 nexus nexus 4.0K Aug  7 05:51 sonatype-work
```

## 4.　Nexusを `nexus` アカウントで起動する
```
$ sudo mkdir -p /home/nexus
$ sudo touch /home/nexus/.bashrc
$ sudo echo "NEXUS_HOME=\"/opt/nexus\"" | sudo tee -a /home/nexus/.bashrc > /dev/null
$ sudo chown -R nexus:nexus /home/nexus
$ sudo echo "run_as_user=\"nexus\"" | sudo tee -a /opt/nexus/bin/nexus.rc > /dev/null
```

## 5. Nexusを自動起動する設定をおこなう
`systemd` でNexusを自動起動できるように設定をおこなう

```
$ sudo mkdir -p /etc/systemd/system/nexus.service.d/
$ sudo touch /etc/systemd/system/nexus.service.d/override.conf
$ sudo echo "[Service]
LimitNOFILE=65536" | sudo tee -a /etc/systemd/system/nexus.service.d/override.conf
$ echo "[Unit]
Description=nexus service
After=network.target

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

[Install]
WantedBy=multi-user.target" | sudo tee -a /etc/systemd/system/nexus.service
$ sudo systemctl daemon-reload
$ sudo systemctl enable nexus.service
$ sudo systemctl start nexus.service
```

## 6. Nexus実行状況の確認
`systemctl status nexus` を実行した結果、 `Active: active (running)` が出力されれば、インストールしたNexusが動作している

```
$ systemctl status nexus
● nexus.service - nexus service
   Loaded: loaded (/etc/systemd/system/nexus.service; enabled; vendor preset: enabled)
  Drop-In: /etc/systemd/system/nexus.service.d
           └─override.conf
   Active: active (running) since Tue 2018-08-07 11:25:10 UTC; 8s ago
  Process: 11252 ExecStart=/opt/nexus/bin/nexus start (code=exited, status=0/SUCCESS)
 Main PID: 11420 (java)
    Tasks: 35 (limit: 2321)
   CGroup: /system.slice/nexus.service
           └─11420 /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java -server -Dinstall4j.jvmDir=/usr/lib/jvm/java-8-open

Aug 07 11:25:10 nexus systemd[1]: Starting nexus service...
Aug 07 11:25:10 nexus nexus[11252]: Starting nexus
Aug 07 11:25:10 nexus systemd[1]: Started nexus service.
```

## 7. サービスを利用する
再起動し、 `http://localhost:8081/` にアクセスして、Nexusの画面に切り替われば、無事終了

# 個人的な感想

オンプレミスでデータを保持し続けるWebサービスを立ち上げる場合、DockerよりもVMで作る方が、バージョンアップなどが楽...。

# 資料
* Nexus Repository OSS - Software Component Management | Sonatype : https://www.sonatype.com/nexus-repository-oss
* Download Ubuntu Server | Download | Ubuntu : https://www.ubuntu.com/download/server
* Install OpenJRE/JDK on Ubuntu 18.04 LTS | Website for Students : https://websiteforstudents.com/install-openjre-jdk-on-ubuntu-18-04-lts-beta-server/
* Nexus Repository OSS 3.x のインストール | Tagbangers Blog : https://blog.tagbangers.co.jp/2016/12/07/install-nexus-repo-oss-3x
* Sonatype Nexus 3を使用して、PrivateなMavenリポジトリ、npm Registry、Docker Registryを構築する - CLOVER : http://d.hatena.ne.jp/Kazuhira/20170109/1483972099
* Run as a Service : https://help.sonatype.com/repomanager3/installation/run-as-a-service