* fix: update Docker workflow to use correct target stage name - Change target from bolt-ai-production to runtime - Matches the actual stage name in the new Dockerfile structure - Fixes CI failure: target stage 'bolt-ai-production' could not be found * fix: resolve critical Docker configuration issues This commit fixes multiple critical Docker configuration issues that prevented successful builds: **Dockerfile Issues Fixed:** - Replace incomplete runtime stage with proper production stage using Wrangler - Add missing environment variables for all API providers (DeepSeek, LMStudio, Mistral, Perplexity, OpenAI-like) - Use correct port (5173) instead of 3000 to match Wrangler configuration - Add proper bindings.sh script copying and execution permissions - Configure Wrangler metrics and proper startup command **Docker Compose Issues Fixed:** - Add missing `context` and `dockerfile` fields to app-dev service - Fix target name from `bolt-ai-development` to `development` **Package.json Issues Fixed:** - Update dockerbuild script to use correct target name `development` **Testing:** - ✅ Both `pnpm run dockerbuild` and `pnpm run dockerbuild:prod` now work - ✅ All environment variables properly configured - ✅ Docker images build successfully with proper Wrangler integration Resolves Docker build failures and enables proper containerized deployment. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * Update Dockerfile * fix: update GitHub workflow Docker targets to match Dockerfile stage names Update ci.yaml and docker.yaml workflows to use correct Docker target stage name 'bolt-ai-production' instead of 'runtime'. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com> * Refactor Dockerfile for optimized production build Adds git installation for build/runtime scripts and introduces a separate prod-deps stage to prune dependencies before final production image. Updates file copy sources to use prod-deps stage, improving build efficiency and image size. --------- Co-authored-by: Claude <noreply@anthropic.com>
104 lines
2.8 KiB
Docker
104 lines
2.8 KiB
Docker
# ---- build stage ----
|
|
FROM node:22-bookworm-slim AS build
|
|
WORKDIR /app
|
|
|
|
# CI-friendly env
|
|
ENV HUSKY=0
|
|
ENV CI=true
|
|
|
|
# Use pnpm
|
|
RUN corepack enable && corepack prepare pnpm@9.15.9 --activate
|
|
|
|
# Ensure git is available for build and runtime scripts
|
|
RUN apt-get update && apt-get install -y --no-install-recommends git \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
# Accept (optional) build-time public URL for Remix/Vite (Coolify can pass it)
|
|
ARG VITE_PUBLIC_APP_URL
|
|
ENV VITE_PUBLIC_APP_URL=${VITE_PUBLIC_APP_URL}
|
|
|
|
# Install deps efficiently
|
|
COPY package.json pnpm-lock.yaml* ./
|
|
RUN pnpm fetch
|
|
|
|
# Copy source and build
|
|
COPY . .
|
|
# install with dev deps (needed to build)
|
|
RUN pnpm install --offline --frozen-lockfile
|
|
|
|
# Build the Remix app (SSR + client)
|
|
RUN NODE_OPTIONS=--max-old-space-size=4096 pnpm run build
|
|
|
|
# ---- production dependencies stage ----
|
|
FROM build AS prod-deps
|
|
|
|
# Keep only production deps for runtime
|
|
RUN pnpm prune --prod --ignore-scripts
|
|
|
|
|
|
# ---- production stage ----
|
|
FROM prod-deps AS bolt-ai-production
|
|
WORKDIR /app
|
|
|
|
ENV NODE_ENV=production
|
|
ENV PORT=5173
|
|
ENV HOST=0.0.0.0
|
|
|
|
# Non-sensitive build arguments
|
|
ARG VITE_LOG_LEVEL=debug
|
|
ARG DEFAULT_NUM_CTX
|
|
|
|
# Set non-sensitive environment variables
|
|
ENV WRANGLER_SEND_METRICS=false \
|
|
VITE_LOG_LEVEL=${VITE_LOG_LEVEL} \
|
|
DEFAULT_NUM_CTX=${DEFAULT_NUM_CTX} \
|
|
RUNNING_IN_DOCKER=true
|
|
|
|
# Note: API keys should be provided at runtime via docker run -e or docker-compose
|
|
# Example: docker run -e OPENAI_API_KEY=your_key_here ...
|
|
|
|
# Install curl for healthchecks and copy bindings script
|
|
RUN apt-get update && apt-get install -y --no-install-recommends curl \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
# Copy built files and scripts
|
|
COPY --from=prod-deps /app/build /app/build
|
|
COPY --from=prod-deps /app/node_modules /app/node_modules
|
|
COPY --from=prod-deps /app/package.json /app/package.json
|
|
COPY --from=prod-deps /app/bindings.sh /app/bindings.sh
|
|
|
|
# Pre-configure wrangler to disable metrics
|
|
RUN mkdir -p /root/.config/.wrangler && \
|
|
echo '{"enabled":false}' > /root/.config/.wrangler/metrics.json
|
|
|
|
# Make bindings script executable
|
|
RUN chmod +x /app/bindings.sh
|
|
|
|
EXPOSE 5173
|
|
|
|
# Healthcheck for deployment platforms
|
|
HEALTHCHECK --interval=10s --timeout=3s --start-period=5s --retries=5 \
|
|
CMD curl -fsS http://localhost:5173/ || exit 1
|
|
|
|
# Start using dockerstart script with Wrangler
|
|
CMD ["pnpm", "run", "dockerstart"]
|
|
|
|
|
|
# ---- development stage ----
|
|
FROM build AS development
|
|
|
|
# Non-sensitive development arguments
|
|
ARG VITE_LOG_LEVEL=debug
|
|
ARG DEFAULT_NUM_CTX
|
|
|
|
# Set non-sensitive environment variables for development
|
|
ENV VITE_LOG_LEVEL=${VITE_LOG_LEVEL} \
|
|
DEFAULT_NUM_CTX=${DEFAULT_NUM_CTX} \
|
|
RUNNING_IN_DOCKER=true
|
|
|
|
# Note: API keys should be provided at runtime via docker run -e or docker-compose
|
|
# Example: docker run -e OPENAI_API_KEY=your_key_here ...
|
|
|
|
RUN mkdir -p /app/run
|
|
CMD ["pnpm", "run", "dev", "--host"]
|