move everything to a dockerfile instead of complicated system lol

This commit is contained in:
Grant 2024-04-02 16:52:39 -06:00
parent ea4b462a5f
commit cd62fc4f67
6 changed files with 107 additions and 5 deletions

11
.dockerignore Normal file
View File

@ -0,0 +1,11 @@
**/node_modules
build
data
**/dist
packages/build
Dockerfile
# dotfiles
.git*
.vscode
**/.env*

2
.gitignore vendored
View File

@ -18,5 +18,7 @@ node_modules/
*.tsbuildinfo *.tsbuildinfo
.eslintcache .eslintcache
# only ignore .env in root because Vite requires some things (check packages/admin)
/.env
.env.local .env.local
dist dist

80
Dockerfile Normal file
View File

@ -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" ]

View File

@ -2,9 +2,7 @@
## Running via Docker Compose ## Running via Docker Compose
1. Run `npm run build:all` 1. Run `docker compose build`
2. Run `npm run build:docker` 2. (optional) Load default palette colors
3. Run `docker compose run --rm canvas npx prisma migrate deploy`
4. (optional) Load default palette colors
Run `docker compose run --rm canvas npm run -w packages/server prisma:seed:palette` 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`

View File

@ -6,12 +6,16 @@ name: canvas
services: services:
canvas: canvas:
image: sc07/canvas image: sc07/canvas
build: .
ports: ports:
- "3000:3000" - "3000:3000"
environment: environment:
- SESSION_SECRET=CHANGE ME TO RANDOM VALUE - SESSION_SECRET=CHANGE ME TO RANDOM VALUE
- REDIS_HOST=redis://redis - REDIS_HOST=redis://redis
- DATABASE_URL=postgres://postgres@postgres/canvas - DATABASE_URL=postgres://postgres@postgres/canvas
- AUTH_ENDPOINT=https://auth.fediverse.events
- AUTH_CLIENT=canvas
- AUTH_SECRET=${AUTH_SECRET}
depends_on: depends_on:
- redis - redis
- postgres - postgres

7
docker-start.sh Executable file
View File

@ -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