diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml new file mode 100644 index 0000000..4638716 --- /dev/null +++ b/.github/workflows/docker.yml @@ -0,0 +1,45 @@ +name: Docker + +on: + push: + branches: [ main ] + pull_request: + branches: [ main ] + +env: + TEST_TAG: call-fabric-client-beta + +jobs: + build-and-test-image: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Set up QEMU + uses: docker/setup-qemu-action@v3 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Build and push + uses: docker/build-push-action@v5 + with: + push: false + load: true + tags: ${{ env.TEST_TAG }} + cache-from: type=gha + cache-to: type=gha,mode=max + + - name: Inspect + run: | + docker image inspect ${{ env.TEST_TAG }} + + - name: Start + run: | + docker run -d --rm --name=call-fabric-client-beta ${{ env.TEST_TAG }} + + - name: Logs + run: | + docker ps + docker logs call-fabric-client-beta diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..9a7fd5e --- /dev/null +++ b/Dockerfile @@ -0,0 +1,26 @@ +# syntax=docker/dockerfile:1 + +ARG NODE_VERSION=20.10.0 + +FROM node:${NODE_VERSION}-alpine + +ENV NODE_ENV production + +WORKDIR /usr/src/app + +# Download dependencies as a separate step to take advantage of Docker's caching. +# Leverage a cache mount to /root/.npm to speed up subsequent builds. +# Leverage a bind mounts to package.json and package-lock.json to avoid having to copy them into +# into this layer. +RUN --mount=type=bind,source=package.json,target=package.json \ + --mount=type=bind,source=package-lock.json,target=package-lock.json \ + --mount=type=cache,target=/root/.npm \ + npm ci --omit=dev + +USER node + +COPY . . + +EXPOSE 3000 + +CMD npm run start diff --git a/compose.yaml b/compose.yaml new file mode 100644 index 0000000..e7990ca --- /dev/null +++ b/compose.yaml @@ -0,0 +1,8 @@ +services: + server: + build: + context: . + environment: + NODE_ENV: production + ports: + - 3000:3000