All checks were successful
Deploy to Production / Build and Deploy (push) Successful in 2m21s
- docker-compose.yml: switch postgres:16-alpine to pgvector/pgvector:pg16
- migration: rewrite with IF NOT EXISTS guards, DO block for safe
text→vector(1536) conversion, handles partial/re-run states
- schema.prisma (both): add @default(now()) on NoteEmbedding.updatedAt,
sync mcp-server embedding type to Unsupported("vector(1536)")
- deploy.yaml: add docker compose pull postgres before build
3.0 KiB
3.0 KiB
Déployment Issues — Migration pgvector
Date: 2026-05-12
Contexte
Le commit 03e6a62 (migrate semantic search to pgvector + full-text search) a été pushé sur main. Le pipeline Gitea deploy.yaml a déployé automatiquement sur 192.168.1.190. L'application ne démarre plus — erreur 502.
Production Environment
- Serveur: 192.168.1.190 (ops-user, sudo requires password)
- docker-compose.yml:
/opt/memento/docker-compose.yml(root-owned, ops-user cannot write directly) - PostgreSQL image:
postgres:16-alpine— pgvector NOT available - Database:
mementoonmemento-postgrescontainer - 102 embeddings existent dans la table
NoteEmbedding
Problèmes rencontrés
1. Extension pgvector manquante
- L'image PostgreSQL est
postgres:16-alpine— pas de pgvector - Il faut changer pour
pgvector/pgvector:pg16dans le docker-compose - OPS-USER ne peut pas écrire dans
/opt/memento/docker-compose.yml(root-owned) - Le
deploy.yamlGitea devrait gérer ce changement d'image
2. Migration Prisma failed (précédente)
20260510123000_add_notebook_hierarchy_and_trashétait déjà en échec depuis le 10 mai- Résolu manuellement:
UPDATE _prisma_migrations SET finished_at = NOW() WHERE migration_name = '...' AND finished_at IS NULL;
3. Nouvelle migration pgvector failed
20260512120000_pgvector_and_fts_searchéchoue car:- Le type
vectorn'existe pas (pgvector pas installé) - La colonne
updatedAtsurNoteEmbeddingn'a pas de default value (102 rows existants)
- Le type
- Partiellement résolu:
ALTER TABLE "NoteEmbedding" ADD COLUMN "updatedAt" TIMESTAMP(3) NOT NULL DEFAULT NOW();
4. La migration doit:
- D'abord installer l'extension pgvector:
CREATE EXTENSION IF NOT EXISTS vector; - Puis modifier la colonne
embeddingdeString(JSON) versvector(1536) - Ajouter l'index HNSW
- Ajouter le FTS tsvector sur
Note - Tout cela doit être fait dans un ordre précis dans le fichier de migration Prisma
Ce qui doit être corrigé dans le code
docker-compose.yml
# AVANT
image: postgres:16-alpine
# APRÈS
image: pgvector/pgvector:pg16
Migration Prisma (fichier dans prisma/migrations/)
La migration doit:
CREATE EXTENSION IF NOT EXISTS vector;— en raw SQL- Ajouter
updatedAtavecDEFAULT NOW()surNoteEmbedding - Convertir la colonne
embeddingde text/JSON versvector(1536)— avec conversion des données existantes - Créer l'index HNSW
- Ajouter la colonne tsvector + trigger sur
Note - Être idempotente — pouvoir tourner plusieurs fois sans erreur
schema.prisma
- Vérifier que
updatedAta@default(now())et@updatedAt - Vérifier que le type
Unsupported("vector(1536)")est correct
##État actuel de la prod
memento-web: Restarting en boucle (migration failed → app ne démarre pas)memento-mcp: unhealthymemento-postgres: healthy, mais migration en état incohérent- Le site retourne 502 Bad Gateway