0

My node.js (express) server doesn't start after deployment to Azure.

I've got several project in one github repo. Here is the structure:

.github
  workflows
    main_serverexamplewebapp.yml
src
  server_example
    package.json
    server.js
  project_2

I want to deploy src/server_example to Azure Web App and run server.js.

main_serverexamplewebapp.yml

# 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 - serverexamplewebapp

on:
  push:
    branches:
      - main
  workflow_dispatch:

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v2

      - name: Set up Node.js version
        uses: actions/setup-node@v1
        with:
          node-version: '18.x'

      - name: npm install, build, and test
        working-directory: ./src/server_example
        run: |
          npm install
          npm run build --if-present
          npm run test --if-present

      - name: Upload artifact for deployment job
        uses: actions/upload-artifact@v2
        with:
          name: node-app
          path: .

  deploy:
    runs-on: ubuntu-latest
    needs: build
    environment:
      name: 'Production'
      url: ${{ steps.deploy-to-webapp.outputs.webapp-url }}

    steps:
      - name: Download artifact from build job
        uses: actions/download-artifact@v2
        with:
          name: node-app

      - name: 'Deploy to Azure Web App'
        id: deploy-to-webapp
        uses: azure/webapps-deploy@v2
        with:
          app-name: 'serverexamplewebapp'
          slot-name: 'Production'
          publish-profile: ${{ secrets.AZUREAPPSERVICE_PUBLISHPROFILE_12345 }}
          package: .

server.js

const express = require("express");

const app = express();



// parse requests of content-type - application/json
app.use(express.json());

// parse requests of content-type - application/x-www-form-urlencoded
app.use(express.urlencoded({ extended: true }));

// simple route
app.get("/", (req, res) => {
  res.json({ message: "Welcome!" });
});



const PORT = process.env.PORT || 8080
app.listen(PORT, () => {
  console.log(`Server is running on port ${PORT}.`);
});


package.json

{
  "name": "server_example",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "start": "node server.js"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "express": "^4.18.2"
  }
}

Github Actions finished successfully (both build and deploy). There are no errors In Azure Deployment Center too:

Deployment successful. deployer = GITHUB_ZIP_DEPLOY deploymentPath = ZipDeploy. Extract zip.

But when I open url there is default azure message "Your web app is running and waiting for your content".

What should I do to run my server.js on Azure after deployment?

1
  • Can you provide your github repository link if possible? Commented Jul 24, 2023 at 11:01

1 Answer 1

2

So, I did these things to fix the problem:

  1. Changed main_serverexamplewebapp.yml: I've changed path in actions/upload-artifact@v2 from . to ./src/server_example (it's path to my project inside my repo). Here is the the correct fragment:
    - name: Upload artifact for deployment job
      uses: actions/upload-artifact@v2
      with:
          name: node-app
          path: ./src/server_example
    
  2. Added npm run start to Azure Configuration ("Configuration" in left column -> "General settings" tab -> add npm run start to "Startup command" input) Azure Configuration

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.