kopiaのサーバを調べてみた

投稿者: | 2月 20, 2025

kopiaを真剣に使うは単体で使う話だが、サーバの話。

GithubのIssueを見ていると色々議論をされている。特にGUIの表示に成功した人はいますか?みたいな話が。(ならばGUI版を使えば。。。)いずれにせよ、謎が多いというか、けんけんがくがくしているなかで、中の人がしれっと正解を言っているんだが、無視されていることも。誰も信用してくれないというか、無視されることって結構多い。

例えば、

  • 実は、その手の製品、機能を米国本社の開発元のに在籍していて昔からやっていましたよ。無視
  • その人、知り合いですよ。無視
  • そのお客さん、自分の親戚ですよ。無視

ほんと無視される。。。

多分、人間を金銭的、ビジネス的なものでしか価値として認めていない。そういう知り合いを紹介しても、どんなに有名な人でもしぶーいお茶しか出てこない。ほんとそう。

向こうもそれを知っていて、お前の友人、知り合いなんて連れくんなぁとも。

 

閑話休題

 

kopiaは、コンテナのPVCのバックアップでは、もはやデファクト状態で、ストレージベンダーも連携ソフトウェアとして使い始めた。kopiaを調べまくった。これは、その調べた文章(ここまで調べた文章は今のところ、英語でも日本語でも存在しないんじゃないと自画自賛。)の抜粋。

 

まず、kopiaの基本的な動きの図。

kopiaが、スナップショット取得元データのスナップショットを撮って、オブジェクトストレージに保存をする。というのが基本的な動き。

ただし、この状態だとコマンドラインでしか使えない。しかし、必要な時だけスナップショットストレージをマウントするというかなりセキュアな使い方ができる。

デメリットとしては、スナップショットのスケジュールはできないので、誰かにスケジューリングしてもらう必要がある。(Systemctl経由、cronaあるいは日本人が大好きな外部スケジューラーとか)

 

もし、GUIを使いたい、スケジューラーを使いたい場合はサーバを立てる必要がある。

GUIのアカウントのユーザ名は、実はkopia固定。上書き設定すれば変えられるが。(ここがハマりポイントその1)、さらにコマンドラインにパスワードをいれないようにするには、ヘルプには出てこないが、htpasswdでパスワードファイルに落とす必要がある。(あるいは環境変数で呼ぶか。)

psコマンドでパスワードを晒さないようにするには何気に基本的な知識がいる。

 

サーバを立てると、repositporyサーバにも実はなる。

kopiaサーバにクライアントのアカウントを登録する必要がある。(ユーザ名@ホスト名)

ただし、クライアントからは、単にrepositoryをマウントしているだけなので、スケジュール機能はクライアントにはない。

ただ、kopiaサーバのローカルスナップショットは、スケジュールが使える。

さらに、この構成の場合、各クライアントに同じデータがあった場合、クライアントホスト間の重複排除が使える。

kopiaサーバのGUIを除くと、各クライアントのスナップショットが覗ける。

 

もし、クライアントでもGUI、スケジュールを使いたい場合は、結果として、以下の構成になる。

といっても、kopiaはシングルバイナリなので、起動方法をどうするか?ということになる。

 

実際にどう構築するか?

ざっくり書くと以下になる。ただし、今回に限り、あくまでも抜粋なので、これをコピペしても動かないので注意。(細かい事前準備が実は必要)

 

サーバ側

オブジェクトストレージをrepositoryとしてマウント(s3互換ストレージの例)

kopia repository create s3 \
      --endpoint=${OBJECTSTORAGEEP} \
      --bucket=${BUCKET} \
      --prefix=${PREFIX}/ \
      --access-key=${AWS_ACCESS_KEY_ID} \
      --secret-access-key=${AWS_SECRET_ACCESS_KEY} \
      --password=${KOPIA_PASSWORD} \
        --disable-tls-verification

クライアントのアカウント追加

kopia server users add ユーザ名@ホスト名 --user-password=kopiaサーバへの接続アカウントのパスワード

kopiaサーバ起動

kopia server start --tls-cert-file /opt/kopia/certs/my.cert --tls-key-file /opt/kopia/certs/my.key --address=0.0.0.0:51515 --log-dir=/var/log/kopia --server-username=kopia --htpasswd-file /opt/kopia/kopiapass

 

クライアント側

kopiaサーバをrepositoryとしてマウントrepositoryマウント

kopia repository connect server --url https://<kopiaサーバ>:51515  --server-cert-fingerprint <kopiaサーバのfinger print>

kopiaサーバ起動(サーバ側と起動方法は同じ)

kopia server start --tls-cert-file /opt/kopia/certs/my.cert --tls-key-file /opt/kopia/certs/my.key --address=0.0.0.0:51515 --log-dir=/var/log/kopia --server-username=kopia --htpasswd-file /opt/kopia/kopiapass

kopiaサーバへの接続アカウントのパスワードを入力する。

 

もちろん言うまでもないが、サーバの起動に関しては、systemd経由などにしておかないと使い物にならない。systemd経由で設定すると、ちゃんとrepositoryも自動的にマウントされる。

 

GUIへのアクセスは、サーバ、クライアントそれぞれ、

URL https://<kopiaサーバあるいはクライアント>:51525

ユーザ名:kopia

パスワード:/opt/kopia/kopiapassに記載したパスワード

で開けるはず。

 

kopiaのセットアップスクリプト

結果として、以下のスクリプトで入れれば簡単。どのようなケースでもこの設定だけ。

https://gist.githubusercontent.com/masezou/90aa524a3368e37b02a058dcee4add8a/raw/5e2d90221e663ad35347ebd2db8783ad4e49b66c/kopia-setup.sh

https://<ホスト名> :51515 でアクセスできる。

GUI版と全く同じようにセットアップして使える。GUI版との違いは、ログインをしていなくてもスケジュールが動く。

 

kopiaを知ってからの謎がようやく解けた。

日本語環境がUTF-8だけで、ファイルをオブジェクトストレージやNASに保存するならば、もう商用のファイルバックアップソフトは実は要らないんじゃないかなぁと思う。データ保護に必要な設定情報が、データそのものとセットになって保存されているのは便利。テープを起源にしたソフトウェアとかではバックアップデータとスケジュールを含めた設定が別管理なので、とてもたどりつかない発想だと思う。そういう製品には、バックアップサーバのバックアップとかアップグレードから逃げられない。

コメントを残す