Lottando per caricare la mia applicazione node.js su Azure

Aug 22 2020

Sono un principiante su node.js e ho bisogno di ospitare un'applicazione che non ho scritto personalmente su un server azzurro per alcuni test. Il sito funziona bene ospitato localmente, nonché ospitato utilizzando ngrok. Tuttavia, quando lo ospito su Azure, ottengo il seguente errore:

[1] 2020-08-23T00:26:36 
Container etuition_0_41152ef3 didn't respond to HTTP pings on port: 8080, failing site start
[2] 2020-08-23T00:26:36 
Container etuition_0_41152ef3 for site etuition did not start within expected time limit.

Ora devo sottolineare che non ho familiarità con node.js, ma a me sembra che le richieste http siano allineate correttamente. Ecco il codice per il mio index.js, dove penso che possa risiedere il problema.

'use strict';

/**
 * Load Twilio configuration from .env config file - the following environment
 * variables should be set:
 * process.env.TWILIO_ACCOUNT_SID
 * process.env.TWILIO_API_KEY
 * process.env.TWILIO_API_SECRET
 */
require('dotenv').load();

const express = require('express');
const http = require('https');
const path = require('path');
const { jwt: { AccessToken } } = require('twilio');

const VideoGrant = AccessToken.VideoGrant;

// Max. period that a Participant is allowed to be in a Room (currently 14400 seconds or 4 hours)
const MAX_ALLOWED_SESSION_DURATION = 14400;

// Create Express webapp.
const app = express();

// Set up the paths for the examples.
[
  'bandwidthconstraints',
  'codecpreferences',
  'dominantspeaker',
  'localvideofilter',
  'localvideosnapshot',
  'mediadevices',
  'networkquality',
  'reconnection',
  'screenshare',
  'localmediacontrols',
  'remotereconnection',
  'datatracks',

].forEach(example => {
  const examplePath = path.join(__dirname, `../examples/${example}/public`); app.use(`/${example}`, express.static(examplePath));
});

// Set up the path for the quickstart.
const quickstartPath = path.join(__dirname, '../quickstart/public');
app.use('/quickstart', express.static(quickstartPath));

// Set up the path for the examples page.
const examplesPath = path.join(__dirname, '../examples');
app.use('/examples', express.static(examplesPath));

/**
 * Default to the Quick Start application.
 */
app.get('/', (request, response) => {
  response.redirect('/quickstart');
});



/**
 * Generate an Access Token for a chat application user - it generates a random
 * username for the client requesting a token, and takes a device ID as a query
 * parameter.
 */
app.get('/token', function(request, response) {
  const { identity } = request.query;

  // Create an access token which we will sign and return to the client,
  // containing the grant we just created.
  const token = new AccessToken(
    process.env.TWILIO_ACCOUNT_SID,
    process.env.TWILIO_API_KEY,
    process.env.TWILIO_API_SECRET,
    { ttl: MAX_ALLOWED_SESSION_DURATION }
  );

  // Assign the generated identity to the token.
  token.identity = identity;

  // Grant the access token Twilio Video capabilities.
  const grant = new VideoGrant();
  token.addGrant(grant);

  // Serialize the token to a JWT string.
  response.send(token.toJwt());
});

// Create http server and run it.
const server = http.createServer(app);
const port = process.env.PORT || 8080;
server.listen(port, function() {
  console.log('Express server running on *:' + port);
});

Ecco il mio package.json


{
  "name": "video-quickstart-js",
  "version": "1.0.0-dev",
  "description": "Twilio Video SDK Quick Start for JavaScript",
  "main": "index.js",
  "scripts": {
    "build": "npm-run-all build:* ",
    "build:examples": "npm-run-all build:examples:*",
    "build:examples:bandwidthconstraints": "copyfiles -f examples/bandwidthconstraints/src/helpers.js examples/bandwidthconstraints/public && browserify examples/bandwidthconstraints/src/index.js > examples/bandwidthconstraints/public/index.js",
    "build:examples:codecpreferences": "copyfiles -f examples/codecpreferences/src/helpers.js examples/codecpreferences/public && browserify examples/codecpreferences/src/index.js > examples/codecpreferences/public/index.js",
    "build:examples:dominantspeaker": "copyfiles -f examples/dominantspeaker/src/helpers.js examples/dominantspeaker/public && browserify examples/dominantspeaker/src/index.js > examples/dominantspeaker/public/index.js",
    "build:examples:localvideofilter": "copyfiles -f examples/localvideofilter/src/helpers.js examples/localvideofilter/public && browserify examples/localvideofilter/src/index.js > examples/localvideofilter/public/index.js",
    "build:examples:localvideosnapshot": "copyfiles -f examples/localvideosnapshot/src/helpers.js examples/localvideosnapshot/public && browserify examples/localvideosnapshot/src/index.js > examples/localvideosnapshot/public/index.js",
    "build:examples:mediadevices": "copyfiles -f examples/mediadevices/src/helpers.js examples/mediadevices/public && browserify examples/mediadevices/src/index.js > examples/mediadevices/public/index.js",
    "build:examples:networkquality": "copyfiles -f examples/networkquality/src/helpers.js examples/networkquality/public && browserify examples/networkquality/src/index.js > examples/networkquality/public/index.js",
    "build:examples:reconnection": "copyfiles -f examples/reconnection/src/helpers.js examples/reconnection/public && browserify examples/reconnection/src/index.js > examples/reconnection/public/index.js",
    "build:examples:screenshare": "copyfiles -f examples/screenshare/src/helpers.js examples/screenshare/public && browserify examples/screenshare/src/index.js > examples/screenshare/public/index.js",
    "build:examples:localmediacontrols": "copyfiles -f examples/localmediacontrols/src/helpers.js examples/localmediacontrols/public && browserify examples/localmediacontrols/src/index.js > examples/localmediacontrols/public/index.js",
    "build:examples:remotereconnection": "copyfiles -f examples/remotereconnection/src/helpers.js examples/remotereconnection/public && browserify examples/remotereconnection/src/index.js > examples/remotereconnection/public/index.js",
    "build:examples:datatracks": "copyfiles -f examples/datatracks/src/helpers.js examples/datatracks/public && browserify examples/datatracks/src/index.js > examples/datatracks/public/index.js",
    "build:quickstart": "browserify quickstart/src/index.js > quickstart/public/index.js",
    "clean": "npm-run-all clean:*",
    "clean:examples": "npm-run-all clean:examples:*",
    "clean:examples:bandwidthconstraints": "rimraf examples/bandwidthconstraints/public/index.js examples/bandwidthconstraints/public/helpers.js",
    "clean:examples:codecpreferences": "rimraf examples/codecpreferences/public/index.js examples/codecpreferences/public/helpers.js",
    "clean:examples:dominantspeaker": "rimraf examples/dominantspeaker/public/index.js examples/dominantspeaker/public/helpers.js",
    "clean:examples:localvideofilter": "rimraf examples/localvideofilter/public/index.js examples/localvideofilter/public/helpers.js",
    "clean:examples:localvideosnapshot": "rimraf examples/localvideosnapshot/public/index.js examples/localvideosnapshot/public/helpers.js",
    "clean:examples:mediadevices": "rimraf examples/mediadevices/public/index.js examples/mediadevices/public/helpers.js",
    "clean:examples:networkquality": "rimraf examples/networkquality/public/index.js examples/networkquality/public/helpers.js",
    "clean:examples:reconnection": "rimraf examples/reconnection/public/index.js examples/reconnection/public/helpers.js",
    "clean:examples:screenshare": "rimraf examples/screenshare/public/index.js examples/screenshare/public/helpers.js",
    "clean:examples:localmediacontrols": "rimraf examples/localmediacontrols/public/index.js examples/localmediacontrols/public/helpers.js",
    "clean:examples:remotereconnection": "rimraf examples/remotereconnection/public/index.js examples/remotereconnection/public/helpers.js",
    "clean:examples:datatracks": "rimraf examples/datatracks/public/index.js examples/datatracks/public/helpers.js",
    "clean:quickstart": "rimraf quickstart/public/index.js",
    "start": "npm run clean && npm run build && node server"
  },
  "repository": {
    "type": "git",
    "url": "git+https://github.com/twilio/video-quickstart-js.git"
  },
  "keywords": [
    "twilio",
    "video",
    "chat",
    "ip",
    "real",
    "time",
    "diggity"
  ],
  "author": "Twilio",
  "license": "MIT",
  "bugs": {
    "url": "https://github.com/twilio/video-quickstart-js/issues"
  },
  "homepage": "https://github.com/twilio/video-quickstart-js#readme",
  "dependencies": {
    "dotenv": "^4.0.0",
    "express": "^4.15.2",
    "prismjs": "^1.6.0",
    "stackblur-canvas": "^1.4.0",
    "twilio": "^3.19.1",
    "twilio-video": "^2.7.0"
  },
  "devDependencies": {
    "browserify": "^14.3.0",
    "copyfiles": "^1.2.0",
    "npm-run-all": "^4.0.2",
    "rimraf": "^2.6.1"
  }
}

Grazie per aver letto!

Risposte

JasonPan Aug 24 2020 at 11:34

Innanzitutto, assicurati di quali servizi utilizzi AWSo Azure Web App Services?

Qualunque servizio utilizzi, ti consiglio di utilizzare git per distribuire la tua app web.

  1. Usa git per distribuire in servizi di app Web di Azure.

  2. Usa git per eseguire il deployment in aws.

Devi solo assicurarti che la tua app web possa essere eseguita correttamente in locale. E la porta che usi come app.set('port', process.env.PORT || 3000);o const port = process.env.PORT || 3000. Il che significa che puoi eseguire con successo in locale con 3000 porte.

Per maggiori dettagli, puoi vedere la mia risposta in un altro post.

  1. Azure - Eccezione non gestita: System.IO.FileNotFoundException

  2. Contemporaneamente l'installazione della pipeline dell'applicazione JS e la compilazione si bloccano (Express js per il server, Create-React-App per il client)

È possibile fare riferimento alla modalità di risoluzione dei problemi quando si distribuisce l'app Web tramite Action. Spero che la mia risposta possa aiutarti.