FROM node:22-alpine AS base RUN corepack enable # --- Dependencies --- FROM base AS deps WORKDIR /app COPY package.json yarn.lock .yarnrc.yml tsconfig.base.json ./ COPY packages/shared/package.json packages/shared/ COPY packages/agent/package.json packages/agent/ COPY packages/proxy/package.json packages/proxy/ COPY packages/proxy/web/package.json packages/proxy/web/ RUN yarn install --immutable # --- Build shared --- FROM deps AS build-shared WORKDIR /app COPY packages/shared packages/shared RUN yarn workspace @sleepguard/shared build # --- Build web --- FROM build-shared AS build-web WORKDIR /app COPY packages/proxy/web packages/proxy/web RUN yarn workspace @sleepguard/web build # --- Build proxy --- FROM build-shared AS build-proxy WORKDIR /app COPY packages/proxy/tsconfig.json packages/proxy/ COPY packages/proxy/src packages/proxy/src RUN yarn workspace @sleepguard/proxy build # --- Production --- FROM base AS production WORKDIR /app COPY package.json yarn.lock .yarnrc.yml ./ COPY packages/shared/package.json packages/shared/ COPY packages/agent/package.json packages/agent/ COPY packages/proxy/package.json packages/proxy/ COPY packages/proxy/web/package.json packages/proxy/web/ RUN yarn workspaces focus @sleepguard/proxy --production COPY --from=build-shared /app/packages/shared/dist packages/shared/dist COPY --from=build-proxy /app/packages/proxy/dist packages/proxy/dist COPY --from=build-web /app/packages/proxy/web/build packages/proxy/public/dashboard WORKDIR /app/packages/proxy RUN mkdir -p /app/data EXPOSE 47391 CMD ["node", "dist/index.js"]