Files
lifeforge/docker/db-init/Dockerfile
Ilya_Balter_1C 955fc7ac7b fix(build): strip carriage returns from entrypoint scripts for windows compatibility
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.
2026-06-25 08:54:11 +08:00

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"]