Deploy a Node.js Application With App Engine in 10 Minutes!

Google Cloud’s App Engine allows you to deploy scalable web applications on a platform fully managed by Google. These applications can range from back-end services and API layers to front-end applications running on Angular and React frameworks. Google provides 28 daily hours of run time with this service for free so you can get away with some free hosting!

In this article, I will walk you through the deployment of a simple Node.js application on this App Engine platform.

Prerequisites

To follow along, you should have the following:

  1. A basic understanding of how Node.js works
  2. Node installed on your local machine
  3. A Google Cloud Platform account and a project

Let’s Build and Deploy our Application!

Create the Project

Somewhere on your local machine initialize a new Node.js project.

mkdir helloworld
cd helloworld
npm init

Create a simple execution file index.js with the following content in the helloworld folder:

const express = require('express');
const app = express();

app.get('/', (req, res) => {
  res.send('GCP App Engine!');
});

const PORT = process.env.PORT || 8080;

app.listen(PORT, () => {
  console.log(`Server listening on port ${PORT}...`);
});

Our application won’t do much and just returns a ‘GCP App Engine!’ string when called.

Add the following start script and express dependency to the created package.json file:

{
 ...
 "scripts": {
   "start": "node index.js"
 },
 "dependencies": {
   "express": "^4.16.3"
 }
}

Express is not required and I am using it to make deployment easier. The start script will be used by the App Engine to launch your application. Note that index.js matches the name of my main execution file created above.

Install dependencies (express) and make sure your app runs locally:

npm install
node index.js

Navigate to http://localhost:8080 and you should see:

Diagram by author

The application is ready to go but we need to provide some information to the App Engine so that it knows how to deploy our code. We do this using a YAML file. The configuration in this file can get pretty complicated and there are a lot of options to configure but in our case, I will keep it simple. Create a file called app.yaml  in the helloworld folder and add the following content:

runtime: nodejs14
env: standard
instance_class: F1
automatic_scaling:
  min_idle_instances: automatic
  max_idle_instances: automatic
  min_pending_latency: automatic
  max_pending_latency: automatic

My Node.js runtime is version is 14.16.0, feel free to change the runtime if your version is different.  We will be using a standard environment and an F1 instance as these are covered by GCP's free quota.

At this point, you should have the below file structure and we are ready to start migrating our code to GCP.

├── helloworld
│ ├── index.js
│ ├── package.json
│ ├── app.yaml

Migrate your Code

Before deploying the application you will need to make the code available to GCP. You can do this by leveraging Cloud SDK on your local machine or by using the Cloud Shell as I will be doing in this walk-through.

I will be using a Cloud Storage bucket to stage my code before pushing it to the App Engine. Create a new bucket to house your source code (you can reuse an existing bucket if desired). For the region you should set Regional and the rest of the settings can be left default. In my case, I am creating a bucket called sample-code-repo and uploading the entire helloworld folder to the root.

Diagram by author

Next, we need to get the code uploaded to the Cloud Shell VM, you can do this by opening the Cloud Shell terminal from any GCP console page or just click here.

Diagram by author

To create the required folder structure on the Cloud Shell VM and sync the code from the bucket run the following commands, replacing sample-code-repo/helloworld with <source-code-bucket-name>/<app-folder-name> :

mkdir helloworld
cd helloworld
gsutil rsync -r gs://sample-code-repo/helloworld .

You will be asked to authorize the bucket access (pop-up) and once done running the ls command should confirm data replication:

Diagram by author

If you have another preferred method to migrate code to Cloud Shell (e.g. git), feel free to use it. At this point, our project is ready for deployment.

Deploy the App

To deploy the application on the App Engine we need to head back to our Cloud Shell VM and run the following:

cd helloworld
gcloud app deploy

For your first App Engine deployment you will need to specify a region - I used us-central for mine.  The code will take a minute to compile and once done running gcloud app browse will output a link that you can use to access your now deployed application!

Diagram by author

Conclusion

Google’s App Engine is a great platform for rapidly deploying applications online at no cost. In this article, I walked you through how this platform can be used for Node.js applications but the same result can be accomplished with Java, Python, PHP, and Go. I hope that you were able to learn something from this post.

Good luck and happy coding!