File size: 1,766 Bytes
7ce37bf 7e4b3da efc5df0 7ce37bf 7e4b3da 7ce37bf a4bef0b 496ca32 7ce37bf a4bef0b 7ce37bf 496ca32 a4bef0b 496ca32 7ce37bf a4bef0b 7ce37bf a4bef0b 7ce37bf a4bef0b efc5df0 a4bef0b 7ce37bf efc5df0 a4bef0b 7ce37bf a4bef0b 7ce37bf a4bef0b |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
# Use Node.js as base image since it's needed for the web build
FROM node:20.11-alpine3.19 AS web-builder
# Set working directory for web
WORKDIR /app/web
# Copy package files first
COPY web/package.json web/yarn.lock ./
# Install ALL dependencies (including dev dependencies) needed for build
RUN yarn install --frozen-lockfile
# Copy web source files
COPY web/ .
# Build web app with optimizations
ENV NODE_ENV=production
ENV NEXT_TELEMETRY_DISABLED=1
RUN yarn build
# Python base image for final stage
FROM python:3.10-slim-bookworm
# Install only essential dependencies
RUN apt-get update && apt-get install -y \
nodejs \
npm \
--no-install-recommends && \
rm -rf /var/lib/apt/lists/*
# Set working directory
WORKDIR /app
# Copy API files
COPY api/ /app/api/
# Install Python dependencies efficiently
WORKDIR /app/api
RUN pip install --no-cache-dir poetry && \
poetry config virtualenvs.create false && \
poetry install --only main --no-interaction --no-ansi
# Copy built web files from builder stage
COPY --from=web-builder /app/web/.next /app/web/.next
COPY --from=web-builder /app/web/public /app/web/public
COPY --from=web-builder /app/web/node_modules /app/web/node_modules
COPY --from=web-builder /app/web/package.json /app/web/package.json
# Set environment variables
ENV FLASK_APP=app.py \
EDITION=SELF_HOSTED \
DEPLOY_ENV=PRODUCTION \
CONSOLE_API_URL=http://127.0.0.1:5001 \
CONSOLE_WEB_URL=http://127.0.0.1:3000 \
SERVICE_API_URL=http://127.0.0.1:5001 \
APP_WEB_URL=http://127.0.0.1:3000 \
NODE_ENV=production
# Expose ports
EXPOSE 3000 5001
# Copy and setup entrypoint script
COPY docker/entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh
# Start services
CMD ["/entrypoint.sh"] |