Wiki
Docker でデプロイ
uVersion サーバーと PostgreSQL をコンテナで、ターンキー導入:イメージをダウンロードして読み込み、.env を設定し、起動する。データとデータベースの配置は設定可能。
.deb パッケージの代替手段です:uVersion サーバーとその PostgreSQL
データベースをコンテナとして実行し、単一の docker compose up で起動します。
コンテナ化されたデプロイを好む場合や、すばやく試したい場合に最適です。
前提条件:Compose v2 プラグイン付きの Docker Engine 20.10 以上
(docker compose version)と、uVersion のライセンスキー。サーバーは有効で署名
されたキーがなければ起動を拒否します:アカウントから取得
してください(または登録ページから入手できます)。
docker を podman に置き換えて
ください:podman compose pull、podman load -i、
podman 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 文字)は、.env に UVERSION_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 する必要はありません。
すでにある外部の PostgreSQL を使うには、.env に
UVERSION_DATABASE__URL を記入し、docker-compose.yml の
db サービスと 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 つのホストディレクトリにあります。down も
down -v もそれらに触れません。本当にゼロからやり直すには、これらのディレクトリを
自分で削除する必要があります。これは知っておくことが重要です:認証に失敗した後の反射的な
行動は down -v のあとに up を実行することですが、それは同じ
データベースと同じパスワードで、まったく同じエラーにループして戻ります。