47 lines
1.7 KiB
Docker
47 lines
1.7 KiB
Docker
# Stage 1: Build the frontend application using npm workspaces
|
|
FROM node:20-alpine AS builder
|
|
|
|
WORKDIR /app
|
|
|
|
# Copy root package.json and package-lock.json
|
|
COPY package.json package-lock.json* ./
|
|
|
|
# Copy frontend package definition and backend (needed for workspace install)
|
|
# We need backend's package.json for npm ci to resolve the workspace correctly
|
|
COPY packages/frontend/package.json ./packages/frontend/
|
|
COPY packages/backend/package.json ./packages/backend/
|
|
# If there are other packages frontend depends on, copy their package.json too
|
|
|
|
# Install ALL workspace dependencies using the root lock file
|
|
RUN npm ci
|
|
|
|
# Copy the rest of the frontend source code needed for the build
|
|
COPY packages/frontend/src ./packages/frontend/src
|
|
COPY packages/frontend/index.html ./packages/frontend/
|
|
COPY packages/frontend/tsconfig.json ./packages/frontend/
|
|
COPY packages/frontend/vite.config.ts ./packages/frontend/
|
|
# Assuming postcss.config.js exists at the root or frontend level if needed
|
|
# COPY postcss.config.js ./ # Or ./packages/frontend/ if it's there
|
|
|
|
# Build only the frontend package
|
|
RUN npm run build --workspace=@nexus-terminal/frontend
|
|
|
|
# Stage 2: Serve the static files with Nginx
|
|
FROM nginx:stable-alpine
|
|
|
|
# Remove default Nginx welcome page
|
|
RUN rm -rf /usr/share/nginx/html/*
|
|
|
|
# Copy built assets from builder stage to Nginx html directory
|
|
COPY --from=builder /app/packages/frontend/dist /usr/share/nginx/html
|
|
|
|
# Copy custom Nginx configuration
|
|
# This file needs to be present in the build context (project root)
|
|
# We created it in packages/frontend/, so adjust the COPY source path
|
|
COPY packages/frontend/nginx.conf /etc/nginx/conf.d/default.conf
|
|
|
|
# Expose port 80
|
|
EXPOSE 80
|
|
|
|
# Start Nginx
|
|
CMD ["nginx", "-g", "daemon off;"] |