57 lines
1.4 KiB
Docker
57 lines
1.4 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
|
||
|
||
# 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
|
||
|
||
# Keep only production deps for runtime
|
||
RUN pnpm prune --prod --ignore-scripts
|
||
|
||
|
||
# ---- runtime stage ----
|
||
FROM node:22-bookworm-slim AS runtime
|
||
WORKDIR /app
|
||
|
||
ENV NODE_ENV=production
|
||
ENV PORT=3000
|
||
ENV HOST=0.0.0.0
|
||
|
||
# Install curl so Coolify’s healthcheck works inside the image
|
||
RUN apt-get update && apt-get install -y --no-install-recommends curl \
|
||
&& rm -rf /var/lib/apt/lists/*
|
||
|
||
# Copy only what we need to run
|
||
COPY --from=build /app/build /app/build
|
||
COPY --from=build /app/node_modules /app/node_modules
|
||
COPY --from=build /app/package.json /app/package.json
|
||
|
||
EXPOSE 3000
|
||
|
||
# Healthcheck for Coolify
|
||
HEALTHCHECK --interval=10s --timeout=3s --start-period=5s --retries=5 \
|
||
CMD curl -fsS http://localhost:3000/ || exit 1
|
||
|
||
# Start the Remix server
|
||
CMD ["node", "build/server/index.js"]
|