mirror of
https://github.com/wasp-lang/wasp.git
synced 2024-12-26 10:35:04 +03:00
64 lines
2.7 KiB
Docker
64 lines
2.7 KiB
Docker
# NOTE: Why do we specify alpine version here?
|
|
# Because if not, we had situations where it would use the different version
|
|
# locally and on Github CI. This way we ensure exact version is used,
|
|
# and also have control over updating it (instead of update surprising us).
|
|
FROM node:18 AS node
|
|
|
|
|
|
# We split Dockerfile into base, server-builder and server-production.
|
|
# This way we have separate situations -> in server-builder we build all
|
|
# we need to run the server, and then in server-production we start fresh
|
|
# and just copy what we need from server-builder, avoiding intermediate
|
|
# artifacts and any settings / pollution we don't need in production
|
|
# but only for building.
|
|
|
|
|
|
FROM node AS base
|
|
RUN apt update && apt upgrade -y # To ensure any potential security patches are applied.
|
|
|
|
|
|
# Todo: The 'server-builder' image stays on disk under <none>:<none> and is
|
|
# relatively large (~900 MB), should we remove it? Or is it useful for future
|
|
# builds?
|
|
FROM base AS server-builder
|
|
WORKDIR /app
|
|
# Since the framwork code in /.wasp/build/server imports the user code in /src
|
|
# using relative imports, we must mirror the same directory structure in the
|
|
# Docker image.
|
|
COPY src ./src
|
|
COPY package.json .
|
|
COPY package-lock.json .
|
|
COPY server .wasp/build/server
|
|
COPY sdk .wasp/out/sdk
|
|
# Install npm packages, resulting in node_modules/.
|
|
RUN npm install && cd .wasp/build/server && npm install
|
|
COPY db/schema.prisma .wasp/build/db/
|
|
RUN cd .wasp/build/server && npx prisma generate --schema='../db/schema.prisma'
|
|
# Building the server should come after Prisma generation.
|
|
RUN cd .wasp/build/server && npm run bundle
|
|
|
|
|
|
# TODO: Use pm2?
|
|
# TODO: Use non-root user (node).
|
|
FROM base AS server-production
|
|
RUN curl -sSL https://get.wasp-lang.dev/installer.sh | sh -s -- -v 0.14.2
|
|
ENV PATH "$PATH:/root/.local/bin"
|
|
ENV NODE_ENV production
|
|
WORKDIR /app
|
|
# Copying the top level 'node_modules' because it contains the Prisma packages
|
|
# necessary for migrating the database.
|
|
COPY --from=server-builder /app/node_modules ./node_modules
|
|
# Copying the SDK because 'validate-env.mjs' executes independent of the bundle
|
|
# and references the 'wasp' package.
|
|
COPY --from=server-builder /app/.wasp/out/sdk .wasp/out/sdk
|
|
# Copying 'server/node_modules' because 'validate-env.mjs' executes independent
|
|
# of the bundle and references the dotenv package.
|
|
COPY --from=server-builder /app/.wasp/build/server/node_modules .wasp/build/server/node_modules
|
|
COPY --from=server-builder /app/.wasp/build/server/bundle .wasp/build/server/bundle
|
|
COPY --from=server-builder /app/.wasp/build/server/package*.json .wasp/build/server/
|
|
COPY --from=server-builder /app/.wasp/build/server/scripts .wasp/build/server/scripts
|
|
COPY db/ .wasp/build/db/
|
|
EXPOSE ${PORT}
|
|
WORKDIR /app/.wasp/build/server
|
|
ENTRYPOINT ["npm", "run", "start-production"]
|