| FROM node:20-slim AS builder | |
| USER root | |
| RUN apt-get update && apt-get install -y git && rm -rf /var/lib/apt/lists/* | |
| WORKDIR /app | |
| RUN git clone https://github.com/CorentinTh/enclosed | |
| WORKDIR /app/enclosed | |
| RUN npm install -g pnpm --ignore-scripts && \ | |
| pnpm install --frozen-lockfile --ignore-scripts | |
| RUN pnpm --filter @enclosed/crypto run build && \ | |
| pnpm --filter @enclosed/lib run build && \ | |
| pnpm --filter @enclosed/app-client run build && \ | |
| pnpm --filter @enclosed/app-server run build:node | |
| FROM node:20-slim | |
| RUN apt-get update && apt-get install -y \ | |
| git \ | |
| git-lfs \ | |
| bash \ | |
| curl \ | |
| wget \ | |
| procps && rm -rf /var/lib/apt/lists/* | |
| WORKDIR /app | |
| RUN chown -R 1000 /app | |
| COPY --chown=1000 sync-notes.js ./ | |
| COPY --chown=1000 ecosystem.config.js ./ | |
| RUN npm install -g pm2 && \ | |
| npm install node-cron | |
| COPY --from=builder /app/enclosed/packages/app-client/dist ./public | |
| COPY --from=builder /app/enclosed/packages/app-server/dist-node/index.cjs ./index.cjs | |
| RUN RUN --mount=type=secret,id=DATA_REPO,mode=0444,required=true \ | |
| git clone $(cat /run/secrets/DATA_REPO) ./.data | |
| WORKDIR /app/.data | |
| RUN RUN --mount=type=secret,id=GIT_USERNAME,mode=0444,required=true \ | |
| git config user.name $(cat /run/secrets/GIT_USERNAME) | |
| RUN RUN --mount=type=secret,id=GIT_EMAIL,mode=0444,required=true \ | |
| git config user.email $(cat /run/secrets/GIT_EMAIL) | |
| WORKDIR /app | |
| RUN chown -R 1000 /app/.data | |
| RUN chmod 777 /app/.data | |
| USER 1000 | |
| EXPOSE 8787 | |
| CMD ["/bin/sh", "-c", "cd .data; git pull; cd ..; pm2-runtime ecosystem.config.js"] |