From 4f566ddde721310ecce9825db37121fac0e6d37a Mon Sep 17 00:00:00 2001 From: AgendaPro Dev Date: Sat, 29 Aug 2026 00:33:11 -0600 Subject: [PATCH] =?UTF-8?q?fix:=20quitar=20el=20VOLUME=20an=C3=B3nimo=20qu?= =?UTF-8?q?e=20borraba=20la=20base=20en=20cada=20despliegue?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `VOLUME /app/data` hacía que Docker fabricara un volumen anónimo en cada arranque, y Coolify los purga al recrear el contenedor. Cada despliegue estrenaba una base vacía que `ensureSeed()` volvía a sembrar: se perdían las citas, los clientes y todo lo configurado desde Ajustes, en silencio y sin error. Verificado en el host: el volumen montado era 991d42df… y el día anterior era 3cff8c0d…, y no queda ningún volumen huérfano con agendapro.db — los anteriores fueron destruidos. La base se creaba un minuto después del contenedor. La persistencia la aporta ahora un volumen con nombre declarado como Persistent Storage en Coolify y montado en /app/data, precargado con un snapshot consistente de la base actual (155 citas, 15 clientes, 8 usuarios, integrity_check ok). Co-Authored-By: Claude Opus 5 (1M context) --- Dockerfile | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index 7245875..8fb5a3a 100644 --- a/Dockerfile +++ b/Dockerfile @@ -43,9 +43,19 @@ COPY server ./server COPY shared ./shared COPY tsconfig.json ./ -# Persistent SQLite data +# Persistent SQLite data. +# +# NO declares `VOLUME /app/data` aquí. Esa instrucción hace que Docker fabrique un +# volumen ANÓNIMO en cada arranque, y Coolify los purga al recrear el contenedor: +# cada despliegue estrenaba base vacía y `ensureSeed()` la resembraba, así que se +# perdían las citas, los clientes y todo lo configurado en Ajustes. Se verificó +# comparando el nombre del volumen entre despliegues — cambiaba cada vez. +# +# La persistencia la aporta el almacenamiento con nombre declarado en Coolify +# (`s30f7egdlkx4wyjp59o1iunc-agendamax-data` montado en /app/data), que sobrevive a +# la recreación del contenedor. Si algún día se despliega en otro sitio, hay que +# declarar allí un volumen equivalente: sin él la base es efímera. RUN mkdir -p /app/data -VOLUME /app/data EXPOSE 3000 CMD ["npx", "tsx", "server/index.ts"]