Przeglądaj źródła

Merge pull request #227 from MohamedElashri/main

Add requirements for multi-platform docker build to the CI
Eric Dubé 1 rok temu
rodzic
commit
497c633b8a
2 zmienionych plików z 39 dodań i 11 usunięć
  1. 7 0
      .github/workflows/docker-image.yaml
  2. 32 11
      Dockerfile

+ 7 - 0
.github/workflows/docker-image.yaml

@@ -40,6 +40,12 @@ jobs:
           registry: ${{ env.REGISTRY }}
           username: ${{ github.actor }}
           password: ${{ secrets.GITHUB_TOKEN }}
+          
+      - name: Set up QEMU 
+        uses: docker/setup-qemu-action@v3
+
+      - name: Set up Docker Buildx
+        uses: docker/setup-buildx-action@v2
 
       # This step uses [docker/metadata-action](https://github.com/docker/metadata-action#about)
       # to extract tags and labels that will be applied to the specified image.
@@ -73,6 +79,7 @@ jobs:
       - name: Build and push Docker image
         uses: docker/build-push-action@v5
         with:
+          platforms: linux/amd64,linux/arm64
           context: .
           push: true
           tags: ${{ steps.meta.outputs.tags }}

+ 32 - 11
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
@@ -8,25 +32,22 @@ LABEL version="1.2.46-beta-1"
 # Install git (required by Puter to check version)
 RUN apk add --no-cache git
 
-# Setup working directory
+# 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"]