0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

パンデミックなのでnginx+WebDAVでグループ用Mavenリポジトリを作ってみた

Last updated at Posted at 2021-04-17

パンデミックなのでnginx+WebDAVでグループ用Mavenリポジトリを作ってみた

なかなか先が見えないコロナ禍の中、いかがお過ごしでしょうか?
チームで開発するにもリモートワークが主体となった昨今ですが、Mavenのリポジトリをnginx+WebDAVで作ってみました。

nginxでWebDAVが使用可能かの確認

すでにインストールしているnginxにWebDAVを設定する作業からはじめましたので、WebDAVが使用可能かの確認コマンドを打ちました。

$ nginx -V
nginx version: nginx/1.14.2
built with OpenSSL 1.1.1d  10 Sep 2019
TLS SNI support enabled
configure arguments:
...(中略)
-with-http_dav_module
dav-ext
...(中略)

--with-http_dav_module がはいっていればOKです。
WindowsのExplorerからのアクセスの場合、WebDAV拡張機能が必要となりますが、今回は範囲外です。

nginxにWebDAVの設定

ではnginxでWebDAVへのアクセスを可能にしていきます。
グループでのアクセスが目的ですので、基本認証でアクセス可能なメンバーを制限します。

htpasswdコマンドで.htpasswdファイルを作成します。
htpasswdコマンドをインストールします。すでにインストールされている場合は以下のコマンドは必要ありません。

$ apt install apache2-utils

インストール出来たら.htpasswdファイルを作ります。

$ htpasswd -c /etc/nginx/.htpasswd mavenユーザ名
New password: 
Re-type new password: 
Adding password for user mavenユーザ名

続いてnginxの設定ファイルを編集します。
以下のような設定をnginxの設定ファイルに書き込んでください。
仮想ホストを使っている場合は /etc/nginx/sites-available 内のファイルではないかと思います。

server {
  # httpsを使用します。
  listen 443 ssl;
  (中略)...
  server_name ホスト名;
  (中略)...

  location /maven/ {

    # WebDAVディレクトリ /var/www/maven https://ホスト名/maven/ でアクセスします。
    root /var/www;

    # デプロイ時の一時ディレクトリ
    client_body_temp_path /tmp/maven;
    # フルパスで作成
    create_full_put_path on;

    # ブラウザではファイル一覧を表示
    autoindex on;
    autoindex_exact_size off;
    autoindex_localtime on;

    # ここはユーザのアクセス権だけ設定します。
    dav_access user:rw;
    dav_methods PUT DELETE MKCOL COPY MOVE;

    # 先程作成した.htpasswdファイルによる基本認証でプロテクト
    auth_basic "Maven Repository";
    auth_basic_user_file "/etc/nginx/.htpasswd";
  }
}

続いてディレクトリを作成し、nginxのユーザ(www-data)の所有にします。

$ mkdir /tmp/maven
$ mkdir /var/www/maven
$ chown www-data. /tmp/maven
$ chown www-data. /var/www/maven

nginxを再起動します。

$ systemctl restart nginx

これでWebDAVがアクセスできるはずです。

https://ホスト名/maven

をWebブラウザでアクセスし、空っぽのディレクトリが表示されましたでしょうか?

jarファイルをアップロード

続いてjarファイルをWebDAVにアップロードします。

まずはWebDAVに設定したユーザ名とパスワードをmavenの設定ファイルに記述します。
macOSの場合は ~/.m2/settings.xml ファイル、
Windowsの場合は C:\Users\Windowsユーザ名\.m2\settings.xml ファイルに記述します。

settings.xml
<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
  ...(中略)
  <servers>
    <server>
      <id>リポジトリID</id>
      <username>mavenユーザ名</username>
      <password>htpasswdで入力したパスワード</password>
    </server>
  </servers>
  ...(中略)
</settings>

アップロードするjarファイルのpom.xmlにいくつかの設定を追加します。

pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>グループID</groupId>
  <artifactId>アーティファクトID</artifactId>
  <packaging>jar</packaging>
  <version>jarのバージョン</version>
  ...(中略)
  <repositories>
    <!-- リポジトリの定義 -->
    <repository>
      <id>リポジトリID</id>
      <name>Maven Repository</name>
      <url>https://ホスト名/maven/repo</url>
    </repository>
  </repositories>
  ...(中略)
  <build>
    ...(中略)
    <extensions>
      <!-- WebDAVをpom.xmlで使用するための定義 -->
      <extension>
        <groupId>org.apache.maven.wagon</groupId>
        <artifactId>wagon-webdav-jackrabbit</artifactId>
        <version>3.0.0</version>
      </extension>
    </extensions>
  </build>
</project>

続いて以下のコマンドを打ちます。

$ mvn deploy:deploy-file -DgroupId=グループID \
  -DartifactId=アーティファクトID \
  -Dversion=jarのバージョン \
  -Dpackaging=jar \
  -Dfile=jarファイルへのパス \
  -DrepositoryId=リポジトリID \
  -Durl=https://ホスト名/maven/repo

URLは最後に/repoをつけてください。
jarファイルへのパスは実行するディレクトリからの相対パスで大丈夫です。
グループID、アーティファクトID、jarのバージョンはこのjarファイルを作成したpom.xmlの記述に従ってください。
リポジトリIDはsettings.xmlと後ほど説明しますpom.xmlで参照されるものです。

pom.xmlに依存関係を追加

pom.xmlに依存関係を追加します。

pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  ...(中略)
  <repositories>
    <!-- リポジトリの定義 -->
    <repository>
      <id>リポジトリID</id>
      <name>Maven Repository</name>
      <url>https://ホスト名/maven/repo</url>
    </repository>
  </repositories>
  ...(中略)
  <dependencies>
    <!-- 依存関係の定義 -->
    <dependency>
      <groupId>グループID</groupId>
      <artifactId>アーティファクトID</artifactId>
      <version>jarのバージョン</version>
    </dependency>
  </dependencies>
  ...(中略)
</project>

これでnginx+WebDAVに構築したグループ用mavenリポジトリからjarファイルをダウンロードして、ビルドができるようになります。

パンデミックで大変なご時世ではありますが、皆様ご自愛くださいませ。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?