forked from github/plane
feat: monoimage
This commit is contained in:
189
Dockerfile
189
Dockerfile
@@ -1,124 +1,105 @@
|
||||
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
|
||||
FROM git.orionkindel.com/tpl/asdf:bookworm AS system
|
||||
|
||||
RUN yarn global add turbo
|
||||
RUN apk add tree
|
||||
COPY . .
|
||||
ARG S6_OVERLAY_VERSION=3.1.6.2
|
||||
|
||||
RUN turbo prune --scope=app --scope=plane-deploy --docker
|
||||
CMD tree -I node_modules/
|
||||
ADD https://github.com/just-containers/s6-overlay/releases/download/v${S6_OVERLAY_VERSION}/s6-overlay-noarch.tar.xz /tmp
|
||||
RUN tar -C / -Jxpf /tmp/s6-overlay-noarch.tar.xz
|
||||
|
||||
# Add lockfile and package.json's of isolated subworkspace
|
||||
FROM node:18-alpine AS installer
|
||||
ADD https://github.com/just-containers/s6-overlay/releases/download/v${S6_OVERLAY_VERSION}/s6-overlay-x86_64.tar.xz /tmp
|
||||
RUN tar -C / -Jxpf /tmp/s6-overlay-x86_64.tar.xz
|
||||
|
||||
RUN apk add --no-cache libc6-compat
|
||||
WORKDIR /app
|
||||
ARG NEXT_PUBLIC_API_BASE_URL=http://localhost:8000
|
||||
# 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
|
||||
RUN apt-get update
|
||||
RUN apt-get install -y \
|
||||
build-essential \
|
||||
zlib1g-dev \
|
||||
libncurses5-dev \
|
||||
libgdbm-dev \
|
||||
libnss3-dev \
|
||||
libssl-dev \
|
||||
libreadline-dev \
|
||||
libffi-dev \
|
||||
libsqlite3-dev \
|
||||
wget \
|
||||
libbz2-dev \
|
||||
uuid-dev \
|
||||
nginx \
|
||||
procps
|
||||
|
||||
# # Build the project
|
||||
COPY --from=builder /app/out/full/ .
|
||||
COPY turbo.json turbo.json
|
||||
COPY replace-env-vars.sh /usr/local/bin/
|
||||
RUN asdf plugin add nodejs \
|
||||
&& asdf plugin add python \
|
||||
&& asdf plugin add postgres
|
||||
|
||||
RUN chmod +x /usr/local/bin/replace-env-vars.sh
|
||||
RUN --mount=type=cache,target=/.asdf-build \
|
||||
export ASDF_DOWNLOAD_PATH=/.asdf-build \
|
||||
&& export TMPDIR=/.asdf-build \
|
||||
&& export POSTGRES_SKIP_INITDB=y \
|
||||
&& asdf install nodejs 20.9.0 \
|
||||
&& asdf install python 3.11.1 \
|
||||
&& asdf install postgres 15.3
|
||||
|
||||
RUN yarn turbo run build
|
||||
RUN asdf global nodejs 20.9.0 \
|
||||
&& asdf global postgres 15.3 \
|
||||
&& asdf global python 3.11.1
|
||||
|
||||
ENV NEXT_PUBLIC_API_BASE_URL=$NEXT_PUBLIC_API_BASE_URL \
|
||||
BUILT_NEXT_PUBLIC_API_BASE_URL=$NEXT_PUBLIC_API_BASE_URL
|
||||
RUN useradd -m postgres && passwd -d postgres
|
||||
|
||||
RUN /usr/local/bin/replace-env-vars.sh http://NEXT_PUBLIC_WEBAPP_URL_PLACEHOLDER ${NEXT_PUBLIC_API_BASE_URL}
|
||||
ADD https://dl.min.io/server/minio/release/linux-amd64/minio /usr/bin
|
||||
RUN chmod +x /usr/bin/minio
|
||||
|
||||
FROM python:3.11.1-alpine3.17 AS backend
|
||||
RUN set -eo pipefail; \
|
||||
curl -fsSL https://packages.redis.io/gpg | gpg --dearmor -o /usr/share/keyrings/redis-archive-keyring.gpg; \
|
||||
echo "deb [signed-by=/usr/share/keyrings/redis-archive-keyring.gpg] https://packages.redis.io/deb bookworm main" | tee /etc/apt/sources.list.d/redis.list; \
|
||||
apt-get update; \
|
||||
apt-get install -y redis
|
||||
|
||||
# set environment variables
|
||||
ENV PYTHONDONTWRITEBYTECODE 1
|
||||
ENV PYTHONUNBUFFERED 1
|
||||
ENV PIP_DISABLE_PIP_VERSION_CHECK=1
|
||||
FROM system AS build
|
||||
|
||||
WORKDIR /code
|
||||
RUN asdf reshim
|
||||
RUN npm i -g yarn
|
||||
RUN --mount=type=cache,target=/.yarn-cache \
|
||||
yarn config set cache-folder /.yarn-cache
|
||||
|
||||
RUN apk --no-cache add \
|
||||
"libpq~=15" \
|
||||
"libxslt~=1.1" \
|
||||
"nodejs-current~=19" \
|
||||
"xmlsec~=1.2" \
|
||||
"nginx" \
|
||||
"nodejs" \
|
||||
"npm" \
|
||||
"supervisor"
|
||||
COPY package.json turbo.json yarn.lock app.json ./
|
||||
COPY packages packages
|
||||
COPY web web
|
||||
COPY space space
|
||||
COPY apiserver apiserver
|
||||
RUN --mount=type=cache,target=/.yarn-cache \
|
||||
--mount=type=cache,target=/web/.next \
|
||||
--mount=type=cache,target=/space/.next \
|
||||
yarn install && \
|
||||
yarn build && \
|
||||
cp -R /web/.next /web/_next && \
|
||||
cp -R /space/.next /space/_next
|
||||
|
||||
COPY apiserver/requirements.txt ./
|
||||
COPY apiserver/requirements ./requirements
|
||||
RUN apk add --no-cache libffi-dev
|
||||
RUN apk add --no-cache --virtual .build-deps \
|
||||
"bash~=5.2" \
|
||||
"g++~=12.2" \
|
||||
"gcc~=12.2" \
|
||||
"cargo~=1.64" \
|
||||
"git~=2" \
|
||||
"make~=4.3" \
|
||||
"postgresql13-dev~=13" \
|
||||
"libc-dev" \
|
||||
"linux-headers" \
|
||||
&& \
|
||||
pip install -r requirements.txt --compile --no-cache-dir \
|
||||
&& \
|
||||
apk del .build-deps
|
||||
RUN mv /web/_next /web/.next && \
|
||||
mv /space/_next /space/.next && \
|
||||
cp -R /web/.next/standalone/web/* /web/ && \
|
||||
cp -R /space/.next/standalone/space/* /space/
|
||||
|
||||
# Add in Django deps and generate Django's static files
|
||||
COPY apiserver/manage.py manage.py
|
||||
COPY apiserver/plane plane/
|
||||
COPY apiserver/templates templates/
|
||||
ENV PYTHONDONTWRITEBYTECODE=1
|
||||
ENV PYTHONUNBUFFERED=1
|
||||
ENV PIP_DISABLE_PIP_VERSION_CHECK=1
|
||||
|
||||
RUN apk --no-cache add "bash~=5.2"
|
||||
COPY apiserver/bin ./bin/
|
||||
RUN --mount=type=cache,target=/root/.cache/pip \
|
||||
cd /apiserver \
|
||||
&& pip install -r requirements.txt --compile
|
||||
|
||||
RUN chmod +x ./bin/takeoff ./bin/worker
|
||||
RUN chmod -R 777 /code
|
||||
FROM build AS s6
|
||||
|
||||
# Expose container port and run entry point script
|
||||
COPY docker/etc/ /etc/
|
||||
|
||||
WORKDIR /app
|
||||
RUN chmod -R 777 /root \
|
||||
&& chmod -R 777 /root/.asdf \
|
||||
&& chmod -x /root/.asdf/lib/commands/* \
|
||||
&& chmod -R 777 /apiserver \
|
||||
&& chmod -R 777 /web \
|
||||
&& chmod -R 777 /space \
|
||||
&& ln $(asdf which postgres) /usr/bin/postgres \
|
||||
&& ln $(asdf which initdb) /usr/bin/initdb \
|
||||
&& ln $(asdf which node) /usr/bin/node \
|
||||
&& ln $(asdf which npm) /usr/bin/npm \
|
||||
&& ln $(asdf which python) /usr/bin/python
|
||||
|
||||
COPY --from=installer /app/apps/app/next.config.js .
|
||||
COPY --from=installer /app/apps/app/package.json .
|
||||
COPY --from=installer /app/apps/space/next.config.js .
|
||||
COPY --from=installer /app/apps/space/package.json .
|
||||
|
||||
COPY --from=installer /app/apps/app/.next/standalone ./
|
||||
|
||||
COPY --from=installer /app/apps/app/.next/static ./apps/app/.next/static
|
||||
|
||||
COPY --from=installer /app/apps/space/.next/standalone ./
|
||||
COPY --from=installer /app/apps/space/.next ./apps/space/.next
|
||||
|
||||
ENV NEXT_TELEMETRY_DISABLED 1
|
||||
|
||||
# RUN rm /etc/nginx/conf.d/default.conf
|
||||
#######################################################################
|
||||
COPY nginx/nginx-single-docker-image.conf /etc/nginx/http.d/default.conf
|
||||
#######################################################################
|
||||
|
||||
COPY nginx/supervisor.conf /code/supervisor.conf
|
||||
|
||||
ARG NEXT_PUBLIC_API_BASE_URL=http://localhost:8000
|
||||
ENV NEXT_PUBLIC_API_BASE_URL=$NEXT_PUBLIC_API_BASE_URL \
|
||||
BUILT_NEXT_PUBLIC_API_BASE_URL=$NEXT_PUBLIC_API_BASE_URL
|
||||
|
||||
COPY replace-env-vars.sh /usr/local/bin/
|
||||
COPY start.sh /usr/local/bin/
|
||||
RUN chmod +x /usr/local/bin/replace-env-vars.sh
|
||||
RUN chmod +x /usr/local/bin/start.sh
|
||||
|
||||
EXPOSE 80
|
||||
|
||||
CMD ["supervisord","-c","/code/supervisor.conf"]
|
||||
ENV S6_KEEP_ENV=1
|
||||
ENTRYPOINT ["/init"]
|
||||
|
||||
Reference in New Issue
Block a user