docker improvements + delete unused package
This commit is contained in:
+97
@@ -0,0 +1,97 @@
|
||||
# Build stage
|
||||
FROM node:18-alpine AS builder
|
||||
|
||||
# Install pnpm
|
||||
RUN npm install -g [email protected] && \
|
||||
pnpm config set use-git-checks false && \
|
||||
pnpm config set git-checks false && \
|
||||
apk add --no-cache git
|
||||
|
||||
# Set working directory
|
||||
WORKDIR /app
|
||||
|
||||
# Copy root package files
|
||||
COPY package.json pnpm-lock.yaml pnpm-workspace.yaml ./
|
||||
|
||||
# Copy workspace package files
|
||||
COPY apps/dashboard/package.json ./apps/dashboard/
|
||||
COPY packages/shared/package.json ./packages/shared/
|
||||
COPY packages/tsconfig/package.json ./packages/tsconfig/
|
||||
|
||||
# Set environment variables for build
|
||||
ENV IS_SELFHOSTED=true
|
||||
ENV DEPLOYMENT_PROVIDER=docker
|
||||
ENV NODE_OPTIONS="--max-old-space-size=40960"
|
||||
ENV VITE_DISABLE_GIT=true
|
||||
ENV SENTRY_DISABLE_GIT=true
|
||||
ENV GIT_TERMINAL_PROMPT=0
|
||||
ENV GIT_ASKPASS=/bin/true
|
||||
ENV VITE_DEBUG=true
|
||||
|
||||
# Install all dependencies (including dev dependencies)
|
||||
RUN pnpm install --frozen-lockfile
|
||||
|
||||
# Copy source code
|
||||
COPY . .
|
||||
|
||||
RUN echo "Root node_modules contents:" && \
|
||||
ls -la ./node_modules && \
|
||||
echo "\nDashboard node_modules contents:" && \
|
||||
ls -la ./apps/dashboard/node_modules
|
||||
|
||||
# Set production environment for build
|
||||
ENV NODE_ENV=production
|
||||
ENV DEPLOYMENT_PROVIDER=docker
|
||||
ENV IS_SELFHOSTED=true
|
||||
|
||||
RUN git init && \
|
||||
git config --global user.email "[email protected]" && \
|
||||
git config --global user.name "Crom CI" && \
|
||||
git add . && \
|
||||
git commit -m "Initial commit for build"
|
||||
|
||||
# Build the application with increased timeout
|
||||
RUN pnpm build --filter=dashboard -- --timeout 600000
|
||||
|
||||
# Production stage
|
||||
FROM node:18-alpine AS runner
|
||||
|
||||
# Install pnpm
|
||||
RUN npm install -g [email protected]
|
||||
|
||||
# Set working directory
|
||||
WORKDIR /app
|
||||
|
||||
# Copy only necessary files from builder
|
||||
COPY --from=builder /app/package.json /app/pnpm-lock.yaml ./
|
||||
COPY --from=builder /app/apps/dashboard/build ./apps/dashboard/build
|
||||
COPY --from=builder /app/apps/dashboard/package.json ./apps/dashboard/
|
||||
COPY --from=builder /app/packages/shared ./packages/shared
|
||||
COPY --from=builder /app/packages/tsconfig ./packages/tsconfig
|
||||
|
||||
# Install production dependencies only
|
||||
RUN pnpm i --prod --filter=dashboard
|
||||
|
||||
# Set environment variables
|
||||
ENV NODE_ENV=production
|
||||
ENV IS_SELFHOSTED=true
|
||||
ENV DEPLOYMENT_PROVIDER=docker
|
||||
ENV PUBLIC_SUPABASE_URL=$PUBLIC_SUPABASE_URL
|
||||
ENV PUBLIC_SUPABASE_ANON_KEY=$PUBLIC_SUPABASE_ANON_KEY
|
||||
ENV PRIVATE_SUPABASE_SERVICE_ROLE=$PRIVATE_SUPABASE_SERVICE_ROLE
|
||||
ENV PRIVATE_APP_HOST=$PRIVATE_APP_HOST
|
||||
ENV PRIVATE_APP_SUBDOMAINS=$PRIVATE_APP_SUBDOMAINS
|
||||
ENV UNSPLASH_API_KEY=$UNSPLASH_API_KEY
|
||||
ENV OPENAI_API_KEY=$OPENAI_API_KEY
|
||||
ENV PUBLIC_SERVER_URL=$PUBLIC_SERVER_URL
|
||||
ENV PUBLIC_IP_REGISTRY_KEY=$PUBLIC_IP_REGISTRY_KEY
|
||||
ENV NODE_OPTIONS="--max-old-space-size=40960"
|
||||
|
||||
# Expose port
|
||||
EXPOSE 5000
|
||||
|
||||
# Set working directory for the application
|
||||
WORKDIR /app/apps/dashboard
|
||||
|
||||
# Start the application
|
||||
CMD ["node", "build"]
|
||||
Reference in New Issue
Block a user