mirror of
https://github.com/Lifeforge-app/lifeforge.git
synced 2026-06-27 22:36:06 +00:00
- 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
78 lines
2.5 KiB
Docker
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"]
|