Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Nest.JS deploy to Heroku

I'm currently trying to deploy the basic starter template generated by the Nest.JS CLI (as of version 5.3.0) and seem to be getting a timeout on app startup. I'm wondering if anyone has managed to deploy to Heroku?

I'm not sure whether or not I need to include some kind of Procfile?

Also, there doesn't seem to be much info around deploying the Nest.JS

The Heroku logs when I try to deploy.

heroku[web.1]: Starting process with command `npm start`
app[web.1]: 
app[web.1]: > [email protected] start /app
app[web.1]: > ts-node -r tsconfig-paths/register src/main.ts
app[web.1]: 
app[web.1]: [Nest] 21   - 2018-10-16 06:52:17   [NestFactory] Starting Nest application...
app[web.1]: [Nest] 21   - 2018-10-16 06:52:17   [InstanceLoader] AppModule dependencies initialized +21ms
app[web.1]: [Nest] 21   - 2018-10-16 06:52:17   [RoutesResolver] AppController {/}: +48ms
app[web.1]: [Nest] 21   - 2018-10-16 06:52:17   [RouterExplorer] Mapped {/, GET} route +7ms
app[web.1]: [Nest] 21   - 2018-10-16 06:52:17   [NestApplication] Nest application successfully started +3ms
app[web.1]: Error waiting for process to terminate: No child processes
heroku[web.1]: Error R10 (Boot timeout) -> Web process failed to bind to $PORT within 60 seconds of launch
heroku[web.1]: Stopping process with SIGKILL
heroku[web.1]: Process exited with status 22
heroku[web.1]: State changed from starting to crashed
heroku[web.1]: State changed from crashed to starting

my package.json file is below...

{
  "name": "testy",
  "version": "0.0.0",
  "description": "description",
  "author": "",
  "license": "MIT",
  "scripts": {
    "format": "prettier --write \"src/**/*.ts\"",
    "start": "ts-node -r tsconfig-paths/register src/main.ts",
    "start:dev": "nodemon",
    "start:debug": "nodemon --config nodemon-debug.json",
    "prestart:prod": "rimraf dist && tsc",
    "start:prod": "node dist/main.js",
    "start:hmr": "node dist/server",
    "lint": "tslint -p tsconfig.json -c tslint.json",
    "test": "jest",
    "test:watch": "jest --watch",
    "test:cov": "jest --coverage",
    "test:e2e": "jest --config ./test/jest-e2e.json",
    "webpack": "webpack --config webpack.config.js"
  },
  "dependencies": {
    "@nestjs/common": "^5.1.0",
    "@nestjs/core": "^5.1.0",
    "reflect-metadata": "^0.1.12",
    "rxjs": "^6.2.2",
    "typescript": "^3.0.1"
  },
  "devDependencies": {
    "@nestjs/testing": "^5.1.0",
    "@types/express": "^4.16.0",
    "@types/jest": "^23.3.1",
    "@types/node": "^10.7.1",
    "@types/supertest": "^2.0.5",
    "jest": "^23.5.0",
    "nodemon": "^1.18.3",
    "prettier": "^1.14.2",
    "rimraf": "^2.6.2",
    "supertest": "^3.1.0",
    "ts-jest": "^23.1.3",
    "ts-loader": "^4.4.2",
    "ts-node": "^7.0.1",
    "tsconfig-paths": "^3.5.0",
    "tslint": "5.11.0",
    "webpack": "^4.16.5",
    "webpack-cli": "^3.1.0",
    "webpack-node-externals": "^1.7.2"
  },
  "jest": {
    "moduleFileExtensions": [
      "js",
      "json",
      "ts"
    ],
    "rootDir": "src",
    "testRegex": ".spec.ts$",
    "transform": {
      "^.+\\.(t|j)s$": "ts-jest"
    },
    "coverageDirectory": "../coverage",
    "testEnvironment": "node"
  }
}

If anyone has any experience in deploying this stack it'd be great to hear from you

like image 901
Kyle Bennett Avatar asked Oct 16 '18 07:10

Kyle Bennett


People also ask

How do I manually deploy to Heroku?

To deploy your app to Heroku, use the git push command to push the code from your local repository's main branch to your heroku remote. For example: $ git push heroku main Initializing repository, done.


1 Answers

Heroku assigns you a port by default and adds the port to the environment variables (env), so you can set the port to a fixed number, you need to change your main file to:

import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';

async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  await app.listen(process.env.PORT || 3000);
}
bootstrap();
like image 107
Juan Velasquez Avatar answered Nov 26 '22 01:11

Juan Velasquez