Sonatype Nexus を CentOS 7 にインストールする手順

投稿者 : OSCA

[PR] 関東地方の美しい夜景を観にいこう。 夜景サイト「夜景散歩」で夜景スポットを検索

 本稿では独自のリポジトリを構築できるパッケージリポジトリ管理ソフトウェア「Sonatype Nexus」を CentOS 7 にインストールする手順について解説します。
Nexus は有償版と無償版がありますが、本稿では OSS の無償版を対象とします。 またインストールする Nexus のバージョンは、執筆時最新の 3.9 とします。

Javaランタイムのインストール

 Sonatype Nexus 3 を動かすためには Java 8 以上のランタイム (JRE) が必要ですので、CentOS 7 に Java がインストールされていない場合は次のような記事を参考にインストールしてください。

 OpenJDK などの種類の Java ランタイムはサポート対象外となっているので注意してください。

Linuxユーザの作成

 これからインストールする Nexus を動作させるための専用 Linux ユーザ「nexus」を作成します。 次のようなコマンドで追加します。

# groupadd nexus
# useradd nexus -g nexus

ダウンロード

 OSS無償版の Nexus は公式のダウンロードページ「DownloadRepository OSS」からダウンロードできます。 ここでは Linux 版の tar.gz 形式のファイルをダウンロードします。 ダウンロードしたら、インストールする対象の CentOS 7 に配置してください。

配置

 本稿では、2018年03月現在で最新の nexus-3.9.0-01-unix.tar.gz をダウンロードしました。 それぞれダウンロードした Nexus のバージョンに置き換えて読み進めてください。
ダウンロードした tar.gz ファイルを解凍し、ファイルの所有者を Nexus ユーザに変更します。 ここでは /opt フォルダに解凍します。 また今後のバージョンアップに備え、nexus というシンボリックリンクを作成しておくと良いでしょう。

# tar -xzvf nexus-3.9.0-01-unix.tar.gz
# mv nexus-3.9.0-01 /opt
# cd /opt
# chown -R nexus:nexus nexus-3.9.0-01
# ln -s nexus-3.9.0-01 nexus
# chown nexus:nexus nexus-3.9.0-01

 また、Nexus を起動した時に作業用ディレクトリとして /opt/sonatype-work ディレクトリを必要とするので作成しておきます。

# mkdir /opt/sonatype-work
# chown nexus:nexus /opt/sonatype-work

systemd サービス化

 CentOS 7 からはサービスを systemd が管理するようになりました。 ここでは Sonatype Nexus をサービスとして登録します。 まずは /etc/systemd/system/nexus.service を新たに作成して、つぎのように記述して保存します。 これはサービスの定義ファイルです。

[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

 サービスの定義ファイルを作成したら、マシンを起動・再起動した場合に自動的に Nexus が起動するように systemctl enable コマンドで nexus パッケージを指定して実行します。

# systemctl enable nexus
Created symlink from /etc/systemd/system/multi-user.target.wants/nexus.service to /etc/systemd/system/nexus.service.

ファイアウォール (Firewalld) が有効な場合の設定

 Nexus では、デフォルトの HTTP の待ち受けポートとして8081番が利用されますが、CentOS 7 ではデフォルトでファイアウォール(Firewalld)が有効なっている場合があります。 ファイアウォールが有効になっている場合は8081番ポートへのアクセスを許可しないとブラウザから閲覧することができませんので、ここではその設定手順についてざっと説明します。

 Firewalld 自身が認識しているサービスは /usr/lib/firewalld/services/ にサービス毎に xml ファイルを作成して、xml にサービスで利用するポート番号などを記載して管理しています。 しかしユーザーがカスタマイズした設定(CentOS 7 初期状態とは異なる設定)は /etc/firewalld/services/ 内に配置するように決められています。 ここでは、新たに Nexus サービスを Firewalld で管理したいので、/etc/firewalld/services/nexus.xml を作成し、そのファイルの中身は次のように記述します。

<?xml version="1.0" encoding="utf-8"?>
<service>
  <short>Sonatype Nexus</short>
  <description>Sonatype Nexus</description>
  <port protocol="tcp" port="8081"/>
</service>

 Firewalld が現時点で通信を許可しているサービスは、次のような firewall-cmd コマンドで確認することができます。 次の例だと dhcpv6-client と ssh のサービスが許可されていることが分かります。

# firewall-cmd --list-services --zone=public --permanent
dhcpv6-client ssh

 Firewalld に上で作成した nexus の通信を許可するように、次のように firewall-cmd を実行します。

# firewall-cmd --add-service=nexus --zone=public --permanent
# firewall-cmd --reload

 もう一度、現在通信を許可しているサービスを確認すると、今度は nexus が追加されたことが確認できます。

# firewall-cmd --list-services --zone=public --permanent
dhcpv6-client ssh nexus

 これでファイアウォールの設定も完了です。

Nexusの起動と停止

 ここまで設定できたら、Nexus を起動してみましょう。 systemctl start コマンドで nexus パッケージを指定して起動します。

$ systemctl start nexus

 起動に少しだけ時間がかかりますが、起動処理が終わった頃を見計らって http://インストールしたマシンのホスト名:8081 にアクセスしてみてください。次のように「Nexus Repository Manager」の画面が表示されたら成功です。

 なお、サービスを停止する場合は、次のように systemctl stop コマンドで nexus パッケージを指定して実行します。

$ systemctl stop nexus

ユーザ管理

 最後に、起動した Nexus Repository Manager のユーザについて整理しておきましょう。 Nexus の初期状態では次のようなユーザが用意されています。

ユーザ名 パスワード 説明
admin admin123 全ての管理権限を持つ管理者ユーザ

 デフォルトのユーザをそのまま残しておくのは危険ですので、次のような対応を行ってください。

  • admin ユーザのパスワードを変更する。
  • 新しい管理者ユーザを追加し、admin ユーザを利用不可(disabled)に変更する。(推奨)

おわりに

 本稿では独自のリポジトリを構築できるパッケージリポジトリ管理ソフトウェア「Sonatype Nexus」を CentOS 7 にインストールする手順について解説しました。

Apache Mavenのトップへ戻る

著者 : OSCA

OSCA

Java, PHP 系のWEBエンジニア。 WEBエンジニア向けコミュニティ「WEBエンジニア勉強会」を主催。 個人として何か一つでも世の中の多くの人に使ってもらえるものを作ろうと日々奮闘中。
@engineer_osca