Skip to content

Deploy a Node.js App

Node.js is a free, open-source, cross-platform Javascript runtime environment that you can deploy on Miget in just a few steps.

Prepare the App

Clone a local version of the Miget's nodejs hello world sample application that you can then deploy to Miget. Run these commands in your local terminal:

$ git clone https://github.com/migetapp/node-js-hello-world.git
$ cd node-js-hello-world

Deploy the App

Info

A demo instance of this app is hosted at node-js.onmiget.com.

Create an App

To prepare Miget to receive your source code, you need to create an app on Miget.

On app.miget.com, click the New button to create a new app.

In the Create new App window, add the App Name.

Note

If you choose a name like example, your app will get an additional "-" and five different characters (e.g., example-1jgiq). This makes sure the name is unique.

Select the region where you want your app to be deployed.

Create new App - example

Click Create app. On success, you will be redirected to an app overview screen.

Assign Compute Power

Every app you make needs compute power. You can assign an existing Miget or get a new one.

Assign Miget - example

Click on the Assign Miget button. On the next screen, select your desired Miget and click Assign.

Select Miget - example

On success, you will be redirected to an app overview screen with a message: Compute power assigned to your app.

Deploy using Git

Get Miget Git Token

Navigate to Resources tab, select your Miget (compute power resource) and click Review

Next, you will see an Information box with a few details about your Plan, Region, etc.

Resource view - example

Click Manage git tokens button and grab your token.

Info

  • The default username for the HTTPS-based git repo is your Miget name.
  • The password is the token.
  • If you revoke the default token associated with your Miget name, you won't be able to deploy.
  • If you add a new Git token, the token name is the Username for Git, and the token itself is the Password.

Deploy Your App

Add remote repository to your git repo. In our case, navigate to previously cloned repository and add remote.

$ cd node-js-hello-world
$ git remote add miget https://git.<region>.miget.io/<your-miget-name>/<app-name>
Remember to replace <region> with a region code of your Miget, <your-miget-name> with your compute name, and <app-name> with your application name.

For proper command, navigate to Deploy tab, and grab correct command. For example:

Add miget remote - example

Push to Miget Git

 git push miget --force
Enumerating objects: 15, done.
Counting objects: 100% (15/15), done.
Delta compression using up to 16 threads
Compressing objects: 100% (11/11), done.
Writing objects: 100% (15/15), 164.84 KiB | 164.84 MiB/s, done.
Total 15 (delta 0), reused 15 (delta 0), pack-reused 0
remote:  !     no entries found in Procfile
-----> Cleaning up...
-----> Building example-1jgiq from cnb stack paketobuildpacks/builder-jammy-full (experimental)...
latest: Pulling from paketobuildpacks/builder-jammy-full
Digest: sha256:58aba0d33a107a2c478281a814f52a16ecb132dc9d28be48a5515d516c9ba2c3
Status: Image is up to date for paketobuildpacks/builder-jammy-full:latest
latest: Pulling from paketobuildpacks/run-jammy-full
Digest: sha256:29b8d6d812630b52b3bad6c83b108cc437e959d4cc7e4a94c0de927e9e9cb2ca
Status: Image is up to date for paketobuildpacks/run-jammy-full:latest
===> ANALYZING
Image with name "miget/example-1jgiq:latest" not found
===> DETECTING
target distro name/version labels not found, reading /etc/os-release file
target distro name/version labels not found, reading /etc/os-release file
target distro name/version labels not found, reading /etc/os-release file
target distro name/version labels not found, reading /etc/os-release file
target distro name/version labels not found, reading /etc/os-release file
target distro name/version labels not found, reading /etc/os-release file
target distro name/version labels not found, reading /etc/os-release file
target distro name/version labels not found, reading /etc/os-release file
target distro name/version labels not found, reading /etc/os-release file
target distro name/version labels not found, reading /etc/os-release file
target distro name/version labels not found, reading /etc/os-release file
target distro name/version labels not found, reading /etc/os-release file
target distro name/version labels not found, reading /etc/os-release file
target distro name/version labels not found, reading /etc/os-release file
target distro name/version labels not found, reading /etc/os-release file
target distro name/version labels not found, reading /etc/os-release file
target distro name/version labels not found, reading /etc/os-release file
target distro name/version labels not found, reading /etc/os-release file
target distro name/version labels not found, reading /etc/os-release file
target distro name/version labels not found, reading /etc/os-release file
target distro name/version labels not found, reading /etc/os-release file
target distro name/version labels not found, reading /etc/os-release file
target distro name/version labels not found, reading /etc/os-release file
target distro name/version labels not found, reading /etc/os-release file
target distro name/version labels not found, reading /etc/os-release file
target distro name/version labels not found, reading /etc/os-release file
target distro name/version labels not found, reading /etc/os-release file
target distro name/version labels not found, reading /etc/os-release file
======== Output: paketo-buildpacks/node-run-script@1.0.23 ========
could not find script(s) [build] in package.json
err:  paketo-buildpacks/node-run-script@1.0.23 (1)
======== Output: paketo-buildpacks/node-run-script@1.0.23 ========
could not find script(s) [build] in package.json
err:  paketo-buildpacks/node-run-script@1.0.23 (1)
======== Output: paketo-buildpacks/node-run-script@1.0.23 ========
could not find script(s) [build] in package.json
err:  paketo-buildpacks/node-run-script@1.0.23 (1)
======== Output: paketo-buildpacks/node-run-script@1.0.23 ========
could not find script(s) [build] in package.json
err:  paketo-buildpacks/node-run-script@1.0.23 (1)
======== Output: paketo-buildpacks/node-run-script@1.0.19 ========
could not find script(s) [build] in package.json
err:  paketo-buildpacks/node-run-script@1.0.19 (1)
======== Output: paketo-buildpacks/node-run-script@1.0.19 ========
could not find script(s) [build] in package.json
err:  paketo-buildpacks/node-run-script@1.0.19 (1)
5 of 11 buildpacks participating
paketo-buildpacks/ca-certificates 3.8.3
paketo-buildpacks/node-engine     4.1.1
paketo-buildpacks/npm-install     1.4.3
paketo-buildpacks/node-start      2.0.1
paketo-buildpacks/npm-start       2.0.1
===> RESTORING
===> BUILDING
target distro name/version labels not found, reading /etc/os-release file

Paketo Buildpack for CA Certificates 3.8.3
  https://github.com/paketo-buildpacks/ca-certificates
  Build Configuration:
    $BP_EMBED_CERTS                    false  Embed certificates into the image
    $BP_ENABLE_RUNTIME_CERT_BINDING    true   Deprecated: Enable/disable certificate helper layer to add certs at runtime
    $BP_RUNTIME_CERT_BINDING_DISABLED  false  Disable certificate helper layer to add certs at runtime
  Launch Helper: Contributing to layer
    Creating /layers/paketo-buildpacks_ca-certificates/helper/exec.d/ca-certificates-helper
Paketo Buildpack for Node Engine 4.1.1
  Resolving Node Engine version
    Candidate version sources (in priority order):
      package.json -> "20.x"
      <unknown>    -> ""

    Selected Node Engine version (using package.json): 20.15.0

  Executing build process
    Installing Node Engine 20.15.0
      Completed in 5.029s

  Generating SBOM for /layers/paketo-buildpacks_node-engine/node
      Completed in 2ms

  Configuring build environment
    NODE_ENV     -> "production"
    NODE_HOME    -> "/layers/paketo-buildpacks_node-engine/node"
    NODE_OPTIONS -> "--use-openssl-ca"
    NODE_VERBOSE -> "false"

  Configuring launch environment
    NODE_ENV     -> "production"
    NODE_HOME    -> "/layers/paketo-buildpacks_node-engine/node"
    NODE_OPTIONS -> "--use-openssl-ca"
    NODE_VERBOSE -> "false"

    Writing exec.d/0-optimize-memory
      Calculates available memory based on container limits at launch time.
      Made available in the MEMORY_AVAILABLE environment variable.
    Writing exec.d/1-inspector

Paketo Buildpack for NPM Install 1.4.3
  Resolving installation process
    Process inputs:
      node_modules      -> "Not found"
      npm-cache         -> "Not found"
      package-lock.json -> "Found"

    Selected NPM build process: 'npm ci'

  Executing launch environment install process
    Running 'npm ci --unsafe-perm --cache /layers/paketo-buildpacks_npm-install/npm-cache'

      added 80 packages, and audited 81 packages in 1s

      14 packages are looking for funding
        run `npm fund` for details

      found 0 vulnerabilities
      npm notice
      npm notice New minor version of npm available! 10.7.0 -> 10.8.2
      npm notice Changelog: https://github.com/npm/cli/releases/tag/v10.8.2
      npm notice To update run: npm install -g npm@10.8.2
      npm notice
      Completed in 1.175s

  Configuring launch environment
    NODE_PROJECT_PATH   -> "/workspace"
    NPM_CONFIG_LOGLEVEL -> "error"
    PATH                -> "$PATH:/layers/paketo-buildpacks_npm-install/launch-modules/node_modules/.bin"

  Generating SBOM for /layers/paketo-buildpacks_npm-install/launch-modules
      Completed in 85ms


Paketo Buildpack for Node Start 2.0.1
  Assigning launch processes:
    web (default): node index.js

Paketo Buildpack for NPM Start 2.0.1
  Assigning launch processes:
    web (default): sh /workspace/start.sh

===> EXPORTING
Adding layer 'paketo-buildpacks/ca-certificates:helper'
Adding layer 'paketo-buildpacks/node-engine:node'
Adding layer 'paketo-buildpacks/npm-install:launch-modules'
Adding layer 'buildpacksio/lifecycle:launch.sbom'
Adding 1/1 app layer(s)
Adding layer 'buildpacksio/lifecycle:launcher'
Adding layer 'buildpacksio/lifecycle:config'
Adding layer 'buildpacksio/lifecycle:process-types'
Adding label 'io.buildpacks.lifecycle.metadata'
Adding label 'io.buildpacks.build.metadata'
Adding label 'io.buildpacks.project.metadata'
Setting default process type 'web'
Saving miget/example-1jgiq:latest...
*** Images (267205752787):
      miget/example-1jgiq:latest
Adding cache layer 'paketo-buildpacks/node-engine:node'
Adding cache layer 'paketo-buildpacks/npm-install:npm-cache'
Adding cache layer 'buildpacksio/lifecycle:cache.sbom'
Successfully built image 'miget/example-1jgiq:latest'
-----> Releasing example-1jgiq...
-----> Checking for predeploy task
       No predeploy task found, skipping
-----> Checking for release task
       No release task found, skipping
-----> Pushing image to registry
       Bumping tag to 2
       Retrieving image info for app
       Tagging migetyem/example-1jgiq:2 in registry format
       Tagging migetyem/example-1jgiq as latest in registry format
       Pushing registry.eu-east-1.miget.io/migetyem/example-1jgiq:latest
The push refers to repository [registry.eu-east-1.miget.io/migetyem/example-1jgiq]
83d85471d9f8: Preparing
79553b01918c: Preparing
c60a9b82e095: Preparing
a3f73f9739ec: Preparing
fcbf9ebe8794: Preparing
36ee9da19fb1: Preparing
73c265b9abc4: Preparing
939e0326a137: Preparing
cfaaffd81c8b: Preparing
60a7c85bd839: Preparing
36ee9da19fb1: Waiting
73c265b9abc4: Waiting
939e0326a137: Waiting
cfaaffd81c8b: Waiting
a042f00cd844: Preparing
60a7c85bd839: Waiting
931b7ff0cb6f: Preparing
a042f00cd844: Waiting
a3f73f9739ec: Mounted from migetyem/node-js-hello-world-jfn9y
c60a9b82e095: Mounted from migetyem/node-js-hello-world-jfn9y
fcbf9ebe8794: Mounted from migetyem/node-js-hello-world-jfn9y
79553b01918c: Mounted from migetyem/node-js-hello-world-jfn9y
83d85471d9f8: Mounted from migetyem/node-js-hello-world-jfn9y
36ee9da19fb1: Mounted from migetyem/node-js-hello-world-jfn9y
73c265b9abc4: Mounted from migetyem/node-js-hello-world-jfn9y
cfaaffd81c8b: Mounted from migetyem/node-js-hello-world-jfn9y
939e0326a137: Mounted from migetyem/node-js-hello-world-jfn9y
60a7c85bd839: Mounted from migetyem/node-js-hello-world-jfn9y
a042f00cd844: Mounted from migetyem/node-js-hello-world-jfn9y
931b7ff0cb6f: Mounted from migetyem/node-js-hello-world-jfn9y
latest: digest: sha256:0f7d245e1d5ad20313d34342902674b88bfae1559174b96d1917216536a87a3c size: 2834
       Pushing registry.eu-east-1.miget.io/migetyem/example-1jgiq:2
The push refers to repository [registry.eu-east-1.miget.io/migetyem/example-1jgiq]
83d85471d9f8: Preparing
79553b01918c: Preparing
c60a9b82e095: Preparing
a3f73f9739ec: Preparing
fcbf9ebe8794: Preparing
36ee9da19fb1: Preparing
73c265b9abc4: Preparing
939e0326a137: Preparing
cfaaffd81c8b: Preparing
60a7c85bd839: Preparing
a042f00cd844: Preparing
931b7ff0cb6f: Preparing
36ee9da19fb1: Waiting
cfaaffd81c8b: Waiting
73c265b9abc4: Waiting
939e0326a137: Waiting
60a7c85bd839: Waiting
a042f00cd844: Waiting
931b7ff0cb6f: Waiting
79553b01918c: Layer already exists
fcbf9ebe8794: Layer already exists
c60a9b82e095: Layer already exists
83d85471d9f8: Layer already exists
a3f73f9739ec: Layer already exists
cfaaffd81c8b: Layer already exists
73c265b9abc4: Layer already exists
60a7c85bd839: Layer already exists
36ee9da19fb1: Layer already exists
939e0326a137: Layer already exists
a042f00cd844: Layer already exists
931b7ff0cb6f: Layer already exists
2: digest: sha256:0f7d245e1d5ad20313d34342902674b88bfae1559174b96d1917216536a87a3c size: 2834
       Cleaning up
       Image registry.eu-east-1.miget.io/migetyem/example-1jgiq:2 pushed
       Untagging extra tag latest
-----> Deploying example-1jgiq via the kubernetes scheduler...
=====> Deploying via kubernetes
-----> Deploying web to 1
       deployment.apps/example-1jgiq-web configured
# deploy/example-1jgiq-web added
# deploy/example-1jgiq-web rs/example-1jgiq-web-5659d69775 added
# deploy/example-1jgiq-web po/example-1jgiq-web-5659d69775-dvvc7 added
# deploy/example-1jgiq-web event: po/example-1jgiq-web-5659d69775-dvvc7 Pulling: Pulling image "registry.eu-east-1.miget.io/migetyem/example-1jgiq:2"
# deploy/example-1jgiq-web event: po/example-1jgiq-web-5659d69775-dvvc7 Pulled: Successfully pulled image "registry.eu-east-1.miget.io/migetyem/example-1jgiq:2" in 260ms (260ms including waiting)
# deploy/example-1jgiq-web event: po/example-1jgiq-web-5659d69775-dvvc7 Created: Created container example-1jgiq-web
# deploy/example-1jgiq-web event: po/example-1jgiq-web-5659d69775-dvvc7 Started: Started container example-1jgiq-web
# deploy/example-1jgiq-web event: ScalingReplicaSet: Scaled down replica set example-1jgiq-web-5dd59486d6 to 0 from 1
# deploy/example-1jgiq-web event: po/example-1jgiq-web-5dd59486d6-vdlb8 Killing: Stopping container example-1jgiq-web
# deploy/example-1jgiq-web become READY
       service/example-1jgiq-web unchanged
=====> Deploy complete
-----> Running post-deploy
-----> Checking for postdeploy task
       No postdeploy task found, skipping
=====> Application deployed:
       http://example-1jgiq.eu-east-1.migetapp.com

To https://git.eu-east-1.miget.io/migetyem/example-1jgiq
 * [new branch]      main -> main
Visit the app at the URL generated by its app name.