Database Installation & Setup
Installation & configuration de la base
Démarrer PostgreSQL
Option 1 : Docker
docker run -d --name naivi-postgres \
-p 5432:5432 \
-e POSTGRES_USER=naivi \
-e POSTGRES_PASSWORD=naivi \
-e POSTGRES_DB=naivi \
postgres:17-alpineDATABASE_URL=postgresql://naivi:naivi@localhost:5432/naivi
Les tests de la CI utilisent postgres:17-alpine. Les identifiants ci-dessus ne servent qu'en local.
Option 2 : PostgreSQL local
Installer PostgreSQL 13 ou plus récent, puis :
CREATE USER naivi WITH PASSWORD 'naivi';
CREATE DATABASE naivi OWNER naivi;Appliquer le schéma
Le schéma est géré par Drizzle depuis apps/server/ :
cd apps/server
bun run db:migrate # applique les migrations de apps/server/drizzle/bun run db:push pousse le schéma directement, sans migration : à réserver au développement. Pour créer une migration après une modification du schéma, utiliser bun run db:generate.
0000_transform_to_unified_schema.sql active l'extension pgcrypto (gen_random_uuid()). Sur PostgreSQL 13 et plus, elle n'est pas indispensable, mais la migration l'active quand même.
Variables
| Variable | Service | Rôle |
|---|---|---|
DATABASE_URL | serveur, document-processor, rag-agent | Base principale, format postgresql://<user>:<password>@<host>:<port>/<database> |
CHAINLIT_DATABASE_URL | serveur | Base Chainlit (logo, feedbacks). Requise pour ces deux fonctions. |
rag-agent se connecte avec psycopg2 (apps/rag-agent/src/common/db.py). Le serveur passe par Drizzle et le pool pg (apps/server/src/db/index.ts).
Rôles par défaut
Au premier démarrage du serveur, ensureDefaultRoles() crée deux rôles applicatifs, s'ils n'existent pas :
admin:is_super_admin = true,display_order = 0;user:is_super_admin = false,display_order = 1.
Ce ne sont pas les rôles Better Auth (user.role) : voir Rôles & tags.
Sauvegarde et restauration
pg_dump -U naivi naivi > backup.sql
psql -U naivi naivi < backup.sqlEn Kubernetes, utiliser un opérateur PostgreSQL ou des CronJobs de sauvegarde. Tester les restaurations régulièrement.