diff --git a/.github/workflows/cd.yml b/.github/workflows/cd.yml index b07501e..9c8f01b 100644 --- a/.github/workflows/cd.yml +++ b/.github/workflows/cd.yml @@ -7,8 +7,11 @@ on: - main env: - HEROKU_API_KEY: ${{secrets.HEROKU_API_KEY}} - IMAGE_NAME: registry.heroku.com/${{ secrets.HEROKU_APP_NAME }}/web + IMAGE_NAME: ghcr.io/lemoncode/english-quiz:prod-${{github.sha}}-${{github.run_attempt}} + +permissions: + contents: 'read' + packages: 'write' jobs: cd: @@ -17,18 +20,26 @@ jobs: name: 'Production' url: https://englishquiz.fun steps: - - uses: actions/checkout@v2 - - - name: Install heroku and login - run: | - curl https://cli-assets.heroku.com/install-ubuntu.sh | sh - heroku container:login + - name: Checkout repository + uses: actions/checkout@v3 - - name: Build docker image - run: docker build -t ${{env.IMAGE_NAME}} . + - name: Log in to GitHub container registry + uses: docker/login-action@v2 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} - - name: Deploy docker image - run: docker push ${{env.IMAGE_NAME}} + - name: Build and push docker image + run: | + docker build \ + -t ${{env.IMAGE_NAME}} \ + . + docker push ${{env.IMAGE_NAME}} - - name: Release - run: heroku container:release web -a ${{ secrets.HEROKU_APP_NAME }} + - name: Deploy to Azure + uses: azure/webapps-deploy@v2 + with: + app-name: ${{ secrets.AZURE_APP_NAME }} + publish-profile: ${{ secrets.AZURE_PUBLISH_PROFILE }} + images: ${{env.IMAGE_NAME}} diff --git a/.github/workflows/dev-cd.yml b/.github/workflows/dev-cd.yml index ced5e20..92ccf4b 100644 --- a/.github/workflows/dev-cd.yml +++ b/.github/workflows/dev-cd.yml @@ -32,7 +32,8 @@ jobs: - name: Build and push docker image run: | docker build \ - -t ${{env.IMAGE_NAME}} -f azure.Dockerfile . + -t ${{env.IMAGE_NAME}} \ + . docker push ${{env.IMAGE_NAME}} - name: Deploy to Azure diff --git a/Dockerfile b/Dockerfile index 402c21a..656a34f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -17,17 +17,18 @@ COPY ./server/package.json ./ COPY ./server/index.js ./ RUN npm install --only=production -FROM nasdan/heroku-pm2-nginx -COPY --from=release /usr/app ./ +FROM nasdan/azure-pm2-nginx ENV NODE_ENV=production ENV STATIC_FILES_PATH=./public +COPY --from=release /usr/app ./ COPY nginx.conf /etc/nginx/conf.d/default.conf ENV INTERNAL_PORT=3000 RUN sed -i -e 's|INTERNAL_PORT|'"$INTERNAL_PORT"'|g' /etc/nginx/conf.d/default.conf -CMD bash docker-entrypoint.sh && \ - sed -i -e 's|PORT|'"$PORT"'|g' /etc/nginx/conf.d/default.conf && \ +CMD sh docker-entrypoint.sh && \ + sed -i -e 's|PORT|80|g' /etc/nginx/conf.d/default.conf && \ pm2 start ./index.js --name "app" --env production && \ nginx -g 'daemon off;' + diff --git a/azure.Dockerfile b/azure.Dockerfile deleted file mode 100644 index 656a34f..0000000 --- a/azure.Dockerfile +++ /dev/null @@ -1,34 +0,0 @@ -FROM node:16-alpine AS base -RUN mkdir -p /usr/app -WORKDIR /usr/app - -# Prepare static files -FROM base AS build-front -COPY ./ ./ -RUN npm ci -RUN npm run build - -# Release -FROM base AS release -ENV STATIC_FILES_PATH=./public -ENV NODE_ENV=production -COPY --from=build-front /usr/app/dist $STATIC_FILES_PATH -COPY ./server/package.json ./ -COPY ./server/index.js ./ -RUN npm install --only=production - -FROM nasdan/azure-pm2-nginx -ENV NODE_ENV=production -ENV STATIC_FILES_PATH=./public -COPY --from=release /usr/app ./ - -COPY nginx.conf /etc/nginx/conf.d/default.conf - -ENV INTERNAL_PORT=3000 -RUN sed -i -e 's|INTERNAL_PORT|'"$INTERNAL_PORT"'|g' /etc/nginx/conf.d/default.conf - -CMD sh docker-entrypoint.sh && \ - sed -i -e 's|PORT|80|g' /etc/nginx/conf.d/default.conf && \ - pm2 start ./index.js --name "app" --env production && \ - nginx -g 'daemon off;' -