Ansible を使用して Nexus 3 OSS を Orange Pi 5 にデプロイする:ステップバイステップ ガイド
Nexus 3 OSS は、コンテナ イメージ、Python PIP、Java jar などの複数の形式を処理できるオープンソースのアーティファクト リポジトリ マネージャーです。
オンプレミスのアーティファクト マネージャーが必要な理由は何ですか?それには多くの理由があります:
-
プライベート インフラストラクチャを使用する:保護する必要がある独自のコードがある可能性があります。
-
アーティファクトのダウンロード速度の高速化:インターネット経由で同じアーティファクトを常にダウンロードする場合は、それらをキャッシュすることで複数のサーバーにまたがる複数のユーザーの利益のために、それらを中央の場所にキャッシュできます。
-
どのようなアーティファクトがビルド チェーンに組み込まれるかを制御します。アーティファクトの場所を一元管理し、使用が承認されていることを確認し、悪意のあるコードが含まれていないことも確認します。
-
アーティファクトにアクセスできるユーザーを分離する:組織内の一部のアーティファクトに誰がアクセスできるかについて、より厳格な要件がある場合があります。
この記事では、Ansible Playbook を使用して Nexus 3 の OSS バージョンをダウンロード、インストール、設定する方法を説明します。
Nexus 3 は、8 GB または RAM を搭載した Orange PI 5 コンピュータ上で実行されますが、このプロビジョニングは、最小要件を満たす任意のマシン上で実行できます。セットアップの一部には、インベントリ ファイルにリストされているマシンの PyPI.org 用のプロキシを設定することが含まれます。
このチュートリアルのコードを実行するために必要なもの
<オル>Ansible プレイブック、Nexus、および PIP モジュールのソース コードをダウンロードするためのインターネット接続
少なくとも 8 GB の RAM を搭載した 2 台以上の Linux マシン (Debian、Armbian、および Fedora IOT を使用しました)。私のクラスタには Raspberry PI 4 と OrangePI 5 が混在しています。
Ansible コントローラーは Fedora マシン上で実行されますが、任意のサーバーをコントローラーにすることができます。 Ansible のインストール手順は簡単に従うことができます。
ハンドブックの構成
タスクをグループに分割した結果、プレイブックは次のようになります。
[josevnz@dmaf5 Nexus3OnOrangePI]$ tree -N ansible/
ansible/
├── inventories
│ └── home
│ └── hosts.yaml
├── roles
│ ├── clients
│ │ ├── tasks
│ │ │ └── main.yaml
│ │ └── templates
│ │ └── pip.conf.j2
│ └── nexus
│ ├── files
│ │ └── swagger.json
│ ├── tasks
│ │ ├── download.yaml
│ │ ├── install.yaml
│ │ ├── main.yaml
│ │ ├── post_install.yaml
│ │ ├── pre_install.yaml
│ │ ├── repositories.yaml
│ │ ├── third_party.yaml
│ │ └── user.yaml
│ └── templates
│ ├── logrotate.nexus3.j2
│ ├── nexus3.service.j2
│ ├── nexus.rc.j2
│ └── nexus.vmoptions.j2
├── site.yaml
├── vars
│ ├── clients.yaml
│ └── nexus.yaml
└── vault
├── nexus_password.enc
└── README.md
13 directories, 21 files
ここで少し説明します。
-
「ネクサス」と「クライアント」の 2 つの役割があります。 nexus ロールはアーティファクト管理ソフトウェアのセットアップに使用され、クライアント ロールは各マシンの pip 設定をセットアップします。
-
Vars には、各ロールで使用される変数が含まれており、使用法をより明確にするためにファイルで区切られています。
-
私たちはパスワードを持っており、Ansible のボールト機能を使用して管理しました。
-
ファイル「site.yaml」はロールの実行を調整します。
- hosts: all
tags: clients
vars_files:
- vars/clients.yaml
roles:
- clients
- hosts: nexus_server
tags: nexus
become_user: root
become: true
vars_files:
- vars/nexus.yaml
roles:
- nexus
次に、プレイブックが実行されるユニバースを見てみましょう。
ホスト インベントリ
私の場合、それは非常に単純です。「クライアント」と Nexus 3 サーバー自体が実行されるマシンという 2 つの主要なグループがあります。
all:
children:
nexus_server:
hosts:
orangepi5.home:
home_lab:
hosts:
dmaf5.home:
raspberrypi.home:
orangepi5.home:
次の重要なタスクは、Nexus 3 をダウンロードして設定することです。
Nexus 3 のインストール方法
ファイル main.yaml には、Nexus ロールの各インストール タスクの順序と目的が記述されています。
# Tasks listed here are related to the remote Nexus 3 server
# Included tasks are called in order
---
- include_tasks: third_party.yaml
- include_tasks: pre_install.yaml
- include_tasks: download.yaml
- include_tasks: install.yaml
- include_tasks: post_install.yaml
- include_tasks: user.yaml
- include_tasks: repositories.yaml
まず、私が「コアタスク」と呼んでいるものを見てみましょう。
<オル>third_party.yaml:ここでは、OpenJDK8 (Nexus 3 は Java で書かれています) をインストールし、logrotate して古いログを処理します。
pre_install.yaml:ここでは、プロセスを実行する専用の非特権ユーザーである nexus に必要なディレクトリの作成など、多くのことが行われます。
download.yaml:名前が示すように、Nexus 3 OSS ソフトウェアの新しいバージョンを取得し、正しいチェックサムがあることを確認します。インターネットからマルウェアをインストールすることは望ましくありません。
次に、「カスタマイズされたインストール グループ」に分類されるタスクが続きます。
<オル>install.yaml:ソフトウェアを解凍し、systemd ユニットが自動的に起動するように準備し、Nexus 用の JVM 設定をセットアップし、logrotate 構成をデプロイします。
post_install.yaml:ここではエキサイティングなことが起こります。ソフトウェアがインストールされ、それを初めて実行します。また、REST API を使用してデフォルトのパスワードを変更し、カスタマイズ段階に進むことができます。
user.yaml:ここでは、エンド ユーザーに Nexus が提供するサービスへの適切なアクセスを提供する準備をします。これは、REST-API と Ansible クライアント コードを組み合わせて使用して行います。
# https://help.sonatype.com/repomanager3/installation-and-upgrades/post-install-checklist
# https://help.sonatype.com/repomanager3/integrations/rest-and-integration-api
---
- name: Enable anonymous user
tags: anonymous
ansible.builtin.uri:
user: ""
password: ""
url: "/v1/security/anonymous"
method: PUT
body_format: raw
status_code: [ 200, 202, 204 ]
headers:
Content-Type: application/json
body: |-
{ "enabled" : true, "userId" : "anonymous", "realmName" : "NexusAuthorizingRealm" }
force_basic_auth: true
return_content: true
any_errors_fatal: true
- name: Enable Docker security realm
tags: docker_realm
ansible.builtin.uri:
user: ""
password: ""
url: "/v1/security/realms/active"
method: PUT
body_format: raw
status_code: [ 200, 202, 204 ]
headers:
Content-Type: application/json
body: |-
[ "NexusAuthenticatingRealm", "NexusAuthorizingRealm", "DockerToken" ]
force_basic_auth: true
return_content: true
any_errors_fatal: true
ロジックは簡単に理解できます。「PUT」http メソッドを使用すると、変更操作 (既存のロールとユーザーがすでに存在することを意味します) であることがわかります。エラー検出は、Nexus から返された HTTP コードを取得することで行われます。
次のステップは、ローカル PyPi プロキシを準備することです。これは複数のステップからなるタスクであり、次に詳しく説明します。
Nexus 3 で PyPI プロキシを設定する方法
Nexus 3 ロールの最後のファイルは「repositories.yaml」です。ここでは、次の手順を実行します。
<オル>プロキシがすでにセットアップされているかどうかを確認します (GET または読み取り専用操作)。
存在しない場合は、新しいものを作成します (新しいリポジトリ全体を作成する詳細を含む JSON ペイロードを含む POST メソッド)
このプレイブックにはリポジトリ設定を更新するオプションが提供されていないことに注意してください。 REST API を使用して実行することも可能ですが、それは読者の演習として残しておきます。
PyPi プロキシを準備するタスクを以下に示します。
# Create proxy for repositories
# https://help.sonatype.com/repomanager3/integrations/rest-and-integration-api
# PyPi: https://pip.pypa.io/en/stable/user_guide/
---
- name: Check if the PyPi proxy exists
tags: pypi_proxy_exists
ansible.builtin.uri:
user: ""
password: ""
url: "/v1/repositories/pypi/proxy/python_proxy"
method: GET
body_format: raw
status_code: [ 200, 202, 204, 404 ]
headers:
Content-Type: application/json
force_basic_auth: true
return_content: true
any_errors_fatal: true
register: python_local
- name: Create PyPI proxy
tags: pypi_proxy_create
ansible.builtin.uri:
user: ""
password: ""
url: "/v1/repositories/pypi/proxy"
method: POST
body_format: raw
status_code: [ 201 ]
headers:
Content-Type: application/json
body: |-
{
"name": "python_proxy",
"online": true,
"storage": {
"blobStoreName": "default",
"strictContentTypeValidation": true
},
"proxy": {
"remoteUrl": "https://pypi.org/",
"contentMaxAge": -1,
"metadataMaxAge": 1440
},
"negativeCache": {
"enabled": true,
"timeToLive": 1440
},
"httpClient": {
"blocked": false,
"autoBlock": true,
"connection": {
"retries": 0,
"timeout": 60,
"enableCircularRedirects": false,
"enableCookies": true,
"useTrustStore": false
}
}
}
force_basic_auth: true
return_content: true
any_errors_fatal: true
when: python_local.status == 404
もうすぐそこです。次に、Python ライブラリを取得するために直接 PyPi サイトではなくローカル Nexus を使用するように PyPi クライアントに指示する必要があります。
クライアントの設定方法
クライアントの役割は非常に単純で、新しいリポジトリで検索を強制するのに十分な情報を含む pip.conf のテンプレートをデプロイするだけです。
# Tasks here are meant to be used on our clients user
---
- name: Create installation directory for pip.conf
tags: pip_basedir
ansible.builtin.file:
state: directory
path: ""
owner: ""
group: ""
mode: "u+rwx,go-rwx"
- name: Copy pip.conf file
tags: pip_copy
ansible.builtin.template:
src: pip.conf.j2
dest: "/pip.conf"
owner: ""
group: ""
mode: u=rxw,g=r,o=r
結果のファイルは「~/.config/pip/pip.conf」にデプロイされます。 すべてのマシンの ':
# https://pip.pypa.io/en/stable/topics/configuration/
[global]
timeout = 60
[install]
index = http://orangepi5.home:8081/repository/python_proxy/pypi
index-url = http://orangepi5.home:8081/repository/python_proxy/simple/
trusted-host = orangepi5.home
上のファイルは、クラスターにデプロイされたファイルの最終バージョンがどのように表示されるかを示す例を示しています (実際のバージョンは、解決された URL によって異なります)。
ここで、プレイブック全体を実行して、どのようになるかを確認します。
プレイブックの実行方法
プレイブックを実行するには、いくつかの引数を渡します。
<オル>ホストインベントリの場所
暗号化されたパスワード ファイルと、保護されたファイルのコンテンツのロックを解除するためのマスター パスワードを含むマスター ファイルの場所
最後に、メインの Playbook ファイルの場所です。
cd ansible
ansible-playbook --inventory inventories --extra-vars @vault/nexus_password.enc --vault-password-file $HOME/vault/ansible_vault_pass site.yaml

新しい PyPI プロキシをテストする方法
新しいプロキシをテストするために、pip と仮想環境を使用して Python Rich をインストールします。
josevnz@orangepi5:~$ python3 -m venv ~/virtualenv/rich
(rich) josevnz@orangepi5:~$ . ~/virtualenv/rich/bin/activate
(rich) josevnz@orangepi5:~$ pip install rich
Looking in indexes: http://orangepi5.home:8081/repository/python_proxy/simple/
Collecting rich
Downloading http://orangepi5.home:8081/repository/python_proxy/packages/rich/13.3.4/rich-13.3.4-py3-none-any.whl (238 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 238.7/238.7 KB 14.8 MB/s eta 0:00:00
Collecting pygments<3.0.0,>=2.13.0
Downloading http://orangepi5.home:8081/repository/python_proxy/packages/pygments/2.15.0/Pygments-2.15.0-py3-none-any.whl (1.1 MB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.1/1.1 MB 23.8 MB/s eta 0:00:00
Collecting markdown-it-py<3.0.0,>=2.2.0
Downloading http://orangepi5.home:8081/repository/python_proxy/packages/markdown-it-py/2.2.0/markdown_it_py-2.2.0-py3-none-any.whl (84 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 84.5/84.5 KB 6.9 MB/s eta 0:00:00
Collecting mdurl~=0.1
Downloading http://orangepi5.home:8081/repository/python_proxy/packages/mdurl/0.1.2/mdurl-0.1.2-py3-none-any.whl (10.0 kB)
Installing collected packages: pygments, mdurl, markdown-it-py, rich
Successfully installed markdown-it-py-2.2.0 mdurl-0.1.2 pygments-2.15.0 rich-13.3.4
そして、新しいリポジトリ上の新しいアーティファクトを確認することで、キャッシュが実際に使用されたことを確認できます。

PyPi アーティファクトを参照
他のものをインストールして、クライアントが実際に動作するデモを見てみましょう。

REST-API を使用したさらなるカスタマイズ
すべての Nexus インストールでは、サーバーでサポートされている API を説明する JSON ファイルをダウンロードできます。たとえば、私のサーバーでは、orangepi5.home サーバーから次のようなコピーを取得できます。
curl --fail --remote-name http://orangepi5.home:8081/service/rest/swagger.json
また、UI を使用すると、他の REST API エンドポイントを試してインストールをカスタマイズできます。

REST API テスト
結論
時間をかけて Nexus 3 の本を読んで、このツールが提供できる機能をよく理解することをお勧めします。
Ansible を使用するのではなく、この種のセットアップが必要な場合は、コミュニティが Debian および RPM インストーラーを用意しました。
Nexus 3 にはたくさんの機能があります 構成可能な設定の。ここでは表面だけを取り上げました。この記事を準備しているときに、非常に完全で最新のプレイブックを備えた「ThoTeam Nexus3-oss リポジトリ」を見つけましたが、それは自宅のラボに必要なものよりもはるかに複雑でした。
Archiva はもう 1 つのオープンソース アーティファクト マネージャーで、機能はより制限されていますが、セットアップもより簡単です。
インストール後のチェックリストには、自宅ラボでは完了する必要のなかったいくつかのタスクが含まれています。セットアップが完了していることを確認するためにチェックしてください。
無料でコーディングを学びましょう。 freeCodeCamp のオープンソース カリキュラムは、40,000 人以上の人々が開発者としての職に就くのに役立ちました。始めましょう
-
Windows 8.1 を Mac にインストールする方法
Macbook で Windows 8.1 を入手する方法 Macbook で Windows 8.1 を実行する必要がある場合は、いくつかの方法があります。Mac の BootCamp Assistant を使用するか、Parallels Desktop、VMware Fusion、VirtualBox などの仮想マシンをダウンロードして使用します。残念ながら、Macbook が 2016 年よりも新しい場合、BootCamp 経由で Windows 8 をインストールすることはおそらく機能しません。その場合、Windows 8.1 のライセンス キーがあれば、仮想化ソフトウェアは引き
-
Mac 向け Safari の代替トップ 6:あなたに最適なブラウザを見つけてください
Apple コンピュータのデフォルトのブラウザである Safari は、Mac エコシステムに深く統合されているため、魅力的な使用法を提供しますが、欠点や欠点がないわけではありません。他の Web ブラウザに興味がある場合は、次の Safari の代替ブラウザをチェックしてください。 目次 1.総合的に最も優れた Safari の代替案:Opera 「中間層」インターネット ブラウザの中で最もよく知られている Opera は、1996 年および Windows 95 からブラウザ ゲームに登場しています。速度とパワーの安定したバランスにより、数多くの組み込み機能が Opera を傑出した