あるプロジェクトでNexusの構築を行ったので、
Nexus Repository Manager 3のインストール手順を
忘れないようにメモ書きしようと思います。
Nexus Repository Manager とは
Nexusとは、リポジトリを扱うミドルウェアサービス。
Docker や Maven、Npmなどの各リポジトリをNexusの中に作成し、
docker images, mavenライブラリ, npmパッケージを各リポジトリにキャッシュとし
保存して、プライベートに使ったりする事が出来るサービス。
大型案件などで、セキュリティ面でネット環境にアクセスがさせたくない
アプリケーション開発環境などを作成する際、よく使われたりするもの。
Nexus Repository Manager install 手順
1. JRE(OpenJDK 8)
- 1.1 JREインストール
NexusはJavaで動いているので、Javaのインストールが必要
$ sudo yum install -y java-1.8.0-openjdk
- 1.2 java version確認
$ java -version
#下記のようにレスポンスが返ってくればインストール成功
→ openjdk version "1.8.0_362"
- 1.3 現在使用中のJava確認
# どちらのコマンドでも可
$ sudo alternatives --config java
$ sudo update-alternatives --config 'java'
→ There is 1 program that provides 'java'.
Selection Command
-----------------------------------------------
*+ 1 java-1.8.0-openjdk.x86_64 (/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.362.b09-2.el9_1.x86_64/jre/bin/java)
2 . Nexus Repository Manager 3
- 2.1 Nexus Repository Manager 3 Install
# Nexus install
$ curl -LO https://download.sonatype.com/nexus/3/latest-unix.tar.gz
#「latest-unix.tar.gz」があるかを確認
# curlコマンドを実行すると上記のgz圧縮ファイルがインストールされるのであるか確認
$ ls
→ latest-unix.tar.gz
# gz file解凍
$ tar xzvf latest-unix.tar.gz
- 2.2 「nexus-」と「sonatype-work」を /opt/をディレクトリに移動
tarファイルを解凍した際に出来たファイル「nexus-」と「sonatype-work」を
/opt/をディレクトリ以下に移動する
#「nexus-*」と「sonatype-work」があるかを確認
# nexusのバージョンはインストールした時期で異なる
$ ls
→ nexus-3.51.0-01 sonatype-work
# 「nexus-*」を移動
$ sudo mv nexus-* /opt/
# 「sonatype-work」を移動
$ sudo mv sonatype-work /opt/
# 移動したかを確認
$ cd /opt/
$ ls
→ nexus-3.51.0-01 sonatype-work
3. Installしたfileを削除
# 「latest-unix.tar.gz」があるかを確認
$ ls
→ latest-unix.tar.gz
# fileを削除
$ sudo rm latest-unix.tar.gz
# 削除された事を確認
$ ls -la
4. nexusユーザ作成
# ユーザー作成
$ sudo useradd nexus
# ユーザーが作成されたか確認
$ grep nexus /etc/passwd
→ nexus:x:1002:1002::/home/nexus:/bin/bash
5. 所有権変更
# ディレクトリに移動
$ cd /opt/
$ ls -la
→ 各fileの権限が「root root」である事を確認
drwx--x--x. 10 root root 181 Apr 13 06:51 nexus-3.51.0-01
drwx--x--x. 3 root root 20 Apr 13 06:51 sonatype-work
# 「nexus-3.51.0-01」権限変更
$ sudo chown -R nexus:nexus /opt/nexus-*
$ sudo chmod -R go-rw /opt/nexus-*
→ 「nexus-*」が「nexus nexus」に変更された事を確認
drwx--x--x. 3 nexus nexus 20 Apr 13 06:51 nexus-3.51.0-01
# 「sonatype-work」権限変更
$ sudo chown -R nexus:nexus /opt/sonatype-work
$ sudo chmod -R go-rw /opt/sonatype-work
→ 「sonatype-work」が「nexus nexus」に変更された事を確認
drwx--x--x. 3 nexus nexus 20 Apr 13 06:51 sonatype-work
6. シンボリックリンク作成
# Nexusのversionはinstallしたものに合わせる
$ sudo ln -s /opt/nexus-3.51.0-01 /opt/nexus
$ ls /opt/
→ 「nexus」が作られている事を確認
nexus nexus-3.51.0-01 sonatype-work
7. nexus service登録
# viコマンドで「nexus.service」fileの編集
$ sudo vi /etc/systemd/system/nexus.service
# fileの中に下記の内容を張り付ける
# シンボリックリンクを作成していない場合はExecStartとExecStopの箇所のディレクトリが変わるので注意
[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
8. systemdファイルリロード
# どっちのコマンドでもよい
$ sudo systemctl daemon-reload
$ sudo systemctl restart nexus
9. 自動起動設定
$ sudo systemctl enable nexus.service
10. プロセス起動
$ sudo systemctl start nexus.service
11. プロセスのステータス確認
EC2で試している場合は、インスタンスタイプが
t2.medium以上じゃあないとメモリ不足でエラーになるので要注意
$ sudo systemctl status nexus.service
→ active (running) である事を確認
nexus.service - nexus service
Loaded: loaded (/etc/systemd/system/nexus.service; enabled; vendor preset: disabled)
Active: active (running) since Mon 2023-05-01 05:14:27 UTC; 1h 11min ago
Process: 698 ExecStart=/opt/nexus/bin/nexus start (code=exited, status=0/SUCCESS)
Main PID: 976 (java)
Tasks: 91 (limit: 24517)
Memory: 2.4G
CPU: 1min 46.863s CGroup: /system.slice/nexus.service
※ SELinuxを無効化
Red Hat系でプロセスがうまく動かなかった場合はSELinuxを無効化を行って
みてください。
※検証で試したAWS上のEC2では必要な設定だったが、
物理サーバーのRockyでは設定をいれなくてもNexusのプロセスが起動したりと
各環境によって必要な設定は変わるようです。
# SELinuxの確認
$ ls -dZ /opt/nexus/bin/nexus
→ _tで終わるがプロセスが「admin_t」になっている事を確認
system_u:object_r:admin_home_t:s0 /opt/nexus//bin/nexus
# ディレクトリのSELinuxを永続的に無効化
$ restorecon -R /opt/nexus-3.51.0-01/bin/
→ _tで終わるがプロセスが「bin_t」になった事を確認
system_u:object_r:bin_t:s0 /opt/nexus-3.51.0-01/bin/nexus
# ディレクトリのSELinuxを永続的に無効化
$ restorecon -R /opt/nexus-3.51.0-01/bin/nexus
→ _tで終わるがプロセスが「bin_t」になった事を確認
system_u:object_r:bin_t:s0 /opt/nexus-3.51.0-01/bin/
12. Fire Wallの設定
Nexusはデフォルトのポートが「8081」なので、
こちらのポート解放の設定が必要です。
AWS上のEC2では、セキュリティグループで設定が必要。
物理サーバーのRockyでは、下記のfirewall-cmdで設定が必要。
・ポート追加(解放したいポートを設定)
sudo firewall-cmd --permanent --add-port=8081/tcp
・リロード(しないと追加のコマンドが反映されない)
sudo firewall-cmd --reload
・設定されたか確認
sudo firewall-cmd --list-all
後はブラウザ上で、「http://IPアドレス:8081」
でアクセスできることを確認する。
※企業のネットワークだと、セキュリティ面でネットワークACLの設定が
ポートの80と443しか解放されていない事があるので、もしかしたら、
GUIの画面が表示されないかもしれません。
その場合は、クラウド上ならALBを作成してかましてあげればなんとでもなりますが、
そうでない場合は、自己証明書を発行して443のポートでアクセスできるように
してあげないといけません。
OpenJDKは、デフォルトでkeytoolコマンドが使用できるので
これを使って自己証明書を発行するのが一番簡単だと思います。
自己証明書の発行の仕方は下記を参照ください。
https://qiita.com/k-yasuhiro/items/c501a12b8bad14d10588