From a0f46c326a6d8b35aaaa3ef8af7e28cd3976dcd2 Mon Sep 17 00:00:00 2001 From: Mohamed Elashri Date: Mon, 8 Apr 2024 17:12:26 +0200 Subject: [PATCH] Add build stage and remove `linux/arm/v7` --- .github/workflows/docker-image.yaml | 2 +- Dockerfile | 50 ++++++++++++++++++++--------- 2 files changed, 35 insertions(+), 17 deletions(-) diff --git a/.github/workflows/docker-image.yaml b/.github/workflows/docker-image.yaml index 987499e4..b7aad361 100644 --- a/.github/workflows/docker-image.yaml +++ b/.github/workflows/docker-image.yaml @@ -79,7 +79,7 @@ jobs: - name: Build and push Docker image uses: docker/build-push-action@v5 with: - platforms: linux/amd64,linux/arm64, linux/arm/v7 + platforms: linux/amd64,linux/arm64 context: . push: true tags: ${{ steps.meta.outputs.tags }} diff --git a/Dockerfile b/Dockerfile index 5a5241cf..6bbb5dc9 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,3 +1,27 @@ +# Build stage +FROM node:21-alpine AS build + +# Install build dependencies +RUN apk add --no-cache git python3 make g++ \ + && ln -sf /usr/bin/python3 /usr/bin/python + +# Set up working directory +WORKDIR /app + +# Copy package.json and package-lock.json +COPY package*.json ./ + +# Install node modules +RUN npm cache clean --force \ + && npm ci + +# Copy the rest of the source files +COPY . . + +# Run the build command if necessary +RUN npm run build + +# Production stage FROM node:21-alpine # Set labels @@ -6,30 +30,24 @@ LABEL license="AGPL-3.0,https://github.com/HeyPuter/puter/blob/master/LICENSE.tx LABEL version="1.2.46-beta-1" # Install git (required by Puter to check version) -# python3 would be required by node-gyp to natively build node addon -# This is required if we build for multi-platform -RUN apk add --no-cache git python3 make g++ \ - && ln -sf /usr/bin/python3 /usr/bin/python - -# Setup working directory +RUN apk add --no-cache git + +# Set up working directory RUN mkdir -p /opt/puter/app WORKDIR /opt/puter/app -# Add source files -# NOTE: This might change (https://github.com/HeyPuter/puter/discussions/32) -COPY . . +# Copy built artifacts and necessary files from the build stage +COPY --from=build /app/dist ./dist +COPY --from=build /app/node_modules ./node_modules +COPY package*.json ./ # Set permissions RUN chown -R node:node /opt/puter/app USER node -# Install node modules -RUN npm cache clean --force \ - && npm install - EXPOSE 4100 -HEALTHCHECK --interval=30s --timeout=3s \ - CMD wget --no-verbose --tries=1 --spider http://puter.localhost:4100/test || exit 1 +HEALTHCHECK --interval=30s --timeout=3s \ + CMD wget --no-verbose --tries=1 --spider http://puter.localhost:4100/test || exit 1 -CMD [ "npm", "start" ] +CMD ["npm", "start"] \ No newline at end of file