mirror of
https://github.com/Lifeforge-app/lifeforge.git
synced 2026-07-01 08:16:35 +00:00
Entrypoint scripts fail to execute in containers when built on Windows due to CRLF line endings. Added sed command to Dockerfiles to ensure LF line endings at runtime.
78 lines
2.6 KiB
Docker
78 lines
2.6 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/lifeforge-log && bun run build
|
|
|
|
# Build @lifeforge/server-utils (required by schema files)
|
|
RUN cd /app/packages/lifeforge-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/lifeforge-server-utils/dist ./packages/lifeforge-server-utils/dist
|
|
COPY --from=builder /app/packages/lifeforge-server-utils/package.json ./packages/lifeforge-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/lifeforge-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"]
|