Sonatype Nexus Repository とは
プロダクトで多数のnpmパッケージを使用しており、稀にネットワークエラーでCI/CDが失敗することがあったため、npmパッケージ等のキャッシュをローカルに持つために、Sonatype Nexus Repositoryを導入しました。
Sonatype Nexus Repositoryは、ビルドアーティファクトや依存関係を一元管理するためのリポジトリマネージャで、以下のような特徴があります。
- アーティファクトの管理: ビルドプロセスで生成されたバイナリや依存関係を一元管理できます。
- リポジトリの統合: Maven、npm、yumなど、複数のリポジトリ形式をサポートし、一箇所で管理が可能です。
- キャッシュ機能: リモートリポジトリのキャッシュを保持し、ビルド時間の短縮やネットワーク負荷の軽減が可能です。
Sonatype Nexus Repository 運用時のポイント
つまづきや運用ポイントをまとめておきます。
ストレージに4GB以上の空き容量を確保することが必須
運用初期に以下のようなエラーが発生したことがあります。
com.orientechnologies.orient.core.exception.OLowDiskSpaceException: Error occurred while executing a write operation to database ‘component’ due to limited free space on the disk (4092 MB). The database is now working in read-only mode. Please close the database (or stop OrientDB), make room on your hard drive and then reopen the database. The minimal required space is 4096 MB. Required space is now set to 4096MB (you can change it by setting parameter storage.diskCache.diskFreeSpaceLimit)
Nexus で採用している OrientDB は空き容量が4096 MB必要とのこと。
枯渇するとDBへの書き込みが止まり、リポジトリからのファイル取得等できなくなります。
クリーンアップポリシーの設定
proxyを使う場合、日に日に増えていくリポジトリのサイズを抑えるために、クリーンアップポリシーを設定することが重要です。
Component Age(キャッシュしてからの経過日数)、Component Usage(最後に使われてからの経過日数)の2つのポリシーがあります。
個人的には、Component Usage を採用しています。
日数は30日程度で良いかなと思います。
Task にクリーンアップを設定
ポリシーを作ったらそのポリシーを実行するためのTaskを作成します。
毎日実行する必要も無いので、週に1回程度で十分かと思います。
以下のように設定し運用しています。
- Task frequency:
Weekly - Time to run this task:
23:00 - Days to run this task:
Saturday
Task に Admin - Compact blob store を設定
最近気づいたのですが、クリーンアップのTaskを設定しただけではファイルは物理的に削除されません。
Nexus のドキュメントをみたところちゃんと書いてありました。
https://help.sonatype.com/en/cleanup-policies.html
A soft delete means that artifacts are only marked for removal and not yet deleted from the disk. Disk space is not reclaimed until the Admin - Compact blob store task runs.
ソフトデリートだから、ファイルは削除されていないと。
Admin - Compact blob store のTaskを作成し、実行することでファイルが削除されるということなので、これも設定しておきましょう。
ソフトデリートの後が良さそうなので、以下のように設定して運用しています。
- Task frequency:
Weekly - Time to run this task:
01:00 - Days to run this task:
Sunday
まとめ
これらのポイントを押さえて運用すれば、Sonatype Nexus Repositoryを安定して効率的に運用することができます。