85 lines
2.3 KiB
Docker
85 lines
2.3 KiB
Docker
# Base image for Node.js dependencies
|
|
FROM node:20.15.1-alpine AS frontend-deps
|
|
RUN apk add --no-cache git
|
|
WORKDIR /app/frontend
|
|
COPY frontend/package.json frontend/yarn.lock ./
|
|
RUN yarn install --pure-lockfile
|
|
|
|
FROM node:20.15.1-alpine AS backend-deps
|
|
RUN apk add --no-cache git
|
|
WORKDIR /app/backend
|
|
COPY backend/package.json backend/yarn.lock ./
|
|
RUN yarn install --pure-lockfile
|
|
|
|
FROM node:20.15.1-alpine AS app-shell-deps
|
|
RUN apk add --no-cache git
|
|
WORKDIR /app/app-shell
|
|
COPY app-shell/package.json app-shell/yarn.lock ./
|
|
RUN yarn install --pure-lockfile
|
|
|
|
# Nginx setup and application build
|
|
FROM node:20.15.1-alpine AS build
|
|
RUN apk add --no-cache git nginx curl
|
|
RUN apk add --no-cache lsof procps
|
|
RUN yarn global add concurrently
|
|
|
|
RUN apk add --no-cache \
|
|
chromium \
|
|
nss \
|
|
freetype \
|
|
harfbuzz \
|
|
ttf-freefont \
|
|
fontconfig
|
|
|
|
ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true
|
|
ENV PUPPETEER_EXECUTABLE_PATH=/usr/bin/chromium-browser
|
|
|
|
RUN mkdir -p /app/pids
|
|
|
|
# Make sure to add yarn global bin to PATH
|
|
ENV PATH /root/.yarn/bin:/root/.config/yarn/global/node_modules/.bin:$PATH
|
|
|
|
# Copy dependencies
|
|
WORKDIR /app
|
|
COPY --from=frontend-deps /app/frontend /app/frontend
|
|
COPY --from=backend-deps /app/backend /app/backend
|
|
COPY --from=app-shell-deps /app/app-shell /app/app-shell
|
|
|
|
COPY frontend /app/frontend
|
|
COPY backend /app/backend
|
|
COPY app-shell /app/app-shell
|
|
COPY docker /app/docker
|
|
|
|
# Copy all files from root to /app
|
|
COPY . /app
|
|
|
|
# Copy Nginx configuration
|
|
COPY nginx.conf /etc/nginx/nginx.conf
|
|
|
|
# Copy custom error page
|
|
COPY 502.html /usr/share/nginx/html/502.html
|
|
|
|
# Change owner and permissions of the error page
|
|
RUN chown nginx:nginx /usr/share/nginx/html/502.html && \
|
|
chmod 644 /usr/share/nginx/html/502.html
|
|
|
|
# Expose the port the app runs on
|
|
EXPOSE 8080
|
|
ENV NODE_ENV=dev_stage
|
|
ENV FRONT_PORT=3001
|
|
ENV BACKEND_PORT=3000
|
|
ENV APP_SHELL_PORT=4000
|
|
|
|
|
|
CMD ["sh", "-c", "\
|
|
yarn --cwd /app/frontend dev & echo $! > /app/pids/frontend.pid && \
|
|
yarn --cwd /app/backend start & echo $! > /app/pids/backend.pid && \
|
|
sleep 10 && nginx -g 'daemon off;' & \
|
|
NGINX_PID=$! && \
|
|
echo 'Waiting for backend (port 3000) to be available...' && \
|
|
while ! nc -z localhost ${BACKEND_PORT}; do \
|
|
sleep 2; \
|
|
done && \
|
|
echo 'Backend is up. Starting app_shell for Git check...' && \
|
|
yarn --cwd /app/app-shell start && \
|
|
wait $NGINX_PID"] |