fix: 容器启动时自动同步数据库 schema,解决线上部署后表结构不同步导致的加载失败

This commit is contained in:
2026-02-28 17:24:03 +08:00
parent 1e39c72a63
commit 039887547d
2 changed files with 23 additions and 1 deletions
+8 -1
View File
@@ -35,6 +35,13 @@ COPY --from=builder /app/prisma/template.db ./template.db
COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./
COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static
# Prisma CLI + schema engine for automatic schema migration on startup
COPY --from=builder /app/node_modules/prisma ./node_modules/prisma
COPY --from=builder /app/node_modules/@prisma/engines ./node_modules/@prisma/engines
COPY docker-entrypoint.sh ./
RUN chmod +x docker-entrypoint.sh
RUN mkdir -p /app/data && chown nextjs:nodejs /app/data
USER nextjs
@@ -43,4 +50,4 @@ ENV PORT=3000
ENV HOSTNAME="0.0.0.0"
ENV DATABASE_URL="file:/app/data/prod.db"
CMD ["sh", "-c", "cp -n template.db /app/data/prod.db 2>/dev/null; node server.js"]
CMD ["./docker-entrypoint.sh"]
+15
View File
@@ -0,0 +1,15 @@
#!/bin/sh
set -e
DB_PATH="/app/data/prod.db"
if [ ! -f "$DB_PATH" ]; then
echo "[db] First run — creating database from template"
cp /app/template.db "$DB_PATH"
fi
echo "[db] Syncing schema..."
node ./node_modules/prisma/build/index.js db push --skip-generate --accept-data-loss 2>&1 || \
echo "[db] ⚠ Schema sync failed, starting with existing schema"
exec node server.js