コンテンツにスキップ

PostgreSQLデータベースの使用

デフォルトでは、Gramps Webは各家系図を独自のSQLiteデータベースファイルに保存します。これには追加のサービスは必要なく、バックアップはファイルをコピーするだけで簡単であり、ほとんどのインストールにおいてうまく機能します。複数の家系図をホスティングする場合も含まれます。

代わりに、家系図はSharedPostgreSQLアドオンを使用してPostgreSQLサーバー上にホストすることができ、すべての家系図を単一のデータベースに保持します。これは、すでにPostgreSQLサーバーを運用していて、そこでバックアップや監視を管理したい場合や、多くのユーザーが同時に編集することを期待する場合に意味があります。PostgreSQLは、家系図が保存されている場所に関係なく、ユーザーデータベースや検索インデックスもホストできます。

PostgreSQLアドオンの非推奨

単一の家系図をデータベースごとに保存する古いPostgreSQLアドオンは非推奨であり、今後のGramps Web APIのバージョンではサポートされなくなります。これを使用している場合は、PostgreSQLアドオンからSharedPostgreSQLへの移行を参照してください。

PostgreSQLサーバーの設定

最も簡単なオプションは、Docker Composeを使用してGramps Webと同じDockerホスト上のコンテナでPostgreSQLサーバーを実行することです。

Grampsは、異なる言語でオブジェクトを正しくソートするためにPostgreSQLサーバーにロケールがインストールされている必要があり、デフォルトのPostgreSQLイメージにはそれが含まれていません。gramps-postgresイメージはそれらを追加します。これを使用するには、docker-compose.ymlに以下のセクションを追加します:

  postgres_gramps:
    image: ghcr.io/davidmstraub/gramps-postgres:latest
    restart: unless-stopped
    environment:
      POSTGRES_PASSWORD: postgres_password_admin
      POSTGRES_PASSWORD_GRAMPS: postgres_password_gramps
      POSTGRES_PASSWORD_GRAMPS_USER: postgres_password_gramps_user
    volumes:
      - postgres_data:/var/lib/postgresql/data
また、このYAMLファイルのvolumes:セクションの下にpostgres_data:をキーとして追加します。このイメージには、各自のユーザーとパスワードを持つ2つのデータベースが含まれています:系譜データ用のgrampsとGramps Webユーザーデータベース用のgrampswebuserです。

代わりに独自のPostgreSQLサーバーを使用する場合は、設定されたユーザーがテーブルを作成できるgrampsという名前のデータベースを作成し、ユーザーが必要とするロケールがインストールされていることを確認してください。

Gramps Webの設定

新しい家系図は、Gramps Webがmulti-treeモードで実行され、NEW_DB_BACKEND設定オプションがsharedpostgresqlに設定されているときにSharedPostgreSQLデータベースに作成されます。上記のDocker Composeセットアップを使用して、docker-compose.ymlのgrampswebサービスのenvironment:キーの下に以下を追加します:

      # マルチツリー モードを有効にする
      GRAMPSWEB_TREE: "*"
      GRAMPSWEB_MEDIA_PREFIX_TREE: true
      # SharedPostgreSQLデータベースに新しいツリーを作成する
      GRAMPSWEB_NEW_DB_BACKEND: sharedpostgresql
      # PostgreSQLサーバーのホストとポート。ホストは上記のPostgreSQLサービスの名前です
      GRAMPSWEB_POSTGRES_HOST: postgres_gramps
      GRAMPSWEB_POSTGRES_PORT: 5432
      # 認証情報はPostgreSQLコンテナで使用されるものと一致する必要があります
      GRAMPSWEB_POSTGRES_USER: gramps
      GRAMPSWEB_POSTGRES_PASSWORD: postgres_password_gramps

これらのオプションの説明については設定を参照してください。ホストとポートは、ツリーが作成されるときに各ツリーと共に保存されるため、後で変更しても新しいツリーにのみ影響します。

ツリーの作成とデータのインポート

新しいツリーを作成するには、複数のツリーをホスティングするためのセットアップで説明されているように/trees/エンドポイントにPOSTします。レスポンスには新しいツリーのIDが含まれており、これがツリーオーナーアカウントの作成に必要です。

ツリーオーナーがログインすると、既存の家系図(例えば、Gramps DesktopからエクスポートされたGramps XMLファイル)をウェブインターフェースを介してインポートできます。

ユーザーデータベース用のPostgreSQLデータベースの使用

ユーザーデータベースは通常、家系図がホスティングされている場所に関係なくSQLiteファイルです。代わりにPostgreSQLを使用するには、USER_DB_URI設定オプションをPostgreSQLデータベースのURLに設定します。上記のgramps-postgresイメージを使用する場合は、そのgrampswebuserデータベースを使用します:

postgresql://grampswebuser:postgres_password_gramps_user@postgres_gramps:5432/grampswebuser

検索インデックス用のPostgreSQLデータベースの使用

検索インデックスもデフォルトではSQLiteに保存されます。代わりにPostgreSQLを使用するには、SEARCH_INDEX_DB_URI設定オプションをPostgreSQLデータベースのURLに設定します。上記のgramps-postgresイメージを使用する場合、家系図がそこにホストされているかどうかに関係なく、そのgrampsデータベースを使用できます:

postgresql://gramps:postgres_password_gramps@postgres_gramps:5432/gramps

PostgreSQLアドオンからSharedPostgreSQLへのツリーの移行

古いインストールでは、単一のツリーをデータベースごとに保存するPostgreSQLアドオンを使用して家系図をホストしている場合があります。ツリーがどのアドオンを使用しているかを確認するには、Grampsデータベースディレクトリのツリーのサブディレクトリにあるdatabase.txtファイルを見てください。そこには、非推奨のPostgreSQLアドオンの場合はpostgresql、SharedPostgreSQLの場合はsharedpostgresqlが含まれています。

同じインストール内でPostgreSQLアドオンからSharedPostgreSQLにツリーを移行し、ユーザーアカウントとメディアファイルを保持するには:

  1. プライベートレコードを表示できるアカウントを使用して、Gramps XML(.gramps)ファイルとして家系図をバックアップします。
  2. Gramps Webの設定で説明されているように構成を変更します。既存のgramps-postgresコンテナを引き続き使用できます。
  3. 新しいツリーを作成し、そのツリーIDをメモします。
  4. 既存のユーザーデータベースを移行で説明されているように、既存のユーザーアカウントを新しいツリーに割り当てます。
  5. 既存のメディアファイルを移行で説明されているように、メディアファイルを新しいツリーに期待される場所に移動します。
  6. ログインして、Gramps XMLファイルを新しいツリーにインポートします。

新しいツリーが完全であることを確認するまで、Gramps XMLファイルを保持してください。

別のGramps Webインストールに移行する場合は、別のGramps Webインスタンスに移動の手順に従ってください。

問題

問題が発生した場合は、Gramps WebおよびPostgreSQLサーバーのログ出力を監視してください。Dockerの場合、これは次のコマンドで実行できます。

docker compose logs grampsweb
docker compose logs postgres_gramps

Gramps Web(またはドキュメント)に問題があると思われる場合は、Githubに問題を報告してください。