Files
lifeforge/docker/db-init/Dockerfile
melvinchia3636 57a24a52a7 refactor: extract shared configs & federation packages; rename log/server-utils
- Create @lifeforge/configs package with shared client/module Vite configs
  and the `@` path alias resolver extracted from client/vite.config.ts
- Create @lifeforge/federation package with module loading, federation
  provider, and route utilities moved out of the client app
- Rename packages/lifeforge-log → packages/log
- Rename packages/lifeforge-server-utils → packages/server-utils
- Update all imports, tsconfig references, Dockerfiles, and workspace
  scripts to reflect the new package names and locations
2026-06-25 08:54:14 +08:00

78 lines
2.5 KiB
Docker

# syntax=docker/dockerfile:1
# ============================================
# Get PocketBase binary from official image
# ============================================
FROM ghcr.io/muchobien/pocketbase:latest AS pocketbase
# ============================================
# Builder stage - build forge CLI
# ============================================
FROM oven/bun:alpine AS builder
WORKDIR /app
# Copy source
COPY . .
# Install dependencies
RUN --mount=type=cache,target=/root/.bun/install/cache \
bun install --linker isolated
# Build @lifeforge/log (required by tools)
RUN cd /app/packages/log && bun run build
# Build @lifeforge/server-utils (required by schema files)
RUN cd /app/packages/server-utils && bun run build
# Build forge CLI
RUN cd /app/tools && bun run build
# Collect only schema files to staging directory
RUN mkdir -p /schemas && \
find /app/server/src/lib -name "schema.ts" -exec sh -c 'mkdir -p /schemas/$(dirname ${1#/app/}) && cp "$1" /schemas/$(dirname ${1#/app/})/' _ {} \;
# ============================================
# Production stage - minimal runtime
# ============================================
FROM oven/bun:alpine
# Copy PocketBase binary from official image
COPY --from=pocketbase /usr/local/bin/pocketbase /usr/local/bin/pocketbase
WORKDIR /app
# Copy ONLY bundled forge CLI (no node_modules!)
COPY --from=builder /app/tools/dist/forge.js ./forge.js
# Copy server schema files needed for migration generation
COPY --from=builder /schemas/server/src/lib ./server/src/lib
# Copy shared package (built) for schema imports
COPY --from=builder /app/shared/dist ./shared/dist
COPY --from=builder /app/shared/package.json ./shared/package.json
# Copy @lifeforge/server-utils (required by schema files)
COPY --from=builder /app/packages/server-utils/dist ./packages/server-utils/dist
COPY --from=builder /app/packages/server-utils/package.json ./packages/server-utils/package.json
# Create node_modules symlinks for package resolution
RUN mkdir -p node_modules/@lifeforge && \
ln -sf /app/shared node_modules/shared && \
ln -sf /app/packages/server-utils node_modules/@lifeforge/server-utils
# Install minimal dependencies for schema evaluation
RUN echo '{"dependencies":{"zod":"^4.0.0"}}' > package.json && bun install
# Set environment for Docker mode
ENV DOCKER_MODE=true
ENV PB_DIR=/pb_data
ENV PB_BINARY_PATH=/usr/local/bin/pocketbase
# Copy entrypoint
COPY docker/db-init/entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh && \
sed -i 's/\r$//' /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]