uVersion
日本語
ダウンロード →

Wiki

Docker でデプロイ

uVersion サーバーと PostgreSQL をコンテナで、ターンキー導入:イメージをダウンロードして読み込み、.env を設定し、起動する。データとデータベースの配置は設定可能。

.deb パッケージの代替手段です:uVersion サーバーとその PostgreSQL データベースをコンテナとして実行し、単一の docker compose up で起動します。 コンテナ化されたデプロイを好む場合や、すばやく試したい場合に最適です。

前提条件:Compose v2 プラグイン付きの Docker Engine 20.10 以上 (docker compose version)と、uVersion のライセンスキー。サーバーは有効で署名 されたキーがなければ起動を拒否します:アカウントから取得 してください(または登録ページから入手できます)。

Podman でも動作します このページのすべてのコマンドで dockerpodman に置き換えて ください:podman compose pullpodman load -ipodman compose up -d。提供される docker-compose.yml は、マウント に対してすでに SELinux(Red Hat、Rocky、Alma、Fedora でデフォルトで有効なアクセス制御) 向けのラベルを :z サフィックスで付けています。このラベルがないと、コンテナは マウントされたディレクトリへのアクセスを拒否され、そのメッセージは権限の問題というより データベースの破損のように見えます。

インストール

1. compose ファイルと環境テンプレートを取得する

2 つのファイルを、スタックのディレクトリになる新しいフォルダーに置きます: docker-compose.yml とテンプレート .env です。

mkdir uversion && cd uversion
wget -N -O docker-compose.yml https://uversion.io/downloads/server/docker/docker-compose.yml
wget -N -O .env https://uversion.io/downloads/server/docker/env.example

2. イメージを取得する

オンラインならレジストリで十分です:

docker compose pull

インターネットにアクセスできない場合(隔離ネットワーク)は、代わりにアーカイブを ダウンロードして読み込みます:それは compose と同じイメージ名を持つため、 起動時に何もダウンロードせずに見つかります。

wget -N https://uversion.io/downloads/server/docker/uversion-server_latest_docker.tar.gz
docker load -i uversion-server_latest_docker.tar.gz

3. .env を記入する

2 つの値が必須です:UVERSION_LICENCE__KEY(あなたのライセンスキー、メールで 届いた長い署名済みの文字列)と POSTGRES_PASSWORD(同梱データベース用の強力な パスワード)。

nano .env

セッションに署名する秘密鍵は初回起動時に生成され、データディレクトリに 保存されます。入力するものは何もありません。それはバックアップの一部です:消失した場合、 全員が一度だけ再ログインすることになりますが、何も失われません。自分で設定したい場合 (最低 32 文字)は、.envUVERSION_SECURITY__JWT_SECRET を記入 してください:それは確かにコンテナに渡され、コンテナは生成する代わりにそれを使用します。

このパスワードは一度で決めてください POSTGRES_PASSWORD は、データベースの作成時、そのディレクトリが空のときにのみ 適用されます。後で .env で変更しても PostgreSQL 側は何も変わらず、古いものを 保持し続けます。一方でサーバーは新しいものを提示します:接続は壊れますが、メッセージは その理由を説明しません。本当に変更するには、両側で変更してください:
# Changer reellement le mot de passe de la base
docker compose exec db psql -U uversion -c "ALTER USER uversion PASSWORD 'nouveau-mot-de-passe'"

# Puis reporter la MEME valeur dans POSTGRES_PASSWORD (.env) et relancer
docker compose up -d
.env をデータと一緒にバックアップしてください それにはライセンスキーとデータベースのパスワードが含まれ、ボリューム内ではなく docker-compose.yml の隣にあります。データディスクを保持したままマシンを失うと、 誰もアドレスできないデータベースと、再申請が必要なライセンスが残ります:登録時に受け取った アクティベーションコードは 1 回限りで、すでに消費済みです。再利用できるのはそれが 生成したライセンスキーだけで、ここにあるのがそれです。このファイルは秘密として 扱ってください:chmod 600、そしてデータベースやチャンク(ファイルの断片、容量を 占めるもの)と同じバックアップに含めてください。

4. スタックを起動する

docker compose up -d

これでサーバーは https://YOUR-HOST:8443 でアクセスできます。ドメインも Let’s Encrypt 証明書も必要ありません:TOFU モデルがそれを処理します。つまり最初の接触での 信頼で、SSH が初回にマシンのフィンガープリントの確認を求めるのと同じです。

5. サーバーのフィンガープリントを確認する

それは起動のたびにログに書き直されます:

# L'empreinte du serveur, reecrite dans les journaux a chaque demarrage
docker compose logs server | grep -i "TLS fingerprint"

これがサーバーのフィンガープリント(証明書の SHA-256)です:サーバーは ポート 8443 で自己署名 HTTPS を提供し、各クライアントは最初の接続時にそれを確認します。 チームと共有してください(TLS フィンガー プリントを参照)。ダウンロードしたファイルの検証に使うチェックサムと混同しないで ください:こちらはあなたのサーバーを識別します。

6. 初期管理者パスワードを確認する

このパスワードで admin としてログインし、変更してください。変更するとすぐに ファイルは削除されます。

# Le mot de passe admin initial (le fichier disparait des que vous le changez)
docker compose exec server cat /data/initial-admin-password

起動をリアルタイムで追うには docker compose logs -f server が使えますが、 一連のコマンドの途中に置かないでください:-f はログを無期限に追い続け、決して 制御を返しません(終了するには Ctrl + C)。

データとデータベース

サーバーのすべての状態(チャンクストア、TLS 証明書したがってフィンガープリント、 サーバーのアイデンティティ)は 1 つのホストディレクトリに、PostgreSQL データベースは別の ディレクトリに存在します。どちらも .env で設定します:

# Dans .env : placer les donnees et la base sur un disque large et sauvegarde
UVERSION_DATA_DIR=/srv/uversion/data      # chunks, cert TLS, identite serveur
UVERSION_DB_DIR=/srv/uversion/db          # PostgreSQL fourni

本番デプロイでは、UVERSION_DATA_DIR を大容量でバックアップされたディスクに 向けてください:Unreal プロジェクトのバイナリチャンクは大きくなり得ます。コンテナはマウント されたディレクトリの権限を自動で調整します(所有権を修正する間だけ root で起動し、その後は 非特権ユーザーに降格します)ので、事前に chown する必要はありません。

SELinux が有効だと初回起動が長くなります その場合、エンジンはマウントされたディレクトリを再帰的に、一度だけ再ラベル付けします。 新規デプロイでは一瞬ですが、すでに大きなリポジトリでは数分かかると見込んでください。以降の 起動でこのコストを再び払うことはありません。

すでにある外部の PostgreSQL を使うには、.envUVERSION_DATABASE__URL を記入し、docker-compose.ymldb サービスと depends_on ブロックを削除してください。

# Dans .env : brancher un PostgreSQL existant
UVERSION_DATABASE__URL=postgres://user:motdepasse@db.interne:5432/uversion

データとデータベースの移動

最も簡単なのは、最初の up の前に両方の変数を設定することです: まだ何も存在せず、コピーするものはありません。スタックがすでに動いている場合は、停止して、 所有権を保持しながらディレクトリを手動でコピーする必要があります。

1. スタックを停止する

コピー中は何も書き込んではいけません:

docker compose down

2. 2 つのディレクトリをコピーする

所有権と権限を保持するのは -a です:

sudo rsync -a ./data/server/ /srv/uversion/data/
sudo rsync -a ./data/db/     /srv/uversion/db/

3. .env を新しい場所に向ける

# Dans .env, LES DEUX lignes, pas une seule
UVERSION_DATA_DIR=/srv/uversion/data
UVERSION_DB_DIR=/srv/uversion/db

4. 再起動する

docker compose up -d
両方を移動する、さもなければどちらも移動しない データベースにあなたのファイルは含まれていません:フィンガープリントによってチャンク (ファイルの断片)を指し示すメタデータが含まれています。データベースなしでデータを移動する、 あるいはその逆は、見つからないチャンクを参照するデータベースを残します。そして空の ディレクトリを指す UVERSION_DB_DIR は、まっさらなデータベースになります: PostgreSQL は動じずにそれを初期化し、満杯のチャンクストアがメタデータのまったくない データベースと結びつくことになります。

パスに関する 3 つの落とし穴、いずれも実際に遭遇したものです:

  • 相対パスは compose ファイルを基準に解決されます。コマンドを実行する ディレクトリを基準にではありません。./data/server は常に docker-compose.yml の隣を指します。
  • ネットワーク共有(NFS、CIFS、Windows 共有)は、コンテナが起動時に行う chown を一般に拒否します。するとコンテナは即座に終了し、uVersion も ストレージも言及しない権限エラーを出します。ローカルディスクかブロックボリュームを 使ってください。
  • rsync -a こそが所有権と権限を保持します。オプションなしの cp や、ファイルエクスプローラーからのコピーは、すべてを現在のアカウントに リセットしてしまい、すると PostgreSQL は自分のディレクトリで起動を拒否します。

運用

バックアップ:データベース

それはメタデータを保持します:ファイル、リビジョン、ユーザー、ロック。

docker compose exec db pg_dump -U uversion uversion > uversion-db.sql

バックアップ:サーバーのデータ

これは UVERSION_DATA_DIR が指すホストディレクトリです。両方のバックアップが 重要です:片方だけでは何も復元できません。

# .env n'est pas charge dans votre shell, chargez-le pour reutiliser la variable
set -a; . ./.env; set +a
DATA_DIR="$UVERSION_DATA_DIR"
[ -n "$DATA_DIR" ] || DATA_DIR=./data/server      # valeur par defaut

tar czf uversion-data.tar.gz -C "$DATA_DIR" .

更新する

データとデータベースは触られず、マイグレーションは起動時に適用されます。

docker compose pull
docker compose up -d   # les migrations s'appliquent au demarrage

隔離ネットワークでは、代わりにより新しいアーカイブを読み込んでください:

wget -N https://uversion.io/downloads/server/docker/uversion-server_latest_docker.tar.gz
docker load -i uversion-server_latest_docker.tar.gz
docker compose up -d

停止する

docker compose stop はコンテナを停止し、docker compose down は それらを削除します。どちらの場合もあなたのデータはそのまま残ります。

down -v はここでは何も消しません 公開されている compose は名前付きボリュームを一切使いません:あなたのデータとデータベースは .env が指す 2 つのホストディレクトリにあります。downdown -v もそれらに触れません。本当にゼロからやり直すには、これらのディレクトリを 自分で削除する必要があります。これは知っておくことが重要です:認証に失敗した後の反射的な 行動は down -v のあとに up を実行することですが、それは同じ データベースと同じパスワードで、まったく同じエラーにループして戻ります。