FROM node:20-alpine AS builder WORKDIR /app RUN apk add --no-cache openssl COPY workout-planner/package.json workout-planner/package-lock.json ./ RUN npm ci COPY workout-planner/ ./ RUN npx prisma generate RUN mkdir -p /tmp-seed \ && DATABASE_URL=file:/tmp-seed/app.db npx prisma db push --skip-generate \ && DATABASE_URL=file:/tmp-seed/app.db npm run db:seed RUN npm run build FROM node:20-alpine AS runner WORKDIR /app RUN apk add --no-cache dumb-init curl openssl \ && addgroup -S nodejs -g 1001 \ && adduser -S nextjs -u 1001 -G nodejs ENV NODE_ENV=production \ HOSTNAME=0.0.0.0 \ PORT=3000 \ WORKOUT_DATA_DIR=/data \ WORKOUT_DB_PATH=/data/app.db \ WORKOUT_SEED_DB_PATH=/app/prisma/data/app.db COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./ COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static COPY --from=builder --chown=nextjs:nodejs /app/public ./public COPY --from=builder --chown=nextjs:nodejs /app/prisma ./prisma COPY --from=builder --chown=nextjs:nodejs /tmp-seed/app.db /app/prisma/data/app.db COPY start9/0.3.5/docker_entrypoint.sh /usr/local/bin/docker_entrypoint.sh COPY start9/0.3.5/healthcheck.sh /usr/local/bin/healthcheck.sh RUN chmod +x /usr/local/bin/docker_entrypoint.sh /usr/local/bin/healthcheck.sh \ && mkdir -p /data \ && chown -R nextjs:nodejs /app /data USER nextjs EXPOSE 3000 ENTRYPOINT ["dumb-init", "--", "/usr/local/bin/docker_entrypoint.sh"]