From 3758aaf8f9fd8f725c12d7f1236c32a238deeb8e Mon Sep 17 00:00:00 2001 From: Ammar Qaffaf Date: Wed, 21 Feb 2024 16:41:47 -0500 Subject: [PATCH 01/14] Add or update the Azure App Service build and deployment workflow config --- .github/workflows/dev_syncrow-dev.yml | 71 +++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 .github/workflows/dev_syncrow-dev.yml diff --git a/.github/workflows/dev_syncrow-dev.yml b/.github/workflows/dev_syncrow-dev.yml new file mode 100644 index 0000000..134b4cd --- /dev/null +++ b/.github/workflows/dev_syncrow-dev.yml @@ -0,0 +1,71 @@ +# Docs for the Azure Web Apps Deploy action: https://github.com/Azure/webapps-deploy +# More GitHub Actions for Azure: https://github.com/Azure/actions + +name: Build and deploy Node.js app to Azure Web App - syncrow-dev + +on: + push: + branches: + - dev + workflow_dispatch: + +jobs: + build: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + + - name: Set up Node.js version + uses: actions/setup-node@v3 + with: + node-version: '20.x' + + - name: npm install, build, and test + run: | + npm install + npm run build --if-present + npm run test --if-present + + - name: Zip artifact for deployment + run: zip release.zip ./* -r + + - name: Upload artifact for deployment job + uses: actions/upload-artifact@v3 + with: + name: node-app + path: release.zip + + deploy: + runs-on: ubuntu-latest + needs: build + environment: + name: 'Production' + url: ${{ steps.deploy-to-webapp.outputs.webapp-url }} + permissions: + id-token: write #This is required for requesting the JWT + + steps: + - name: Download artifact from build job + uses: actions/download-artifact@v3 + with: + name: node-app + + - name: Unzip artifact for deployment + run: unzip release.zip + + - name: Login to Azure + uses: azure/login@v1 + with: + client-id: ${{ secrets.AZUREAPPSERVICE_CLIENTID_F5089EEA95DF450E90E990B230B63FEA }} + tenant-id: ${{ secrets.AZUREAPPSERVICE_TENANTID_6A9379B9B88748918EE02EE725C051AD }} + subscription-id: ${{ secrets.AZUREAPPSERVICE_SUBSCRIPTIONID_8041F0A416EB4B24ADE667B446A2BD0D }} + + - name: 'Deploy to Azure Web App' + id: deploy-to-webapp + uses: azure/webapps-deploy@v2 + with: + app-name: 'syncrow-dev' + slot-name: 'Production' + package: . + \ No newline at end of file From 482a71f53c64dbf3a406293ac01acbfd8d509f42 Mon Sep 17 00:00:00 2001 From: Ammar Qaffaf Date: Mon, 19 Feb 2024 23:18:22 +0300 Subject: [PATCH 02/14] Create azure-webapps-node.yml --- .github/workflows/azure-webapps-node.yml | 59 ++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 .github/workflows/azure-webapps-node.yml diff --git a/.github/workflows/azure-webapps-node.yml b/.github/workflows/azure-webapps-node.yml new file mode 100644 index 0000000..c648b24 --- /dev/null +++ b/.github/workflows/azure-webapps-node.yml @@ -0,0 +1,59 @@ +on: + push: + branches: [ "dev" ] + workflow_dispatch: + +env: + AZURE_WEBAPP_NAME: backend-dev # set this to your application's name + AZURE_WEBAPP_PACKAGE_PATH: '.' # set this to the path to your web app project, defaults to the repository root + NODE_VERSION: '20.x' # set this to the node version to use + +permissions: + contents: read + +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + + - name: Set up Node.js + uses: actions/setup-node@v3 + with: + node-version: ${{ env.NODE_VERSION }} + cache: 'npm' + + - name: npm install, build, and test + run: | + npm install + npm run build --if-present + npm run test --if-present + + - name: Upload artifact for deployment job + uses: actions/upload-artifact@v3 + with: + name: node-app + path: . + + deploy: + permissions: + contents: none + runs-on: ubuntu-latest + needs: build + environment: + name: 'Development' + url: ${{ steps.deploy-to-webapp.outputs.webapp-url }} + + steps: + - name: Download artifact from build job + uses: actions/download-artifact@v3 + with: + name: node-app + + - name: 'Deploy to Azure WebApp' + id: deploy-to-webapp + uses: azure/webapps-deploy@v2 + with: + app-name: ${{ env.AZURE_WEBAPP_NAME }} + publish-profile: ${{ secrets.AZURE_WEBAPP_PUBLISH_PROFILE }} + package: ${{ env.AZURE_WEBAPP_PACKAGE_PATH }} From d34bc13d90b39a06704977f91cf700b0614c24dd Mon Sep 17 00:00:00 2001 From: Ammar Qaffaf Date: Tue, 20 Feb 2024 14:04:18 +0300 Subject: [PATCH 03/14] change ports --- apps/auth/src/main.ts | 2 +- apps/backend/src/main.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/auth/src/main.ts b/apps/auth/src/main.ts index 9572bdb..d1e14e8 100644 --- a/apps/auth/src/main.ts +++ b/apps/auth/src/main.ts @@ -3,6 +3,6 @@ import { AuthModule } from './auth.module'; async function bootstrap() { const app = await NestFactory.create(AuthModule); - await app.listen(6001); + await app.listen(7001); } bootstrap(); diff --git a/apps/backend/src/main.ts b/apps/backend/src/main.ts index add741b..7af4000 100644 --- a/apps/backend/src/main.ts +++ b/apps/backend/src/main.ts @@ -3,6 +3,6 @@ import { AppModule } from './app.module'; async function bootstrap() { const app = await NestFactory.create(AppModule); - await app.listen(6000); + await app.listen(7000); } bootstrap(); From ff1bb4cc418dda7402ce4ebd3b52030c78d0414a Mon Sep 17 00:00:00 2001 From: Ammar Qaffaf Date: Wed, 21 Feb 2024 16:56:41 -0500 Subject: [PATCH 04/14] Docerizing and proxying the microservices --- Dockerfile | 25 +++++++++++ apps/auth/src/main.ts | 1 + apps/backend/src/main.ts | 2 + bun.lockb | Bin 0 -> 286429 bytes nginx.conf | 29 ++++++++++++ package-lock.json | 92 +++++++++++++++++++++++++++++++++++++++ package.json | 8 +++- 7 files changed, 155 insertions(+), 2 deletions(-) create mode 100644 Dockerfile create mode 100755 bun.lockb create mode 100644 nginx.conf diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..f218aeb --- /dev/null +++ b/Dockerfile @@ -0,0 +1,25 @@ +FROM node:20 as builder + +WORKDIR /usr/src/app + +COPY package*.json ./ + +RUN npm install + +COPY . . + +RUN npm run build auth +RUN npm run build backend + +FROM nginx:alpine + +RUN rm /etc/nginx/conf.d/default.conf + +COPY nginx.conf /etc/nginx/conf.d + +COPY --from=builder /usr/src/app/dist/apps/auth /usr/share/nginx/html/auth +COPY --from=builder /usr/src/app/dist/apps/backend /usr/share/nginx/html/backend + +EXPOSE 443 + +CMD ["nginx", "-g", "daemon off;"] diff --git a/apps/auth/src/main.ts b/apps/auth/src/main.ts index d1e14e8..48eee43 100644 --- a/apps/auth/src/main.ts +++ b/apps/auth/src/main.ts @@ -5,4 +5,5 @@ async function bootstrap() { const app = await NestFactory.create(AuthModule); await app.listen(7001); } +console.log('Starting auth at port 7001...'); bootstrap(); diff --git a/apps/backend/src/main.ts b/apps/backend/src/main.ts index 7af4000..c327e3a 100644 --- a/apps/backend/src/main.ts +++ b/apps/backend/src/main.ts @@ -5,4 +5,6 @@ async function bootstrap() { const app = await NestFactory.create(AppModule); await app.listen(7000); } + +console.log('Starting backend at port 7000...'); bootstrap(); diff --git a/bun.lockb b/bun.lockb new file mode 100755 index 0000000000000000000000000000000000000000..aafac7209b6f7d998a51ac765adaacfba39ac5c2 GIT binary patch literal 286429 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.9.0" + } + }, "node_modules/@babel/template": { "version": "7.23.9", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.23.9.tgz", @@ -3478,6 +3491,48 @@ "typedarray": "^0.0.6" } }, + "node_modules/concurrently": { + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-8.2.2.tgz", + "integrity": "sha512-1dP4gpXFhei8IOtlXRE/T/4H88ElHgTiUzh71YUmtjTEHMSRS2Z/fgOxHSxxusGHogsRfxNq1vyAwxSC+EVyDg==", + "dev": true, + "dependencies": { + "chalk": "^4.1.2", + "date-fns": "^2.30.0", + "lodash": "^4.17.21", + "rxjs": "^7.8.1", + "shell-quote": "^1.8.1", + "spawn-command": "0.0.2", + "supports-color": "^8.1.1", + "tree-kill": "^1.2.2", + "yargs": "^17.7.2" + }, + "bin": { + "conc": "dist/bin/concurrently.js", + "concurrently": "dist/bin/concurrently.js" + }, + "engines": { + "node": "^14.13.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/open-cli-tools/concurrently?sponsor=1" + } + }, + "node_modules/concurrently/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, "node_modules/consola": { "version": "2.15.3", "resolved": "https://registry.npmjs.org/consola/-/consola-2.15.3.tgz", @@ -3611,6 +3666,22 @@ "node": ">= 8" } }, + "node_modules/date-fns": { + "version": "2.30.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz", + "integrity": "sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.21.0" + }, + "engines": { + "node": ">=0.11" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/date-fns" + } + }, "node_modules/debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", @@ -7111,6 +7182,12 @@ "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.1.tgz", "integrity": "sha512-i5lLI6iw9AU3Uu4szRNPPEkomnkjRTaVt9hy/bn5g/oSzekBSMeLZblcjP74AW0vBabqERLLIrz+gR8QYR54Tw==" }, + "node_modules/regenerator-runtime": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", + "dev": true + }, "node_modules/repeat-string": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", @@ -7535,6 +7612,15 @@ "node": ">=8" } }, + "node_modules/shell-quote": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", + "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/shelljs": { "version": "0.8.5", "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", @@ -7666,6 +7752,12 @@ "node": ">=0.10.0" } }, + "node_modules/spawn-command": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2.tgz", + "integrity": "sha512-zC8zGoGkmc8J9ndvml8Xksr1Amk9qBujgbF0JAIWO7kXr43w0h/0GJNM/Vustixu+YE8N/MTrQ7N31FvHUACxQ==", + "dev": true + }, "node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", diff --git a/package.json b/package.json index 497acf1..211f952 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,10 @@ "test:watch": "jest --watch", "test:cov": "jest --coverage", "test:debug": "node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand", - "test:e2e": "jest --config ./apps/backend/test/jest-e2e.json" + "test:e2e": "jest --config ./apps/backend/test/jest-e2e.json", + "start:auth": "nest start auth", + "start:backend": "nest start backend", + "start:all": "concurrently \"npm run start:auth\" \"npm run start:backend\"" }, "dependencies": { "@nestjs/common": "^10.0.0", @@ -36,6 +39,7 @@ "@types/supertest": "^6.0.0", "@typescript-eslint/eslint-plugin": "^6.0.0", "@typescript-eslint/parser": "^6.0.0", + "concurrently": "^8.2.2", "eslint": "^8.42.0", "eslint-config-prettier": "^9.0.0", "eslint-plugin-prettier": "^5.0.0", @@ -69,4 +73,4 @@ "/apps/" ] } -} \ No newline at end of file +} From cfb293843e4cef754bf507fa702ed5a2c4a09f62 Mon Sep 17 00:00:00 2001 From: Ammar Qaffaf Date: Thu, 22 Feb 2024 01:36:33 +0300 Subject: [PATCH 05/14] working dockerized environment --- Dockerfile | 24 ++++++++++++++---------- bun.lockb | Bin 286429 -> 286429 bytes nginx.conf | 31 ++++++++++++++++++++----------- 3 files changed, 34 insertions(+), 21 deletions(-) diff --git a/Dockerfile b/Dockerfile index f218aeb..109471d 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,6 +1,6 @@ FROM node:20 as builder -WORKDIR /usr/src/app +WORKDIR /src/app COPY package*.json ./ @@ -8,18 +8,22 @@ RUN npm install COPY . . -RUN npm run build auth -RUN npm run build backend +RUN npm run build -FROM nginx:alpine +# Runtime stage +FROM node:20-alpine -RUN rm /etc/nginx/conf.d/default.conf +RUN apk add --no-cache nginx +COPY nginx.conf /etc/nginx/nginx.conf -COPY nginx.conf /etc/nginx/conf.d +WORKDIR /app -COPY --from=builder /usr/src/app/dist/apps/auth /usr/share/nginx/html/auth -COPY --from=builder /usr/src/app/dist/apps/backend /usr/share/nginx/html/backend +COPY --from=builder /src/app/dist/apps/auth ./auth +COPY --from=builder /src/app/dist/apps/backend ./backend +COPY package*.json ./ -EXPOSE 443 +RUN npm install -CMD ["nginx", "-g", "daemon off;"] +EXPOSE 80 + +CMD ["sh", "-c", "nginx -g 'daemon off;' & node auth/main.js & node backend/main.js"] diff --git a/bun.lockb b/bun.lockb index aafac7209b6f7d998a51ac765adaacfba39ac5c2..d8412183864ff8303a75e7d80bcbd80d3c59380a 100755 GIT binary patch delta 48375 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 Tl(JF-)daY7a_sbX8Pezf`wY*H delta 48232 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 diff --git a/nginx.conf b/nginx.conf index 6c402b4..6e330da 100644 --- a/nginx.conf +++ b/nginx.conf @@ -1,4 +1,8 @@ -events {} +worker_processes 1; + +events { + worker_connections 1024; +} http { include mime.types; @@ -7,18 +11,23 @@ http { keepalive_timeout 65; server { - listen 443; - server_name localhost; + listen 80; - location /auth { - alias /usr/share/nginx/html/auth; - try_files $uri $uri/ /auth/index.html; - } + location /auth { + proxy_pass http://localhost:7001; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + } - location /backend { - alias /usr/share/nginx/html/backend; - try_files $uri $uri/ /backend/index.html; - } + location / { + proxy_pass http://localhost:7000; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + } # error pages error_page 500 502 503 504 /50x.html; From 03c2dbf1d3a2bef54354b4cc0c0ad020d439a487 Mon Sep 17 00:00:00 2001 From: Ammar Qaffaf Date: Wed, 21 Feb 2024 17:38:46 -0500 Subject: [PATCH 06/14] Add or update the Azure App Service build and deployment workflow config --- .github/workflows/dev_syncrow(dev).yml | 71 ++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 .github/workflows/dev_syncrow(dev).yml diff --git a/.github/workflows/dev_syncrow(dev).yml b/.github/workflows/dev_syncrow(dev).yml new file mode 100644 index 0000000..8c30361 --- /dev/null +++ b/.github/workflows/dev_syncrow(dev).yml @@ -0,0 +1,71 @@ +# Docs for the Azure Web Apps Deploy action: https://github.com/Azure/webapps-deploy +# More GitHub Actions for Azure: https://github.com/Azure/actions + +name: Build and deploy Node.js app to Azure Web App - syncrow + +on: + push: + branches: + - dev + workflow_dispatch: + +jobs: + build: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + + - name: Set up Node.js version + uses: actions/setup-node@v3 + with: + node-version: '20.x' + + - name: npm install, build, and test + run: | + npm install + npm run build --if-present + npm run test --if-present + + - name: Zip artifact for deployment + run: zip release.zip ./* -r + + - name: Upload artifact for deployment job + uses: actions/upload-artifact@v3 + with: + name: node-app + path: release.zip + + deploy: + runs-on: ubuntu-latest + needs: build + environment: + name: 'dev' + url: ${{ steps.deploy-to-webapp.outputs.webapp-url }} + permissions: + id-token: write #This is required for requesting the JWT + + steps: + - name: Download artifact from build job + uses: actions/download-artifact@v3 + with: + name: node-app + + - name: Unzip artifact for deployment + run: unzip release.zip + + - name: Login to Azure + uses: azure/login@v1 + with: + client-id: ${{ secrets.AZUREAPPSERVICE_CLIENTID_B0E5D07AA5C94CCABC05A696CFDFA185 }} + tenant-id: ${{ secrets.AZUREAPPSERVICE_TENANTID_D2A87194F5BF4F2CA24CE8C4D3EDDF24 }} + subscription-id: ${{ secrets.AZUREAPPSERVICE_SUBSCRIPTIONID_4E6606241F0B4089BAFF050BC609DDE0 }} + + - name: 'Deploy to Azure Web App' + id: deploy-to-webapp + uses: azure/webapps-deploy@v2 + with: + app-name: 'syncrow' + slot-name: 'dev' + package: . + \ No newline at end of file From 2f4364abb3eb8787d7aa77beedc3618146e1e13f Mon Sep 17 00:00:00 2001 From: Ammar Qaffaf Date: Thu, 22 Feb 2024 02:04:06 +0300 Subject: [PATCH 07/14] updating the pipeline --- .github/workflows/azure-webapps-node.yml | 59 -------------------- .github/workflows/dev_syncrow(dev).yml | 42 +++++++------- .github/workflows/dev_syncrow-dev.yml | 71 ------------------------ 3 files changed, 21 insertions(+), 151 deletions(-) delete mode 100644 .github/workflows/azure-webapps-node.yml delete mode 100644 .github/workflows/dev_syncrow-dev.yml diff --git a/.github/workflows/azure-webapps-node.yml b/.github/workflows/azure-webapps-node.yml deleted file mode 100644 index c648b24..0000000 --- a/.github/workflows/azure-webapps-node.yml +++ /dev/null @@ -1,59 +0,0 @@ -on: - push: - branches: [ "dev" ] - workflow_dispatch: - -env: - AZURE_WEBAPP_NAME: backend-dev # set this to your application's name - AZURE_WEBAPP_PACKAGE_PATH: '.' # set this to the path to your web app project, defaults to the repository root - NODE_VERSION: '20.x' # set this to the node version to use - -permissions: - contents: read - -jobs: - build: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - - - name: Set up Node.js - uses: actions/setup-node@v3 - with: - node-version: ${{ env.NODE_VERSION }} - cache: 'npm' - - - name: npm install, build, and test - run: | - npm install - npm run build --if-present - npm run test --if-present - - - name: Upload artifact for deployment job - uses: actions/upload-artifact@v3 - with: - name: node-app - path: . - - deploy: - permissions: - contents: none - runs-on: ubuntu-latest - needs: build - environment: - name: 'Development' - url: ${{ steps.deploy-to-webapp.outputs.webapp-url }} - - steps: - - name: Download artifact from build job - uses: actions/download-artifact@v3 - with: - name: node-app - - - name: 'Deploy to Azure WebApp' - id: deploy-to-webapp - uses: azure/webapps-deploy@v2 - with: - app-name: ${{ env.AZURE_WEBAPP_NAME }} - publish-profile: ${{ secrets.AZURE_WEBAPP_PUBLISH_PROFILE }} - package: ${{ env.AZURE_WEBAPP_PACKAGE_PATH }} diff --git a/.github/workflows/dev_syncrow(dev).yml b/.github/workflows/dev_syncrow(dev).yml index 8c30361..6ebdc01 100644 --- a/.github/workflows/dev_syncrow(dev).yml +++ b/.github/workflows/dev_syncrow(dev).yml @@ -1,6 +1,3 @@ -# Docs for the Azure Web Apps Deploy action: https://github.com/Azure/webapps-deploy -# More GitHub Actions for Azure: https://github.com/Azure/actions - name: Build and deploy Node.js app to Azure Web App - syncrow on: @@ -9,6 +6,11 @@ on: - dev workflow_dispatch: +env: + NODE_VERSION: '20.x' + AZURE_WEB_APP_NAME: 'syncrow' + AZURE_SLOT_NAME: 'dev' + jobs: build: runs-on: ubuntu-latest @@ -16,10 +18,11 @@ jobs: steps: - uses: actions/checkout@v4 - - name: Set up Node.js version + - name: Set up Node.js uses: actions/setup-node@v3 with: - node-version: '20.x' + node-version: ${{ env.NODE_VERSION }} + cache: 'npm' - name: npm install, build, and test run: | @@ -28,7 +31,7 @@ jobs: npm run test --if-present - name: Zip artifact for deployment - run: zip release.zip ./* -r + run: zip -r release.zip . -x node_modules\* \*.git\* \*.github\* \*tests\* - name: Upload artifact for deployment job uses: actions/upload-artifact@v3 @@ -41,9 +44,10 @@ jobs: needs: build environment: name: 'dev' + # Dynamically set or adjust as needed url: ${{ steps.deploy-to-webapp.outputs.webapp-url }} - permissions: - id-token: write #This is required for requesting the JWT + permissions: + id-token: write # For federated credentials, if applicable steps: - name: Download artifact from build job @@ -53,19 +57,15 @@ jobs: - name: Unzip artifact for deployment run: unzip release.zip - - - name: Login to Azure - uses: azure/login@v1 - with: - client-id: ${{ secrets.AZUREAPPSERVICE_CLIENTID_B0E5D07AA5C94CCABC05A696CFDFA185 }} - tenant-id: ${{ secrets.AZUREAPPSERVICE_TENANTID_D2A87194F5BF4F2CA24CE8C4D3EDDF24 }} - subscription-id: ${{ secrets.AZUREAPPSERVICE_SUBSCRIPTIONID_4E6606241F0B4089BAFF050BC609DDE0 }} + + - name: Login to Azure + uses: azure/login@v2 + with: + creds: ${{ secrets.AZURE_CREDENTIALS }} # JSON Service Principal credentials for Azure in a secret - - name: 'Deploy to Azure Web App' - id: deploy-to-webapp + - name: Deploy to Azure Web App uses: azure/webapps-deploy@v2 with: - app-name: 'syncrow' - slot-name: 'dev' - package: . - \ No newline at end of file + app-name: ${{ env.AZURE_WEB_APP_NAME }} + slot-name: ${{ env.AZURE_SLOT_NAME }} + package: release.zip diff --git a/.github/workflows/dev_syncrow-dev.yml b/.github/workflows/dev_syncrow-dev.yml deleted file mode 100644 index 134b4cd..0000000 --- a/.github/workflows/dev_syncrow-dev.yml +++ /dev/null @@ -1,71 +0,0 @@ -# Docs for the Azure Web Apps Deploy action: https://github.com/Azure/webapps-deploy -# More GitHub Actions for Azure: https://github.com/Azure/actions - -name: Build and deploy Node.js app to Azure Web App - syncrow-dev - -on: - push: - branches: - - dev - workflow_dispatch: - -jobs: - build: - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v4 - - - name: Set up Node.js version - uses: actions/setup-node@v3 - with: - node-version: '20.x' - - - name: npm install, build, and test - run: | - npm install - npm run build --if-present - npm run test --if-present - - - name: Zip artifact for deployment - run: zip release.zip ./* -r - - - name: Upload artifact for deployment job - uses: actions/upload-artifact@v3 - with: - name: node-app - path: release.zip - - deploy: - runs-on: ubuntu-latest - needs: build - environment: - name: 'Production' - url: ${{ steps.deploy-to-webapp.outputs.webapp-url }} - permissions: - id-token: write #This is required for requesting the JWT - - steps: - - name: Download artifact from build job - uses: actions/download-artifact@v3 - with: - name: node-app - - - name: Unzip artifact for deployment - run: unzip release.zip - - - name: Login to Azure - uses: azure/login@v1 - with: - client-id: ${{ secrets.AZUREAPPSERVICE_CLIENTID_F5089EEA95DF450E90E990B230B63FEA }} - tenant-id: ${{ secrets.AZUREAPPSERVICE_TENANTID_6A9379B9B88748918EE02EE725C051AD }} - subscription-id: ${{ secrets.AZUREAPPSERVICE_SUBSCRIPTIONID_8041F0A416EB4B24ADE667B446A2BD0D }} - - - name: 'Deploy to Azure Web App' - id: deploy-to-webapp - uses: azure/webapps-deploy@v2 - with: - app-name: 'syncrow-dev' - slot-name: 'Production' - package: . - \ No newline at end of file From 21a41deddb518811b276ea21a06161c287aa5b22 Mon Sep 17 00:00:00 2001 From: Ammar Qaffaf Date: Thu, 22 Feb 2024 02:11:13 +0300 Subject: [PATCH 08/14] downdgrade azure loging to v1 --- .github/workflows/dev_syncrow(dev).yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/dev_syncrow(dev).yml b/.github/workflows/dev_syncrow(dev).yml index 6ebdc01..65b9294 100644 --- a/.github/workflows/dev_syncrow(dev).yml +++ b/.github/workflows/dev_syncrow(dev).yml @@ -59,7 +59,7 @@ jobs: run: unzip release.zip - name: Login to Azure - uses: azure/login@v2 + uses: azure/login@v1 with: creds: ${{ secrets.AZURE_CREDENTIALS }} # JSON Service Principal credentials for Azure in a secret From 86769de18bcff916b4306cfc04742e15ca744e8f Mon Sep 17 00:00:00 2001 From: Ammar Qaffaf Date: Thu, 22 Feb 2024 02:26:25 +0300 Subject: [PATCH 09/14] use azure container registry --- .github/workflows/dev_syncrow(dev).yml | 75 ++++++++------------------ 1 file changed, 23 insertions(+), 52 deletions(-) diff --git a/.github/workflows/dev_syncrow(dev).yml b/.github/workflows/dev_syncrow(dev).yml index 65b9294..00ed555 100644 --- a/.github/workflows/dev_syncrow(dev).yml +++ b/.github/workflows/dev_syncrow(dev).yml @@ -1,4 +1,4 @@ -name: Build and deploy Node.js app to Azure Web App - syncrow +name: Build and deploy Docker image to Azure Web App for Containers on: push: @@ -7,65 +7,36 @@ on: workflow_dispatch: env: - NODE_VERSION: '20.x' AZURE_WEB_APP_NAME: 'syncrow' - AZURE_SLOT_NAME: 'dev' + AZURE_WEB_APP_SLOT_NAME: 'dev' + ACR_REGISTRY: 'syncrow.azurecr.io' # Replace with your ACR name + IMAGE_NAME: 'backend' # Replace with your image name + IMAGE_TAG: 'latest' # Consider using dynamic tags, e.g., GitHub SHA jobs: - build: + build_and_deploy: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - - name: Set up Node.js - uses: actions/setup-node@v3 - with: - node-version: ${{ env.NODE_VERSION }} - cache: 'npm' - - - name: npm install, build, and test - run: | - npm install - npm run build --if-present - npm run test --if-present - - - name: Zip artifact for deployment - run: zip -r release.zip . -x node_modules\* \*.git\* \*.github\* \*tests\* - - - name: Upload artifact for deployment job - uses: actions/upload-artifact@v3 - with: - name: node-app - path: release.zip - - deploy: - runs-on: ubuntu-latest - needs: build - environment: - name: 'dev' - # Dynamically set or adjust as needed - url: ${{ steps.deploy-to-webapp.outputs.webapp-url }} - permissions: - id-token: write # For federated credentials, if applicable - - steps: - - name: Download artifact from build job - uses: actions/download-artifact@v3 - with: - name: node-app - - - name: Unzip artifact for deployment - run: unzip release.zip - - - name: Login to Azure + - name: Log in to Azure uses: azure/login@v1 with: - creds: ${{ secrets.AZURE_CREDENTIALS }} # JSON Service Principal credentials for Azure in a secret + creds: ${{ secrets.AZURE_CREDENTIALS }} - - name: Deploy to Azure Web App - uses: azure/webapps-deploy@v2 - with: - app-name: ${{ env.AZURE_WEB_APP_NAME }} - slot-name: ${{ env.AZURE_SLOT_NAME }} - package: release.zip + - name: Log in to Azure Container Registry + run: az acr login --name ${{ env.ACR_REGISTRY }} + + - name: Build and push Docker image + run: | + docker build . -t ${{ env.ACR_REGISTRY }}/${{ env.IMAGE_NAME }}:${{ env.IMAGE_TAG }} + docker push ${{ env.ACR_REGISTRY }}/${{ env.IMAGE_NAME }}:${{ env.IMAGE_TAG }} + + - name: Set Web App with Docker container + run: | + az webapp config container set \ + --name ${{ env.AZURE_WEB_APP_NAME }} \ + --resource-group YourResourceGroupName \ # Replace with your resource group name + --docker-custom-image-name ${{ env.ACR_REGISTRY }}/${{ env.IMAGE_NAME }}:${{ env.IMAGE_TAG }} \ + --docker-registry-server-url https://${{ env.ACR_REGISTRY }} From ea7ad0fafda51bd475dc857e26e53ccd4dd7d323 Mon Sep 17 00:00:00 2001 From: Ammar Qaffaf Date: Thu, 22 Feb 2024 02:27:26 +0300 Subject: [PATCH 10/14] use azure container registry --- .github/workflows/dev_syncrow(dev).yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/dev_syncrow(dev).yml b/.github/workflows/dev_syncrow(dev).yml index 00ed555..c779f3c 100644 --- a/.github/workflows/dev_syncrow(dev).yml +++ b/.github/workflows/dev_syncrow(dev).yml @@ -9,9 +9,9 @@ on: env: AZURE_WEB_APP_NAME: 'syncrow' AZURE_WEB_APP_SLOT_NAME: 'dev' - ACR_REGISTRY: 'syncrow.azurecr.io' # Replace with your ACR name - IMAGE_NAME: 'backend' # Replace with your image name - IMAGE_TAG: 'latest' # Consider using dynamic tags, e.g., GitHub SHA + ACR_REGISTRY: 'syncrow.azurecr.io' + IMAGE_NAME: 'backend' + IMAGE_TAG: 'latest' jobs: build_and_deploy: @@ -37,6 +37,6 @@ jobs: run: | az webapp config container set \ --name ${{ env.AZURE_WEB_APP_NAME }} \ - --resource-group YourResourceGroupName \ # Replace with your resource group name + --resource-group syncrow \ --docker-custom-image-name ${{ env.ACR_REGISTRY }}/${{ env.IMAGE_NAME }}:${{ env.IMAGE_TAG }} \ --docker-registry-server-url https://${{ env.ACR_REGISTRY }} From b4504a03fdd23cef56d4206a19c27449d34b2d49 Mon Sep 17 00:00:00 2001 From: Ammar Qaffaf Date: Thu, 22 Feb 2024 02:36:37 +0300 Subject: [PATCH 11/14] troubleshooting pipeline --- .github/workflows/dev_syncrow(dev).yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/dev_syncrow(dev).yml b/.github/workflows/dev_syncrow(dev).yml index c779f3c..4250a37 100644 --- a/.github/workflows/dev_syncrow(dev).yml +++ b/.github/workflows/dev_syncrow(dev).yml @@ -28,6 +28,9 @@ jobs: - name: Log in to Azure Container Registry run: az acr login --name ${{ env.ACR_REGISTRY }} + - name: List build output + run: ls -R dist/apps/ + - name: Build and push Docker image run: | docker build . -t ${{ env.ACR_REGISTRY }}/${{ env.IMAGE_NAME }}:${{ env.IMAGE_TAG }} From fee8c94c427dd632c81c0def60853e10d317fc47 Mon Sep 17 00:00:00 2001 From: Ammar Qaffaf Date: Thu, 22 Feb 2024 02:40:43 +0300 Subject: [PATCH 12/14] troubleshooting pipeline --- .github/workflows/dev_syncrow(dev).yml | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/.github/workflows/dev_syncrow(dev).yml b/.github/workflows/dev_syncrow(dev).yml index 4250a37..9c58403 100644 --- a/.github/workflows/dev_syncrow(dev).yml +++ b/.github/workflows/dev_syncrow(dev).yml @@ -20,6 +20,19 @@ jobs: steps: - uses: actions/checkout@v4 + - name: Set up Node.js + uses: actions/setup-node@v3 + with: + node-version: '20' + + - name: Install dependencies and build project + run: | + npm install + npm run build + + - name: List build output + run: ls -R dist/apps/ + - name: Log in to Azure uses: azure/login@v1 with: From 8a5f6597d7707def42f07d0756d65258337f8cbf Mon Sep 17 00:00:00 2001 From: Ammar Qaffaf Date: Thu, 22 Feb 2024 03:02:39 +0300 Subject: [PATCH 13/14] fix dockerfile --- Dockerfile | 24 +++++++----------------- 1 file changed, 7 insertions(+), 17 deletions(-) diff --git a/Dockerfile b/Dockerfile index 109471d..25be02c 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,6 +1,10 @@ -FROM node:20 as builder +FROM node:20-alpine -WORKDIR /src/app +RUN apk add --no-cache nginx + +COPY nginx.conf /etc/nginx/nginx.conf + +WORKDIR /app COPY package*.json ./ @@ -10,20 +14,6 @@ COPY . . RUN npm run build -# Runtime stage -FROM node:20-alpine - -RUN apk add --no-cache nginx -COPY nginx.conf /etc/nginx/nginx.conf - -WORKDIR /app - -COPY --from=builder /src/app/dist/apps/auth ./auth -COPY --from=builder /src/app/dist/apps/backend ./backend -COPY package*.json ./ - -RUN npm install - EXPOSE 80 -CMD ["sh", "-c", "nginx -g 'daemon off;' & node auth/main.js & node backend/main.js"] +CMD ["sh", "-c", "nginx -g 'daemon off;' & npm run start:all"] \ No newline at end of file From 7589038172bc14c2d56be83a762bcfa317f7c128 Mon Sep 17 00:00:00 2001 From: Ammar Qaffaf Date: Thu, 22 Feb 2024 03:10:20 +0300 Subject: [PATCH 14/14] fix resource group --- .github/workflows/dev_syncrow(dev).yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/dev_syncrow(dev).yml b/.github/workflows/dev_syncrow(dev).yml index 9c58403..fe53da8 100644 --- a/.github/workflows/dev_syncrow(dev).yml +++ b/.github/workflows/dev_syncrow(dev).yml @@ -53,6 +53,6 @@ jobs: run: | az webapp config container set \ --name ${{ env.AZURE_WEB_APP_NAME }} \ - --resource-group syncrow \ + --resource-group backend \ --docker-custom-image-name ${{ env.ACR_REGISTRY }}/${{ env.IMAGE_NAME }}:${{ env.IMAGE_TAG }} \ --docker-registry-server-url https://${{ env.ACR_REGISTRY }}