Commit a9b7ed01 authored by Grant's avatar Grant
Browse files

update dependencies & add dev instructions

parent cbc36325
Loading
Loading
Loading
Loading
+22 −10
Original line number Diff line number Diff line
**/node_modules
build
data
**/dist
packages/build
.git
.gitignore
node_modules
backend/node_modules
frontend/node_modules

backend/dist
frontend/dist

.env
.env.*
!.env.example

Dockerfile
secrets
docker-compose*.yml

coverage
.cache
.tmp
.DS_Store
npm-debug.log*
yarn-error.log*

# dotfiles
.git*
.vscode
**/.env*
 No newline at end of file
scripts
 No newline at end of file
+52 −43
Original line number Diff line number Diff line
# syntax=docker/dockerfile:1.7

FROM node:24-alpine AS base

RUN apk add --no-cache openssl

RUN mkdir -p /home/node/app/node_modules && chown -R node:node /home/node/app
WORKDIR /home/node/app

# --- dependencies ---
RUN mkdir -p /home/node/app \
  && chown -R node:node /home/node/app

COPY --chown=node:node .yarn ./.yarn
COPY --chown=node:node package.json yarn.lock .yarnrc.yml ./
COPY --chown=node:node backend/package.json ./backend/
COPY --chown=node:node frontend/package.json ./frontend/
RUN corepack enable && corepack prepare
COPY --chown=node:node backend/package.json ./backend/package.json
COPY --chown=node:node frontend/package.json ./frontend/package.json

RUN corepack enable

USER node

FROM base AS dev_dep
RUN yarn workspaces focus --all
ENV YARN_CACHE_FOLDER=/home/node/.yarn-cache

FROM base AS dep
RUN yarn workspaces focus --production --all
FROM base AS dev-deps

#
# === BUILDER ===
#
RUN --mount=type=cache,target=/home/node/.yarn-cache,uid=1000,gid=1000 \
  yarn workspaces focus --all

FROM dev_dep AS build

COPY --from=dev_dep /home/node/app/ ./
FROM base AS prod-deps

COPY --chown=node:node . .
RUN --mount=type=cache,target=/home/node/.yarn-cache,uid=1000,gid=1000 \
  yarn workspaces focus --all --production

# --- build frontend ---

RUN yarn workspace @fediverse-auth/frontend run build
FROM dev-deps AS build

# --- build backend ---
COPY --chown=node:node . .

RUN yarn workspace @fediverse-auth/frontend run build \
  && yarn workspace @fediverse-auth/backend prisma generate \
  && yarn workspace @fediverse-auth/backend run build

RUN yarn workspace @fediverse-auth/backend prisma generate
RUN yarn workspace @fediverse-auth/backend run build

#
# === RUNNER ===
#
FROM node:24-alpine AS run

RUN apk add --no-cache openssl

FROM base AS run
COPY --from=dep /home/node/app/ ./
COPY docker-start.sh ./
WORKDIR /home/node/app

# --- prepare frontend ---
ENV PORT=3000
ENV NODE_ENV=production
ENV SERVE_FRONTEND=/home/node/app/frontend

RUN mkdir -p frontend
COPY --from=build /home/node/app/frontend/dist ./frontend/
RUN mkdir -p /home/node/app \
  && chown -R node:node /home/node/app

# --- prepare server ---
USER node

RUN mkdir -p backend
COPY --from=build /home/node/app/backend/package.json ./backend/
COPY --from=build /home/node/app/backend/prisma ./backend/prisma
COPY --from=build /home/node/app/backend/dist ./backend/dist
# Production dependencies only.
COPY --chown=node:node --from=prod-deps /home/node/app/package.json ./package.json
COPY --chown=node:node --from=prod-deps /home/node/app/yarn.lock ./yarn.lock
COPY --chown=node:node --from=prod-deps /home/node/app/.yarnrc.yml ./.yarnrc.yml
COPY --chown=node:node --from=prod-deps /home/node/app/.yarn ./.yarn
COPY --chown=node:node --from=prod-deps /home/node/app/node_modules ./node_modules
COPY --chown=node:node --from=prod-deps /home/node/app/backend/package.json ./backend/package.json
COPY --chown=node:node --from=prod-deps /home/node/app/frontend/package.json ./frontend/package.json

# --- finalize ---
# Built frontend.
COPY --chown=node:node --from=build /home/node/app/frontend/dist ./frontend

COPY --from=build /home/node/app/node_modules/.prisma ./node_modules/.prisma
COPY --from=build /home/node/app/node_modules/@prisma ./node_modules/@prisma
# Built backend.
COPY --chown=node:node --from=build /home/node/app/backend/dist ./backend/dist
COPY --chown=node:node --from=build /home/node/app/backend/prisma ./backend/prisma

# set runtime env variables
# Prisma generated client from the build stage.
COPY --chown=node:node --from=build /home/node/app/node_modules/.prisma ./node_modules/.prisma
COPY --chown=node:node --from=build /home/node/app/node_modules/@prisma ./node_modules/@prisma

ENV PORT=3000
ENV NODE_ENV=production
ENV SERVE_FRONTEND=/home/node/app/frontend
COPY --chown=node:node docker-start.sh ./docker-start.sh

EXPOSE 3000
ENTRYPOINT [ "/bin/sh" ]
CMD [ "./docker-start.sh" ]
 No newline at end of file

ENTRYPOINT ["/bin/sh", "./docker-start.sh"]
 No newline at end of file
+15 −0
Original line number Diff line number Diff line
@@ -3,3 +3,18 @@
Providing a central OpenID Connect service for Fediverse identification

Leverages OpenID Connect Auto Discovery & Dynamic Client Registration

## Development Environment

- frontend: copy `frontend/example.env` to `frontend/.env`
- backend: copy `backend/example.env` to `backend/.env`
- backend: run `yarn workspace @fediverse-auth/backend prisma migrate dev`
- `yarn start frontend:dev`
- `yarn start backend:dev`

## Deployment

- copy `example.env.local` to `.env.local` (and configure)
- create `secrets/cookies.json` and put a random string in an array (eg `["super secret string do not share me or use this"]`)
- `yarn script:setup-jwks`
- `docker compose up -d --build`
+24 −24
Original line number Diff line number Diff line
@@ -6,38 +6,38 @@
  "private": true,
  "type": "module",
  "dependencies": {
    "@fedify/express": "^0.2.0",
    "@fedify/express": "^0.2.1",
    "@fedify/fedify": "patch:@fedify/fedify@npm%3A1.10.0#~/.yarn/patches/@fedify-fedify-npm-1.10.0-eb96e7364a.patch",
    "@fedify/redis": "^1.9.1",
    "@fedify/redis": "^1.10.10",
    "@js-temporal/polyfill": "^0.5.1",
    "@logtape/logtape": "^0.9.1",
    "@prisma/client": "^5.13.0",
    "@sc07/fedi-testkit": "^1.0.3",
    "@tsconfig/recommended": "^1.0.6",
    "body-parser": "^1.20.2",
    "cookie-parser": "^1.4.6",
    "cors": "^2.8.5",
    "cron": "^4.3.0",
    "express": "^4.22.1",
    "express-session": "^1.18.0",
    "ioredis": "^5.6.1",
    "@logtape/logtape": "^0.9.2",
    "@prisma/client": "^5.22.0",
    "@sc07/fedi-testkit": "^1.0.4",
    "@tsconfig/recommended": "^1.0.13",
    "body-parser": "^1.20.5",
    "cookie-parser": "^1.4.7",
    "cors": "^2.8.6",
    "cron": "^4.4.0",
    "express": "^4.22.2",
    "express-session": "^1.19.0",
    "ioredis": "^5.11.0",
    "oidc-provider": "^8.8.1",
    "openid-client": "^5.6.5",
    "string-strip-html": "^13.4.12"
    "openid-client": "^5.7.1",
    "string-strip-html": "^13.5.3"
  },
  "devDependencies": {
    "@hongminhee/localtunnel": "^0.3.0",
    "@types/cookie-parser": "^1.4.7",
    "@types/cors": "^2.8.17",
    "@types/cookie-parser": "^1.4.10",
    "@types/cors": "^2.8.19",
    "@types/express": "^4.17.25",
    "@types/express-session": "^1.18.2",
    "@types/node": "^20.12.10",
    "@types/oidc-provider": "^8.4.4",
    "dotenv": "^16.4.5",
    "prisma": "^5.13.0",
    "tsx": "^4.9.3",
    "@types/express-session": "^1.19.0",
    "@types/node": "^20.19.41",
    "@types/oidc-provider": "^8.8.1",
    "dotenv": "^16.6.1",
    "prisma": "^5.22.0",
    "tsx": "^4.22.4",
    "typescript": "^5.9.3",
    "vitest": "^4.0.15"
    "vitest": "^4.1.8"
  },
  "scripts": {
    "dev": "tsx watch -r dotenv/config src/index.ts",
+1 −1
Original line number Diff line number Diff line
services:
  fedi-auth:
  app:
    image: sc07/fediverse-auth
    build: .
    ports:
Loading