diff --git a/.docker/server/Dockerfile b/.docker/server/Dockerfile new file mode 100644 index 00000000..a2655ac0 --- /dev/null +++ b/.docker/server/Dockerfile @@ -0,0 +1,32 @@ +FROM node:20 AS build + +RUN mkdir -p /var/www/otlplus-server && \ + mkdir -p /var/www/otlplus-server/libs && \ + mkdir -p /var/www/otlplus-server/apps && \ + mkdir -p /var/www/otlplus-server/apps/server/logs + +WORKDIR /var/www/otlplus-server + +COPY package.json yarn.lock* package-lock.json* tsconfig.json tsconfig.build.json nest-cli.json ./ + +RUN yarn --production + +COPY ./apps/server ./apps/scholar-sync ./apps/server-consumer ./apps/notification-consumer ./apps/ +COPY ./libs/common ./libs/prisma-client ./libs/rmq ./libs/ + +RUN yarn client:generate +RUN yarn generate:server:api-docs && \ + yarn build:server + +FROM node:20-slim AS server +RUN apt-get update -y && apt-get install -y openssl + +COPY --from=build /var/www/otlplus-server/dist/apps/server /var/www/otlplus-server/dist/apps/server +COPY --from=build /var/www/otlplus-server/apps/server/static /var/www/otlplus-server/apps/server/static +COPY --from=build /var/www/otlplus-server/node_modules /var/www/otlplus-server/node_modules + +WORKDIR /var/www/otlplus-server + +EXPOSE 8000 + +CMD ["node", "./dist/apps/server/apps/server/src/bootstrap/bootstrap.js"] diff --git a/.github/workflows/cd-ghcr.yaml b/.github/workflows/cd-ghcr.yaml new file mode 100644 index 00000000..40ac9aa2 --- /dev/null +++ b/.github/workflows/cd-ghcr.yaml @@ -0,0 +1,46 @@ +name: Release container image to ghcr.io + +on: + push: + tags: ["v*.*"] + +env: + REGISTRY: ghcr.io + IMAGE_NAME: ${{ github.repository }} + +jobs: + build: + runs-on: ubuntu-latest + + permissions: + contents: read + packages: write + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Log in to Container registry + uses: docker/login-action@v2 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Get metadata + id: metadata + uses: docker/metadata-action@v5 + with: + images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} + + - name: Build and push Docker image + uses: docker/build-push-action@v2 + with: + context: . + file: ./.docker/server/Dockerfile + push: true + tags: ${{ steps.metadata.outputs.tags }} + labels: ${{ steps.metadata.outputs.labels }} + build-args: | + NODE_ENV=prod + DOCKER_DEPLOY=true