Browse Source

:construction_worker: use GitHub actions to build docker image

JustSong 3 years ago
parent
commit
a05c8b807f
3 changed files with 70 additions and 0 deletions
  1. 7 0
      .dockerignore
  2. 50 0
      .github/workflows/docker-image.yml
  3. 13 0
      Dockerfile

+ 7 - 0
.dockerignore

@@ -0,0 +1,7 @@
+.idea
+node_modules
+.env
+data.db-journal
+.vscode
+*.db
+*.*~

+ 50 - 0
.github/workflows/docker-image.yml

@@ -0,0 +1,50 @@
+name: Publish Docker image
+
+on:
+  push:
+    tags:
+      - '*'
+  workflow_dispatch:
+    inputs:
+      name:
+        description: 'reason'
+        required: false
+jobs:
+  push_to_registries:
+    name: Push Docker image to multiple registries
+    runs-on: ubuntu-latest
+    permissions:
+      packages: write
+      contents: read
+    steps:
+      - name: Check out the repo
+        uses: actions/checkout@v3
+
+      - name: Log in to Docker Hub
+        uses: docker/login-action@v2
+        with:
+          username: ${{ secrets.DOCKERHUB_USERNAME }}
+          password: ${{ secrets.DOCKERHUB_TOKEN }}
+
+      - name: Log in to the Container registry
+        uses: docker/login-action@v2
+        with:
+          registry: ghcr.io
+          username: ${{ github.actor }}
+          password: ${{ secrets.GITHUB_TOKEN }}
+
+      - name: Extract metadata (tags, labels) for Docker
+        id: meta
+        uses: docker/metadata-action@v4
+        with:
+          images: |
+            justsong/message-pusher
+            ghcr.io/${{ github.repository }}
+
+      - name: Build and push Docker images
+        uses: docker/build-push-action@v3
+        with:
+          context: .
+          push: true
+          tags: ${{ steps.meta.outputs.tags }}
+          labels: ${{ steps.meta.outputs.labels }}

+ 13 - 0
Dockerfile

@@ -0,0 +1,13 @@
+FROM node:16 as builder
+
+WORKDIR /build
+COPY . .
+RUN npm install
+
+FROM node:16-alpine
+WORKDIR /build
+COPY --from=builder /build /build
+RUN npm install [email protected]  # https://github.com/TryGhost/node-sqlite3/issues/1581
+RUN npm install pm2 -g
+EXPOSE 3000
+CMD ["pm2-runtime", "app.js"]