forked from github/plane
150 lines
4.7 KiB
Docker
150 lines
4.7 KiB
Docker
|
# *****************************************************************************
|
||
|
# STAGE 1: Build the project
|
||
|
# *****************************************************************************
|
||
|
FROM node:18-alpine AS builder
|
||
|
RUN apk add --no-cache libc6-compat
|
||
|
# Set working directory
|
||
|
WORKDIR /app
|
||
|
ENV NEXT_PUBLIC_API_BASE_URL=http://NEXT_PUBLIC_API_BASE_URL_PLACEHOLDER
|
||
|
|
||
|
RUN yarn global add turbo
|
||
|
COPY . .
|
||
|
|
||
|
RUN turbo prune --scope=web --scope=space --scope=admin --docker
|
||
|
|
||
|
# *****************************************************************************
|
||
|
# STAGE 2: Install dependencies & build the project
|
||
|
# *****************************************************************************
|
||
|
# Add lockfile and package.json's of isolated subworkspace
|
||
|
FROM node:18-alpine AS installer
|
||
|
|
||
|
RUN apk add --no-cache libc6-compat
|
||
|
WORKDIR /app
|
||
|
|
||
|
# First install the dependencies (as they change less often)
|
||
|
COPY .gitignore .gitignore
|
||
|
COPY --from=builder /app/out/json/ .
|
||
|
COPY --from=builder /app/out/yarn.lock ./yarn.lock
|
||
|
RUN yarn install
|
||
|
|
||
|
# # Build the project
|
||
|
COPY --from=builder /app/out/full/ .
|
||
|
COPY turbo.json turbo.json
|
||
|
|
||
|
ARG NEXT_PUBLIC_API_BASE_URL=""
|
||
|
ENV NEXT_PUBLIC_API_BASE_URL=$NEXT_PUBLIC_API_BASE_URL
|
||
|
|
||
|
ARG NEXT_PUBLIC_ADMIN_BASE_URL=""
|
||
|
ENV NEXT_PUBLIC_ADMIN_BASE_URL=$NEXT_PUBLIC_ADMIN_BASE_URL
|
||
|
|
||
|
ARG NEXT_PUBLIC_ADMIN_BASE_PATH="/god-mode"
|
||
|
ENV NEXT_PUBLIC_ADMIN_BASE_PATH=$NEXT_PUBLIC_ADMIN_BASE_PATH
|
||
|
|
||
|
ARG NEXT_PUBLIC_SPACE_BASE_URL=""
|
||
|
ENV NEXT_PUBLIC_SPACE_BASE_URL=$NEXT_PUBLIC_SPACE_BASE_URL
|
||
|
|
||
|
ARG NEXT_PUBLIC_SPACE_BASE_PATH="/spaces"
|
||
|
ENV NEXT_PUBLIC_SPACE_BASE_PATH=$NEXT_PUBLIC_SPACE_BASE_PATH
|
||
|
|
||
|
ENV NEXT_TELEMETRY_DISABLED 1
|
||
|
ENV TURBO_TELEMETRY_DISABLED 1
|
||
|
|
||
|
RUN yarn turbo run build
|
||
|
|
||
|
# *****************************************************************************
|
||
|
# STAGE 3: Copy the project and start it
|
||
|
# *****************************************************************************
|
||
|
# FROM makeplane/plane-aio-base AS runner
|
||
|
FROM makeplane/plane-aio-base:develop AS runner
|
||
|
|
||
|
WORKDIR /app
|
||
|
|
||
|
SHELL [ "/bin/bash", "-c" ]
|
||
|
|
||
|
# PYTHON APPLICATION SETUP
|
||
|
|
||
|
ENV PYTHONDONTWRITEBYTECODE 1
|
||
|
ENV PYTHONUNBUFFERED 1
|
||
|
ENV PIP_DISABLE_PIP_VERSION_CHECK=1
|
||
|
|
||
|
COPY apiserver/requirements.txt ./api/
|
||
|
COPY apiserver/requirements ./api/requirements
|
||
|
|
||
|
RUN python3.12 -m venv /app/venv && \
|
||
|
source /app/venv/bin/activate && \
|
||
|
/app/venv/bin/pip install --upgrade pip && \
|
||
|
/app/venv/bin/pip install -r ./api/requirements.txt --compile --no-cache-dir
|
||
|
|
||
|
# Add in Django deps and generate Django's static files
|
||
|
COPY apiserver/manage.py ./api/manage.py
|
||
|
COPY apiserver/plane ./api/plane/
|
||
|
COPY apiserver/templates ./api/templates/
|
||
|
COPY package.json ./api/package.json
|
||
|
|
||
|
COPY apiserver/bin ./api/bin/
|
||
|
|
||
|
RUN chmod +x ./api/bin/*
|
||
|
RUN chmod -R 777 ./api/
|
||
|
|
||
|
# NEXTJS BUILDS
|
||
|
|
||
|
COPY --from=installer /app/web/next.config.js ./web/
|
||
|
COPY --from=installer /app/web/package.json ./web/
|
||
|
COPY --from=installer /app/web/.next/standalone ./web
|
||
|
COPY --from=installer /app/web/.next/static ./web/web/.next/static
|
||
|
COPY --from=installer /app/web/public ./web/web/public
|
||
|
|
||
|
COPY --from=installer /app/space/next.config.js ./space/
|
||
|
COPY --from=installer /app/space/package.json ./space/
|
||
|
COPY --from=installer /app/space/.next/standalone ./space
|
||
|
COPY --from=installer /app/space/.next/static ./space/space/.next/static
|
||
|
COPY --from=installer /app/space/public ./space/space/public
|
||
|
|
||
|
COPY --from=installer /app/admin/next.config.js ./admin/
|
||
|
COPY --from=installer /app/admin/package.json ./admin/
|
||
|
COPY --from=installer /app/admin/.next/standalone ./admin
|
||
|
COPY --from=installer /app/admin/.next/static ./admin/admin/.next/static
|
||
|
COPY --from=installer /app/admin/public ./admin/admin/public
|
||
|
|
||
|
ARG NEXT_PUBLIC_API_BASE_URL=""
|
||
|
ENV NEXT_PUBLIC_API_BASE_URL=$NEXT_PUBLIC_API_BASE_URL
|
||
|
|
||
|
ARG NEXT_PUBLIC_ADMIN_BASE_URL=""
|
||
|
ENV NEXT_PUBLIC_ADMIN_BASE_URL=$NEXT_PUBLIC_ADMIN_BASE_URL
|
||
|
|
||
|
ARG NEXT_PUBLIC_ADMIN_BASE_PATH="/god-mode"
|
||
|
ENV NEXT_PUBLIC_ADMIN_BASE_PATH=$NEXT_PUBLIC_ADMIN_BASE_PATH
|
||
|
|
||
|
ARG NEXT_PUBLIC_SPACE_BASE_URL=""
|
||
|
ENV NEXT_PUBLIC_SPACE_BASE_URL=$NEXT_PUBLIC_SPACE_BASE_URL
|
||
|
|
||
|
ARG NEXT_PUBLIC_SPACE_BASE_PATH="/spaces"
|
||
|
ENV NEXT_PUBLIC_SPACE_BASE_PATH=$NEXT_PUBLIC_SPACE_BASE_PATH
|
||
|
|
||
|
ARG NEXT_PUBLIC_WEB_BASE_URL=""
|
||
|
ENV NEXT_PUBLIC_WEB_BASE_URL=$NEXT_PUBLIC_WEB_BASE_URL
|
||
|
|
||
|
ENV NEXT_TELEMETRY_DISABLED 1
|
||
|
ENV TURBO_TELEMETRY_DISABLED 1
|
||
|
|
||
|
COPY aio/supervisord.conf /app/supervisord.conf
|
||
|
|
||
|
COPY aio/aio.sh /app/aio.sh
|
||
|
RUN chmod +x /app/aio.sh
|
||
|
|
||
|
COPY aio/pg-setup.sh /app/pg-setup.sh
|
||
|
RUN chmod +x /app/pg-setup.sh
|
||
|
|
||
|
COPY deploy/selfhost/variables.env /app/plane.env
|
||
|
|
||
|
# NGINX Conf Copy
|
||
|
COPY ./aio/nginx.conf.aio /etc/nginx/nginx.conf.template
|
||
|
COPY ./nginx/env.sh /app/nginx-start.sh
|
||
|
RUN chmod +x /app/nginx-start.sh
|
||
|
|
||
|
RUN ./pg-setup.sh
|
||
|
|
||
|
VOLUME [ "/app/data/minio/uploads", "/var/lib/postgresql/data" ]
|
||
|
|
||
|
CMD ["/usr/bin/supervisord", "-c", "/app/supervisord.conf"]
|