Використання бази даних PostgreSQL¶
За замовчуванням Gramps Web зберігає кожне родинне дерево у власному файлі бази даних SQLite. Це не потребує додаткового сервісу, резервні копії так само прості, як копіювання файлів, і це добре працює для більшості установок, включаючи ті, що хостять кілька дерев.
Альтернативно, родинні дерева можуть бути розміщені на сервері PostgreSQL за допомогою аддона SharedPostgreSQL, який зберігає всі дерева в одній базі даних. Це може мати сенс, якщо ви вже запускаєте сервер PostgreSQL і хочете керувати резервними копіями та моніторингом там, або якщо ви очікуєте, що багато користувачів редагуватимуть одночасно. PostgreSQL також може хостити базу даних користувачів та індекс пошуку, незалежно від того, де зберігаються родинні дерева.
Аддон PostgreSQL застарів
Старий аддон PostgreSQL, який зберігає одне родинне дерево на базу даних, застарів і більше не буде підтримуватися в майбутніх версіях Gramps Web API. Якщо ви його використовуєте, дивіться Переміщення дерева з аддона PostgreSQL до SharedPostgreSQL.
Налаштування сервера PostgreSQL¶
Найпростіший варіант — запустити сервер PostgreSQL у контейнері на тому ж хості Docker, що й Gramps Web, використовуючи Docker Compose.
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
postgres_data: як ключ під секцією volumes: цього YAML файлу. Образ містить дві бази даних, кожна з власним користувачем і паролем: gramps для генеалогічних даних і grampswebuser для бази даних користувачів Gramps Web.
Якщо ви використовуєте свій власний сервер PostgreSQL, створіть базу даних з назвою gramps, в якій налаштований користувач може створювати таблиці, і переконайтеся, що встановлені локалі, які потрібні вашим користувачам.
Налаштування Gramps Web¶
Нові родинні дерева створюються в базі даних SharedPostgreSQL, коли Gramps Web працює в режимі кількох дерев і параметр конфігурації NEW_DB_BACKEND встановлений на sharedpostgresql. З налаштуванням Docker Compose вище, додайте наступне під ключем environment: сервісу grampsweb у docker-compose.yml:
# увімкнути режим кількох дерев
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
Дивіться Конфігурація для опису всіх цих параметрів. Зверніть увагу, що хост і порт зберігаються з кожним деревом, коли воно створюється, тому зміна їх пізніше вплине лише на нові дерева.
Створення дерева та імпорт даних¶
Щоб створити нове дерево, надішліть POST запит на кінцеву точку /trees/, як описано в Налаштування для хостингу кількох дерев. Відповідь містить ID нового дерева, який вам потрібно для створення облікового запису власника дерева.
Після того, як власник дерева увійде в систему, він може імпортувати існуюче родинне дерево, наприклад, файл Gramps XML, експортований з Gramps Desktop, через веб-інтерфейс.
Використання бази даних PostgreSQL для бази даних користувачів¶
База даних користувачів зазвичай є файлом SQLite, незалежно від того, де розміщуються родинні дерева. Щоб використовувати PostgreSQL замість цього, встановіть параметр конфігурації USER_DB_URI на URL бази даних PostgreSQL. З образом gramps-postgres, наведеним вище, використовуйте його базу даних grampswebuser:
postgresql://grampswebuser:postgres_password_gramps_user@postgres_gramps:5432/grampswebuser
Використання бази даних PostgreSQL для індексу пошуку¶
Індекс пошуку також за замовчуванням зберігається в SQLite. Щоб використовувати PostgreSQL замість цього, встановіть параметр конфігурації SEARCH_INDEX_DB_URI на URL бази даних PostgreSQL. З образом gramps-postgres, наведеним вище, ви можете використовувати його базу даних gramps, незалежно від того, чи розміщуються ваші родинні дерева там:
postgresql://gramps:postgres_password_gramps@postgres_gramps:5432/gramps
Переміщення дерева з аддона PostgreSQL до SharedPostgreSQL¶
Старі установки можуть хостити своє родинне дерево за допомогою аддона PostgreSQL, який зберігає одне дерево на базу даних і застарів. Щоб дізнатися, який аддон використовує дерево, подивіться на файл database.txt у підкаталозі дерева в каталозі бази даних Gramps: він містить postgresql для застарілого аддона PostgreSQL і sharedpostgresql для SharedPostgreSQL.
Щоб перемістити дерево з аддона PostgreSQL до SharedPostgreSQL в межах однієї установки, зберігаючи ваші облікові записи користувачів і медіафайли:
- Зробіть резервну копію вашого родинного дерева у вигляді файлу Gramps XML (
.gramps), використовуючи обліковий запис, який може переглядати приватні записи. - Змініть вашу конфігурацію, як описано в Налаштуванні Gramps Web. Ви можете продовжувати використовувати свій існуючий контейнер
gramps-postgres. - Створіть нове дерево і запишіть його ID дерева.
- Призначте свої існуючі облікові записи користувачів новому дереву, як описано в Міграція існуючої бази даних користувачів.
- Перемістіть свої медіафайли до місця, яке очікується для нового дерева, як описано в Міграція існуючих медіафайлів.
- Увійдіть в систему та імпортуйте файл Gramps XML у нове дерево.
Зберігайте файл Gramps XML, поки не перевірите, що нове дерево завершене.
Якщо ви переміщаєтеся до окремої установки Gramps Web, дотримуйтесь кроків у Переміщення до іншої інстанції Gramps Web.
Проблеми¶
У разі проблем, будь ласка, слідкуйте за виходом журналу Gramps Web та сервера PostgreSQL. У випадку з Docker це досягається за допомогою
docker compose logs grampsweb
docker compose logs postgres_gramps
Якщо ви підозрюєте, що є проблема з Gramps Web (або документацією), будь ласка, подайте проблему на Github.