tiny-stack
tiny-stack copied to clipboard
drizzle migration script missing?
this is really great.
i have been trying to make sqlite
work with docker
with no luck because my migration script doesn't create database in the right place for some reason. it creates it only when i run the application & interact with database but then it creates no tables.
i was wondering where do you do migrations as i can't seem to find drizzle:migrate
script that generates db. i saw you had a knex:migrate
beforehand in git history but nowhere drizzle migrations are found.
i'm using the same stack except next.js instead of astro so was wondering the same. my database somehow doesn't create table after running npm run db:migrate:prod
. can you tell why?
FROM node:20-alpine AS base
# 1. Install dependencies only when needed
FROM base AS deps
# Check https://github.com/nodejs/docker-node/tree/b4117f9333da4138b03a546ec926ef50a31506c3#nodealpine to understand why libc6-compat might be needed.
RUN apk add --no-cache libc6-compat
WORKDIR /app
# Install dependencies based on the preferred package manager
COPY package.json yarn.lock* package-lock.json* pnpm-lock.yaml* ./
RUN \
if [ -f yarn.lock ]; then yarn --frozen-lockfile; \
elif [ -f package-lock.json ]; then npm ci; \
elif [ -f pnpm-lock.yaml ]; then corepack enable pnpm && pnpm i; \
else echo "Lockfile not found." && exit 1; \
fi
# 2. Rebuild the source code only when needed
FROM base AS builder
WORKDIR /app
COPY --from=deps /app/node_modules ./node_modules
COPY . .
# This will do the trick, use the corresponding env file for each environment.
COPY .env.production .env.production
RUN ls
RUN mkdir -p /data
RUN ls
ENV NODE_ENV=production
ENV NEXT_TELEMETRY_DISABLED=1
# Generate migration files
RUN npm run db:generate
# COPY /src/app/db/migrations ./migrations
# Create /data/users.prod.sqlite using Volume Mount
RUN npm run db:migrate:prod
RUN ls
RUN npm run build
# 3. Production image, copy all the files and run next
FROM base AS runner
WORKDIR /app
ENV NODE_ENV=production
ENV NEXT_TELEMETRY_DISABLED=1
RUN addgroup -g 1001 -S nodejs
RUN adduser -S nextjs -u 1001
COPY --from=builder /app/public ./public
# Automatically leverage output traces to reduce image size
# https://nextjs.org/docs/advanced-features/output-file-tracing
COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./
COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static
# Move the drizzle directory to the runtime image
COPY --from=builder --chown=nextjs:nodejs /app/src/app/db/migrations ./migrations
USER nextjs
EXPOSE 3000
# ENV PORT 3000
# ENV HOSTNAME localhost
CMD ["node", "server.js"]
bdw, I have to run npm run db:migrate:prod
before I do npm run build
because next.js production builds need a database in order to build for some reason. i'm wondering how do you manage to skip that part unless astro doesn't need to call database?