uVersion
日本語
ダウンロード →

Wiki

サーバーの設定と移行

config.toml を編集する、データディレクトリを移動する、別の場所にある PostgreSQL データベースを使う、バックアップとリストアを行う。

すべては 1 つのファイル、/etc/uversion/config.toml で設定します。インストーラーがこれを生成し、その後は自由に編集できます。

設定ファイル

編集したら再起動してください:サーバーは起動時にのみ設定を読み込みます。

sudo nano /etc/uversion/config.toml
sudo systemctl restart uversion-server

編集することになるフィールドは次のとおりです。これは一部の抜粋です:ファイルには他のセクションも含まれており、必須フィールドの一部は以下に現れません。このブロックでファイルを上書きせず、該当する行だけを編集してください。

# EXTRAIT PARTIEL : le fichier contient d'autres sections.
# N'ecrasez jamais votre fichier avec ce bloc, editez les lignes concernees.

[server]
bind_address = "0.0.0.0"
port = 8080

[database]
# Ou toute base PostgreSQL accessible : autre disque, autre machine, service manage.
url = "postgres://uversion:MOTDEPASSE@127.0.0.1:5432/uversion"

[security]
# Le secret qui signe les sessions. Obligatoire et SANS valeur par defaut :
# absent ou plus court que 32 caracteres, le serveur refuse de demarrer.
# L'installateur en genere un. Le remplacer deconnecte tout le monde une fois.
jwt_secret = "..."

[storage]
# Le contenu des fichiers (les chunks, morceaux de fichiers). C'est ce qui grossit.
path = "/var/lib/uversion/data/chunks"

[tls]
disabled = false
https_port = 8443

[licence]
key = "..."
ファイルのアクセス権 このファイルにはライセンスキー、セッションに署名するシークレット、データベースのパスワードが含まれます。0640 root:uversion になっています:そのまま維持してください。

データの保存場所

3 つの別々の場所があり、これが最も驚かれる点です。3 番目の設定は、バックアップで忘れられがちな場所でもあります:

何をどこに
ファイルの内容(チャンク、ファイルの断片:容量を占めるのはこれです)/var/lib/uversion/data/chunks
TLS 証明書、サーバーのフィンガープリント/var/lib/uversion/data/tls
サーバー ID、ライセンスのアンカー/var/lib/uversion/server-idlast-validated-at
メタデータ(ファイル、リビジョン、ユーザー、ロック、権限、タスク)PostgreSQL/var/lib/postgresql/16/main
設定:ライセンスキー、セッション署名シークレット、データベースのパスワード/etc/uversion/config.toml/etc/uversion/licence-key
データベースはデータディレクトリに従いません データディレクトリを変更すると、チャンクと証明書は移動しますが、データベースは移動しません。そしてデータベースはチャンクをフィンガープリントで参照します:一方だけを移動すると、サーバーは見つからないチャンクを探すことになります。両方移動するか、どちらも移動しないでください。

データディレクトリを移動する

これはよくあるケースです:内容が大きくなり、システムパーティションが小さい。データベース自体は小さいままです(ファイルのサイズではなく、リビジョンの数に応じて大きくなります)。

1. サービスを停止する

sudo systemctl stop uversion-server

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

アクセス権と所有者を保持するのは -a です。移動ではなくコピーすることで、最終確認まで元に戻せる余地が残ります。

sudo mkdir -p /srv/uversion
sudo rsync -a /var/lib/uversion/ /srv/uversion/
sudo chown -R uversion:uversion /srv/uversion
sudo chmod 0750 /srv/uversion

3. 設定を新しいパスに向ける

この手順は必須で、次の手順の前に行います:下記の「順序が重要」の囲みを参照してください。

sudo sed -i 's#/var/lib/uversion#/srv/uversion#g' /etc/uversion/config.toml

4. 新しいパスをインストーラーに伝える

「Data directory」の質問には新しいパスを答えてください。インストーラーはこの回答をもとに systemd ユニットを書き換え、その後サービスを再起動します。

sudo dpkg-reconfigure uversion-server
#   Data directory : /srv/uversion

5. ユニットが実際にそこを指しているか確認する

systemctl cat uversion-server | grep -E 'WorkingDirectory|ReadWritePaths'
systemctl status uversion-server
dpkg-reconfigure を使い、systemd ユニットを自分で書かないでください インストーラーは /etc/systemd/system/uversion-server.service.d/10-data-dir.conf を自ら書き込み、あなたが与えた回答をもとに設定のたびに書き直します。手で置いたファイルは次の更新まで残ります(Update now ボタンで起動されるものを含む):そのときユニットは古いフォルダーを指し直し、一方で設定は新しいフォルダーに書き込みます。強化されたサービス(ProtectSystem=strict)は正常に起動し、数週間後、最初のファイル送信で壊れます。
順序が重要:先に config.toml を編集する dpkg-reconfigure だけでは不十分です。インストーラーが [storage].path を修正するのは、そこで見つけたフォルダーがもう存在しない場合のみです:まだ存在するカスタムパスは意図的な選択とみなされ、そのまま残されます。移動ではなくコピーしたため、古いフォルダーはまだ存在しており、したがって上記の手順 2 は必須です。すべてを確認し、サーバーが新しいパスで稼働したら、古いフォルダーを削除できます。
/home や /root の下には決して置かない サービスは強化されたシステムユーザーで動作します(ProtectHome=true、そして個人ディレクトリはシステムアカウントからは辿れません)。/home/root の下のパスは起動を妨げます(226/NAMESPACE または 200/CHDIR)。システムパスを選んでください:/srv/opt、またはマウントしたディスク。

データベースを別の場所に置く

インストーラーはローカルのデータベースを作成しますが、それに縛られる必要はありません。url を、到達可能な任意の PostgreSQL データベースに向けてください:別のクラスターとしてマウントした別のディスク、別のマシン、またはマネージドサービス。

[database]
url = "postgres://UTILISATEUR:MOTDEPASSE@HOTE:5432/BASE"

その後、再起動してください。サーバーは起動時にマイグレーションを適用します:データベースの構造を自動的に更新します。空のデータベースは初期化され、より古いデータベースはアップグレードされ、手作業で実行するものは何もありません。

指定したロールが対象データベースにテーブルを作成できることだけが必要です。

データディスク上のデータベース

前のセクションは、別の場所で管理するデータベースを前提としています。目的が異なる場合:マシンが壊れたときに生き残った 1 台のディスクだけでサーバーを立て直せるようにしたいなら、インストーラーはデータベースをデータディレクトリ内に、専用の PostgreSQL クラスターの形で配置できます:独自のフォルダーと独自のポートを持ち、システムのものとは独立した、別個の PostgreSQL インスタンスです。

この質問はインストール時に尋ねられます。すでに稼働している Debian サーバーで有効にするには:

sudo dpkg-reconfigure uversion-server
#   Data directory                     : /srv/uversion
#   Put the database on the data directory too?  Yes

Windows の場合

約束は同じですが、仕組みは異なります。Windows には名前付きクラスターがありません:インストーラーは PostgreSQL インスタンス自体をデータディレクトリへ移動し、サービスを向け直します。この選択はインストール時に、スクリプトのパラメーターに -DbOnDataDir を追加して行います。質問では提示されません:スクリプトは有効化コードしか尋ねないため、このパラメーターを渡さなければ、データベースは既定の場所に留まります。コマンドの正確な形式については Windows へのインストール を参照してください。ワンライナーはいかなるパラメーターも受け取れないことに注意してください。

# PowerShell en administrateur, installation en ligne de commande
& ([scriptblock]::Create((iwr https://uversion.io/downloads/server/install.ps1 -UseBasicParsing).Content)) `
    -LicenceKey "UV-XXXX-XXXX-XXXX" -DataDir "D:\uVersion" -DbOnDataDir

# verifier ensuite ou pointe le service PostgreSQL
(Get-CimInstance Win32_Service -Filter "Name='postgresql-x64-16'").PathName

インスタンスが uVersion のもの以外のデータベースをホストしている場合、またはそのディレクトリが自己完結していない場合、移動は理由を表示して拒否されます:テーブルスペースの存在、ジャンクションで移動された pg_wal、あるいは postgresql.conf に書かれた絶対パス。何も削除されることはありません:インストーラーはコピーし、検証し、新しいコピーでサービスを起動し、その後にはじめて古いディレクトリの名前を変更します。

Linux との 2 つの違い Windows はサービスをディスクの後まで待たせることができません:RequiresMountsFor に相当するものは存在しません。遅れて現れた外付けディスクは、依存関係ではなく、サービスの回復アクションによって拾われます。そして PostgreSQL は Windows ではディレクトリの権限を一切チェックしません:それを制限するのはインストーラーであり、サーバー側にセーフティネットはありません。

そのとき、ディスクにはすべてが収まります:

/srv/uversion/
├── data/chunks       contenu des fichiers
├── data/tls          certificat, empreinte
├── pgdata/16         LA BASE (cluster PostgreSQL dedie)
└── recovery/         procedure + fichiers necessaires a la reprise
    ├── RESTORE.md
    ├── pgconf/       postgresql.conf, pg_hba.conf, pg_ident.conf
    ├── etc/          copie de config.toml et du mot de passe
    └── cluster.env

クラスターには独自のポートが自動的に割り当てられ(空いていれば 5433)、config.toml はそれを指すように更新されます。システムのクラスターは触れられません:他のデータベースをホストし続けることができます。

「はい」と言う前に知っておくべき 2 つの代償 PostgreSQL のデータディレクトリは、それを作成したメジャーバージョンでしか開けません:3 年後の復旧では PostgreSQL 16 を明示的にインストールする必要があるかもしれません。そしてディスクは今やライセンスキー、セッションに署名するシークレット、データベースのパスワードを、root だけがアクセスできるディレクトリに保持します:このディスクは認証情報として扱ってください。
すでにデータが入ったデータベース:インストーラーは移動を拒否します サーバーがすでにデータを持って稼働している場合、オプションを有効にしても何も移動しません:パッケージ更新の途中で中断された引っ越しは、引っ越しをしないよりも悪い結果になります。インストーラーは現状のまま残し、手動手順を表示します(停止、pg_dump、クラスターの作成、リストア、url の更新)。

新しいマシンでサーバーを立て直す

ディスクにはソフトウェアは含まれません:PostgreSQL と uVersion パッケージを用意してください。両方のコピーをディスクのそばに保管しておくと、いざというときの嫌な驚きを避けられます。

# sur la machine neuve
sudo apt install postgresql-16
# montez le disque, par exemple sur /srv/uversion
sudo apt install ./uversion-server_*.deb
#   dossier de donnees : le point de montage du disque
#   base sur le dossier de donnees : oui

インストーラーはディスク上のデータベースを見つけ、PostgreSQL の設定ファイルを元の場所に戻し(pg_createcluster がそれらをディレクトリの外、システムディスク上へ移動していました)、クラスターを登録し、所有者を修正し、その後 config.toml 内のポートとチャンクのパスを調整します。ディスクが以前とは別のマウントポイントで戻ってきた場合は、新しいパスを答えるだけです。

再インストールなしのバリアントを含む完全な手順は、ディスク自体に書かれています:recovery/RESTORE.md

バックアップとリストア

完全なバックアップは3 つの要素です:データベースのエクスポート(dump)、データディレクトリ、そして設定ディレクトリ。

データベースをバックアップする

メタデータ:ファイル、リビジョン、ユーザー、ロック。

sudo -u postgres pg_dump uversion > uversion-$(date +%F).sql

データディレクトリをバックアップする

ファイルの内容、つまり容量を占めるものです。

sudo tar -C /var/lib/uversion -czf uversion-data-$(date +%F).tar.gz .

設定をバックアップする

ライセンスキー、セッション署名シークレット、データベースのパスワード。これはデータディレクトリの中にはありません。

sudo tar -C /etc -czf uversion-etc-$(date +%F).tar.gz uversion
/etc/uversion を忘れずに これは 3 番目の要素で、最も忘れやすいものです:データディレクトリの中にはありません。/etc/uversion/config.toml はライセンスキー、セッションに署名するシークレット、データベースのパスワードを保持します;/etc/uversion/licence-key はライセンスそのものを保持します。これらがないと、新しいマシンでのリストアは新しいシークレットで再スタートするため、チーム全員が一度にログアウトされ、ライセンスを再申請する必要があります:登録時に受け取る有効化コードは 1 回限りで、すでに消費されています。再利用できるのは、それが生成したライセンスキーだけです。

新しいマシンでリストアするには:パッケージをインストールし、その後 3 つの要素をこの順序で戻してください。

1. データベースをリストアする

sudo -u postgres createdb -O uversion uversion      # seulement si elle n'existe pas
sudo -u postgres psql uversion < sauvegarde.sql

2. データをリストアする

チャンクを正しいアクセス権で戻します:

sudo rsync -a /mnt/backup/uversion/ /var/lib/uversion/
sudo chown -R uversion:uversion /var/lib/uversion
sudo chmod 0750 /var/lib/uversion

3. 設定の 2 行を書き写す

ファイル全体ではありません:インストーラーが書いたばかりのファイルには、それ自身が再定義したデータベースのパスワードが入っています。

# N'ECRASEZ PAS le fichier neuf : ouvrez l'ancien a cote et recopiez-en
# deux lignes, et deux seulement.
#   [security] jwt_secret  -> sinon toute l'equipe est deconnectee
#   [licence]  key         -> sinon il faut redemander une licence
# Gardez le [database] url que l'installateur vient d'ecrire : il porte le
# mot de passe qu'il a lui-meme redefini.
sudo nano /etc/uversion/config.toml

4. 再起動する

sudo systemctl restart uversion-server
既存のデータベースの上にインストールする インストーラーは何も破壊しません:uversion データベースがすでに見つかれば、それをそのまま再利用し、ロールのパスワードをリセットするだけです。したがって、先に dump をリストアし、後からインストールすることができます。

PostgreSQL クラスターを移動する

めったに必要ありません:データベースは小さいからです。どうしてもという場合、これは標準的な PostgreSQL の操作であり、uVersion インストーラーが扱うものではありません。このクラスター(システムの PostgreSQL インスタンス、そのフォルダーとポートを持つ)は、uVersion のもの以外のデータベースをホストしている可能性があることに注意してください。

sudo systemctl stop uversion-server
sudo pg_ctlcluster 16 main stop

sudo mkdir -p /srv/pgdata
sudo rsync -a /var/lib/postgresql/16/main/ /srv/pgdata/16/main/
sudo chown -R postgres:postgres /srv/pgdata

sudo sed -i "s#^data_directory =.*#data_directory = '/srv/pgdata/16/main'#" \
  /etc/postgresql/16/main/postgresql.conf

sudo pg_ctlcluster 16 main start
sudo systemctl start uversion-server

その後 pg_lsclusters で、クラスターが新しいパスでオンラインになっていることを確認してください。