From cd62fc4f672594aee4b440961782f2701c3f8808 Mon Sep 17 00:00:00 2001 From: Grant Date: Tue, 2 Apr 2024 16:52:39 -0600 Subject: [PATCH] move everything to a dockerfile instead of complicated system lol --- .dockerignore | 11 +++++++ .gitignore | 2 ++ Dockerfile | 80 ++++++++++++++++++++++++++++++++++++++++++++++ README.md | 8 ++--- docker-compose.yml | 4 +++ docker-start.sh | 7 ++++ 6 files changed, 107 insertions(+), 5 deletions(-) create mode 100644 .dockerignore create mode 100644 Dockerfile create mode 100755 docker-start.sh diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..3fb77fb --- /dev/null +++ b/.dockerignore @@ -0,0 +1,11 @@ +**/node_modules +build +data +**/dist +packages/build +Dockerfile + +# dotfiles +.git* +.vscode +**/.env* \ No newline at end of file diff --git a/.gitignore b/.gitignore index a1c99a9..2dc3dd1 100644 --- a/.gitignore +++ b/.gitignore @@ -18,5 +18,7 @@ node_modules/ *.tsbuildinfo .eslintcache +# only ignore .env in root because Vite requires some things (check packages/admin) +/.env .env.local dist \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..b8086d0 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,80 @@ +FROM node:20-alpine AS base + +# +# === BUILDER === +# + +FROM base as build +RUN mkdir -p /home/node/app/node_modules && chown -R node:node /home/node/app +WORKDIR /home/node/app +COPY --chown=node:node . . + +USER node +RUN npm install --include=dev + +# --- build lib --- + +RUN npm -w packages/lib run build +# janky? fix to keep imports in dev +RUN sed -i -e 's/"main": ".*"/"main": ".\/dist\/index.js"/' packages/lib/package.json + +# --- build main client --- + +RUN npm -w packages/client run build + +# --- build admin --- + +RUN npm -w packages/admin run build + +# --- build server --- + +RUN npx -w packages/server prisma generate +RUN npm -w packages/server run build + +# +# === RUNNER === +# + +FROM base as run +WORKDIR /home/node/app +COPY package*.json docker-start.sh ./ + +# --- prepare lib --- + +RUN mkdir -p packages/lib +COPY --from=build /home/node/app/packages/lib/package.json ./packages/lib +COPY --from=build /home/node/app/packages/lib/dist ./packages/lib/dist + +# --- prepare client --- + +RUN mkdir -p packages/client +COPY --from=build /home/node/app/packages/client/dist ./packages/client/ + +# --- prepare admin --- + +RUN mkdir -p packages/admin +COPY --from=build /home/node/app/packages/admin/dist ./packages/admin/ + +# --- prepare server --- + +RUN mkdir -p packages/server +COPY --from=build /home/node/app/packages/server/package.json ./packages/server/ +COPY --from=build /home/node/app/packages/server/prisma ./packages/server/prisma +COPY --from=build /home/node/app/packages/server/tool.sh ./packages/server/ +COPY --from=build /home/node/app/packages/server/dist ./packages/server/dist + +# --- finalize --- + +RUN npm install --omit=dev +RUN npx -w packages/server prisma generate + +# set runtime env variables + +ENV PORT 3000 +ENV NODE_ENV production +ENV SERVE_CLIENT /home/node/app/packages/client +ENV SERVE_ADMIN /home/node/app/packages/admin + +EXPOSE 3000 +ENTRYPOINT [ "/bin/sh" ] +CMD [ "./docker-start.sh" ] \ No newline at end of file diff --git a/README.md b/README.md index c957231..f1e87ad 100644 --- a/README.md +++ b/README.md @@ -2,9 +2,7 @@ ## Running via Docker Compose -1. Run `npm run build:all` -2. Run `npm run build:docker` -3. Run `docker compose run --rm canvas npx prisma migrate deploy` -4. (optional) Load default palette colors +1. Run `docker compose build` +2. (optional) Load default palette colors Run `docker compose run --rm canvas npm run -w packages/server prisma:seed:palette` -5. Run `docker compose up -d` +3. Run `docker compose up -d` diff --git a/docker-compose.yml b/docker-compose.yml index f4cbe3b..0b3f265 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -6,12 +6,16 @@ name: canvas services: canvas: image: sc07/canvas + build: . ports: - "3000:3000" environment: - SESSION_SECRET=CHANGE ME TO RANDOM VALUE - REDIS_HOST=redis://redis - DATABASE_URL=postgres://postgres@postgres/canvas + - AUTH_ENDPOINT=https://auth.fediverse.events + - AUTH_CLIENT=canvas + - AUTH_SECRET=${AUTH_SECRET} depends_on: - redis - postgres diff --git a/docker-start.sh b/docker-start.sh new file mode 100755 index 0000000..c35da96 --- /dev/null +++ b/docker-start.sh @@ -0,0 +1,7 @@ +#!/bin/sh + +# This script runs when the docker image starts +# It just forces all migrations to run and then starts lol + +npx -w packages/server npx prisma migrate deploy +npm -w packages/server run start \ No newline at end of file -- GitLab