はじめに
Dockerコンテナで動作しているJFrog Artifactoryのデータベースを、組み込みDerbyからPostgreSQLへ移行します。
Artifactoryのバージョンは、移行前後ともに7.71.23です。
移行前:Artifactory 7.71.23 + Derby
移行後:Artifactory 7.71.23 + PostgreSQL 15
JFrogでは、PostgreSQLへの移行方法としてSystem Export/Importを案内しています。異なるArtifactoryバージョン間でのImportは推奨されていないため、バージョンは変更しません。
前提環境
| 項目 | 設定 |
|---|---|
| Artifactory | 7.71.23 |
| 移行元DB | Derby |
| 移行先DB | PostgreSQL 15 |
| 移行元コンテナ | artifactory-derby |
| 移行先コンテナ | artifactory-postgresql |
| PostgreSQLコンテナ | artifactory-db |
System Exportの実行
ArtifactoryのWeb UIから以下を開きます。
Administration
> Artifactory
> Import & Export
> System
下図のようにExportするパスとオプションを設定します。
設定する内容は環境に合わせてください。パスはDockerコンテナ内のパスとなります。

移行元の停止
docker stop artifactory-derby
移行が完了するまで、移行元コンテナは削除しません。
Dockerネットワークの作成
docker network create artifactory-network
PostgreSQLコンテナの起動
PostgreSQLデータ用のVolumeを作成します。
docker volume create artifactory-pgdata
PostgreSQLコンテナを起動します。
docker run -d \
--name artifactory-db \
--network artifactory-network \
-e POSTGRES_DB=artifactory \
-e POSTGRES_USER=artifactory \
-e POSTGRES_PASSWORD='<パスワード>' \
-v artifactory-pgdata:/var/lib/postgresql/data \
postgres:15
起動状態を確認します。
docker exec artifactory-db \
pg_isready -U artifactory -d artifactory
移行先ディレクトリの作成
sudo mkdir -p /opt/jfrog/artifactory-postgresql/var/etc/security
sudo chown -R 1030:1030 /opt/jfrog/artifactory-postgresql/var
master.keyのコピー
移行元のmaster.keyを移行先へコピーします。
sudo cp \
/opt/jfrog/artifactory/var/etc/security/master.key \
/opt/jfrog/artifactory-postgresql/var/etc/security/master.key
sudo chown 1030:1030 \
/opt/jfrog/artifactory-postgresql/var/etc/security/master.key
sudo chmod 600 \
/opt/jfrog/artifactory-postgresql/var/etc/security/master.key
master.keyは暗号化されたデータを復号するため、System Importで必要です。
system.yamlの作成
sudo vi /opt/jfrog/artifactory-postgresql/var/etc/system.yaml
以下を設定します。
shared:
database:
type: postgresql
driver: org.postgresql.Driver
url: jdbc:postgresql://artifactory-db:5432/artifactory
username: artifactory
password: "<パスワード>"
sudo chown 1030:1030 \
/opt/jfrog/artifactory-postgresql/var/etc/system.yaml
sudo chmod 600 \
/opt/jfrog/artifactory-postgresql/var/etc/system.yaml
移行先Artifactoryの起動
移行元とポートが重複しないように、確認用ポートで起動します。
docker run -d \
--name artifactory-postgresql \
--network artifactory-network \
-p 18081:8081 \
-p 18082:8082 \
-v /opt/jfrog/artifactory-postgresql/var:/var/opt/jfrog/artifactory \
-v /opt/jfrog/artifactory/var/backup/system-export:/import:ro \
releases-docker.jfrog.io/jfrog/artifactory-pro:7.71.23
ログを確認します。
docker logs -f artifactory-postgresql
System Importの実行
以下へアクセスします。
http://<サーバー名>:18082/ui/
Web UIから以下を開きます。
Administration
> Artifactory
> Import & Export
> System
下図のようにコンテナ内でExportしたファイルを配置したパスとオプションを指定します。

下図のように出力される場合は、zipファイルを展開してフォルダを指定するようです。
ARTIFACTORY: How to overcome the “Invalid Import Directory” error

SystemとAll repositoriesをImportした時の画面イメージは下図のようになります。

動作確認
以下を確認します。
- リポジトリ
- アーティファクト
- ユーザーとグループ
- その他の設定など
Liveness APIを確認します。
curl -fsS \
http://localhost:18082/artifactory/api/v1/system/liveness
PostgreSQLのテーブルを確認します。
docker exec artifactory-db \
psql -U artifactory -d artifactory -c '\dt'
問題がなければ、移行先コンテナを本番ポートで再作成します。

