Browse Source

Add build stage and remove `linux/arm/v7`

Mohamed Elashri 1 year ago
parent
commit
a0f46c326a
2 changed files with 35 additions and 17 deletions
  1. 1 1
      .github/workflows/docker-image.yaml
  2. 34 16
      Dockerfile

+ 1 - 1
.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 }}

+ 34 - 16
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"]