44 lines
1.2 KiB
Docker
44 lines
1.2 KiB
Docker
## Stage 1: Builder
|
|
FROM node:16.15-slim as builder
|
|
|
|
## Set workdir
|
|
WORKDIR /backend
|
|
|
|
## Install node dependencies
|
|
COPY package* ./
|
|
COPY prisma .
|
|
RUN apt-get update && apt-get install -y openssl
|
|
RUN npm install pm2 && npm ci
|
|
RUN npx prisma generate
|
|
|
|
## Build app
|
|
COPY package.json package.json
|
|
COPY src src
|
|
COPY prisma prisma
|
|
COPY local-config.mjs local-config.mjs
|
|
COPY build.mjs build.mjs
|
|
RUN npm run build
|
|
|
|
## Stage 2: App
|
|
FROM node:16.15-slim as app
|
|
|
|
## Set workdir
|
|
WORKDIR /backend
|
|
|
|
## Copy built node modules and binaries without including the toolchain
|
|
COPY --from=builder /backend/node_modules/ /backend/node_modules/
|
|
COPY --from=builder /backend/dist/ /backend/dist/
|
|
COPY --from=builder /backend/package.json /backend/package.json
|
|
COPY --from=builder /backend/prisma /backend
|
|
COPY --from=builder /backend/prisma/schema.sqlite /backend/db.sqlite
|
|
COPY --from=builder /backend/local-config.mjs /backend/
|
|
RUN mkdir -p /backend/src/landing
|
|
COPY --from=builder /backend/src/landing/* /backend/src/landing/
|
|
|
|
## Add a user to run the app
|
|
RUN useradd --home-dir /backend --comment FreeSewing --no-create-home --uid 2000 freesewing
|
|
RUN chown -R freesewing /backend
|
|
|
|
## Drop privleges and run app
|
|
USER freesewing
|
|
CMD ["./node_modules/.bin/pm2-runtime", "./dist/index.mjs"]
|