Add Docker Build Support
Blog posts with 'draft: true' in the frontmatter are excluded from the production artifact --no-cache docker builds ensure fresh database build each time. Caching isn't needed do to small size anyway
This commit is contained in:
51
Dockerfile
Normal file
51
Dockerfile
Normal file
@@ -0,0 +1,51 @@
|
||||
# Build stage
|
||||
FROM oven/bun:1 AS builder
|
||||
WORKDIR /usr/src/app
|
||||
|
||||
# Install dependencies
|
||||
COPY package.json bun.lock ./
|
||||
RUN bun install --frozen-lockfile
|
||||
|
||||
# Copy source code and content
|
||||
COPY . .
|
||||
|
||||
# Copy database initialization script
|
||||
COPY init-db.ts ./
|
||||
|
||||
# Initialize database using init-db.ts script
|
||||
# This script handles draft-aware post verification and stability detection
|
||||
ENV NODE_ENV=build
|
||||
RUN bun run init-db.ts
|
||||
|
||||
# Final production stage
|
||||
FROM oven/bun:1
|
||||
WORKDIR /usr/src/app
|
||||
|
||||
# Copy dependencies
|
||||
COPY --from=builder /usr/src/app/node_modules ./node_modules
|
||||
COPY --from=builder /usr/src/app/package.json ./
|
||||
|
||||
# Copy source code (for runtime transpilation)
|
||||
COPY --from=builder /usr/src/app/src ./src
|
||||
COPY --from=builder /usr/src/app/content ./content
|
||||
COPY --from=builder /usr/src/app/bun_plugins ./bun_plugins
|
||||
COPY --from=builder /usr/src/app/index.tsx .
|
||||
COPY --from=builder /usr/src/app/tsconfig.json .
|
||||
|
||||
# Copy the initialized database for efficient layer caching
|
||||
COPY --from=builder /usr/src/app/blog.sqlite ./
|
||||
|
||||
# Fix ownership for bun user (needed for runtime operations)
|
||||
RUN chown -R bun:bun /usr/src/app
|
||||
|
||||
# Switch to bun user
|
||||
USER bun
|
||||
|
||||
# Expose the default port
|
||||
EXPOSE 3000/tcp
|
||||
|
||||
# Production environment (onStartup-post-importer won't run since DB exists)
|
||||
ENV NODE_ENV=production
|
||||
|
||||
# Run the application directly (Bun handles TSX transpilation at runtime)
|
||||
ENTRYPOINT [ "bun", "run", "index.tsx" ]
|
||||
Reference in New Issue
Block a user