* feat(docker): build and use client and api images
* feat: always use .env
dotenv fails without throwing if the .env file is missing and never
overwrites variables if they already exist. As such, we can use it in
build pipelines.
* fix: remove quotes from env vars
dotenv normalises quoted and unquoted strings (X=x, X='x' and
X="x") all become the same .env object {X: 'x'}. However, Docker's
env_file does not (the three cases are distinct). As a result, we
should use unquoted strings for consistency.
* fix: provide custom warning when .env is missing
* feat(docker): include client-config
* fix(docker): remove build packages from api image
* fix(docker): run script from correct dir
* fix(docker): correct permissions and dests
* fix(docker): consolidate run steps
This is standard practice, but did not have a noticable affect on the
image size
* fix(docker): clean the npm cache
Prior to this step the image was 1.11GB uncompressed and we got a modest
saving, 1.09GB after.
* refactor(docker): regexless COPY directives
* feat(docker): use alpine
This shrinks the image down to 259MB
* fix(docker): update build scripts
* fix: correct the server Dockerfile RUNs
* DEBUG: expose mysql port for seeding
* chore: update client Dockerfile's node versions
* fix: remove executable permissions from index.js
It's not a cli, so I don't think it needs to be executable.
* chore: update node and remove stale comments
* feat: use ENTRYPOINT + CMD to allow runtime config
* fix: add CURRICULUM_LOCALE arg
* feat: allow client port configuration
* feat: allow api port to be configured
* refactor: use unique variable names for ports
* fix: add default CLIENT_PORT
* refactor: clean up
29 lines
928 B
Docker
29 lines
928 B
Docker
FROM node:14.16.1-alpine as builder
|
|
USER node
|
|
WORKDIR /home/node/build
|
|
COPY --chown=node:node . .
|
|
|
|
RUN npm ci
|
|
RUN npm run build:curriculum
|
|
RUN npm run build:server
|
|
|
|
FROM node:14.16.1-alpine
|
|
USER node
|
|
WORKDIR /home/node/api
|
|
# get and install deps
|
|
COPY --from=builder --chown=node:node /home/node/build/package.json /home/node/build/package-lock.json ./
|
|
COPY --from=builder --chown=node:node /home/node/build/api-server/package.json /home/node/build/api-server/package-lock.json api-server/
|
|
RUN npm ci --production --ignore-scripts \
|
|
&& cd api-server \
|
|
&& npm ci --production \
|
|
&& npm cache clean --force
|
|
COPY --from=builder --chown=node:node /home/node/build/api-server/lib/ api-server/lib/
|
|
COPY --from=builder --chown=node:node /home/node/build/utils/ utils/
|
|
COPY --from=builder --chown=node:node /home/node/build/config/ config/
|
|
|
|
WORKDIR /home/node/api/api-server
|
|
|
|
CMD ["npm", "start"]
|
|
|
|
# TODO: don't copy mocks/fixtures
|