deploy/Dockerfile.app
Rama main · réplica de lectura del repositorio original.
FROM golang:1.27.3-alpine@sha256:b8c9b82affbbb82a020bbcf998dad2ba9516944ac7e883524642a481a9505e9c AS agent-builder
WORKDIR /repo
COPY go.work ./
COPY agent/go.mod ./agent/go.mod
COPY agent ./agent
COPY app/package.json ./app/package.json
RUN VERSION="$(sed -n 's/.*\"version\": \"\([^\"]*\)\".*/\1/p' app/package.json)" && test -n "$VERSION" && CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -trimpath -buildvcs=false -ldflags "-s -w -buildid= -X github.com/devpush/devpush/agent/internal/agent.Version=${VERSION}" -o /out/devpush-agent-linux-amd64 ./agent/cmd/devpush-agent
RUN VERSION="$(sed -n 's/.*\"version\": \"\([^\"]*\)\".*/\1/p' app/package.json)" && test -n "$VERSION" && CGO_ENABLED=0 GOOS=linux GOARCH=arm64 go build -trimpath -buildvcs=false -ldflags "-s -w -buildid= -X github.com/devpush/devpush/agent/internal/agent.Version=${VERSION}" -o /out/devpush-agent-linux-arm64 ./agent/cmd/devpush-agent
FROM node:22-alpine@sha256:fe4f6d74e20370acb04ad889077d14d0f64a9c8ea6a42bc60cddf1e844699914 AS app-builder
WORKDIR /repo
ARG VITE_DEVPUSH_BACKUPS_ENABLED=false
ENV VITE_DEVPUSH_BACKUPS_ENABLED=$VITE_DEVPUSH_BACKUPS_ENABLED
RUN apk add --no-cache python3 make g++
RUN corepack enable
COPY package.json pnpm-lock.yaml pnpm-workspace.yaml ./
COPY app/package.json ./app/package.json
RUN pnpm install --frozen-lockfile
COPY app ./app
RUN pnpm --dir app build
RUN cd app && pnpm exec esbuild scripts/migrate.ts \
--bundle \
--external:better-sqlite3 \
--platform=node \
--format=esm \
--target=node22 \
--sourcemap=linked \
--sources-content=false \
--banner:js="import { createRequire } from 'node:module'; const require = createRequire(import.meta.url);" \
--outfile=.maintenance/migrate.mjs
FROM node:22-alpine@sha256:fe4f6d74e20370acb04ad889077d14d0f64a9c8ea6a42bc60cddf1e844699914
# Runtime needs Node, not package-manager CLIs and their dependency trees.
RUN apk add --no-cache curl \
&& rm -rf /usr/local/lib/node_modules/npm /usr/local/lib/node_modules/corepack \
/opt/yarn* /usr/local/bin/npm /usr/local/bin/npx /usr/local/bin/corepack \
/usr/local/bin/yarn /usr/local/bin/yarnpkg
WORKDIR /repo/app
ENV NODE_ENV=production
ENV HOST=0.0.0.0
ENV PORT=3000
ENV DEVPUSH_AGENT_BINARY_DIR=/repo/bin
COPY --from=app-builder /repo/app/.output ./.output
COPY --from=app-builder /repo/app/.maintenance ./.maintenance
COPY --from=app-builder /repo/app/src/server/db/migrations-sqlite ./src/server/db/migrations-sqlite
COPY --from=app-builder /repo/app/src/server/db/migrations-logs ./src/server/db/migrations-logs
COPY app/scripts/backup-sqlite.mjs ./.maintenance/backup-sqlite.mjs
RUN ln -s .output/server/node_modules node_modules
COPY --from=agent-builder /out/devpush-agent-linux-amd64 /repo/bin/devpush-agent-linux-amd64
COPY --from=agent-builder /out/devpush-agent-linux-arm64 /repo/bin/devpush-agent-linux-arm64
RUN mkdir -p /app/storage /backups /repo/app/public/uploads \
&& chown node:node /app/storage /backups /repo/app/public/uploads
USER node
EXPOSE 3000
CMD ["node", ".output/server/index.mjs"]