How to deploy a Typescript Parse Server on Elasticbeanstalk
May, 23 2022
Now that we have our Typescript Parse Server compiling and connecting to our MonoDB database, let's get it deployed to Elasticbeanstalk.
Download and install the Elasticbeanstalk CLI and the AWS CLI.
aws configure to sign in to your account with the CLI.
Log into AWS console and create a new elastic beanstalk instance.
web server environment.
Give your new application a name:
It is helpful here to choose a specific domain rather than letting it auto generate so that we can update our Parse config. Take note of the domain that you give your instance.
Choose a Node16 environment with the default settings:
Allow the instance to be created with a sample application and click
While your environment is deploying, navigate to
./.ebextensions/app.config of your Parse Server project and update the
SERVER_URL property with the domain you specified.
./.ebextensions/app.config file contains all of the environment variables that our Elasticbeanstalk instance will be deployed with.
Here you can add the
MASTER_KEY that you want to use for production.
Note that this file should not be checked into git to keep these keys secure.
We can also update the
DATABASE_URI environment variable. You can then remove it from
./src/index.js so that we keep our connection string secure.
Configuring the Elasticbeanstalk Environment
After the sample code is deployed, we'll need to change the instance type to
❗️ This is critical, otherwise the
npm install command will fail on the server.
t2.micro is too small of an instance for Parse Server.
In the side panel of your Elasticbeanstalk console, choose the configuration option.
Scroll down until you find the capacity section and choose Edit.
Find the 'instance types' section and remove
t2.micro while keeping
t2.small or larger.
Initialize our Parse Server as an Elasticbeanstalk instance
In the project's terminal run:
Answer the prompts by selecting the specified region and project name of our new instance when prompted.
Make sure to choose
n when asked if you wish to continue with CodeCommit (assuming you are using Github).
eb init will update our
.gitignore file automatically for us.
In your root directory, create a new folder called
Add a file named
./scripts/dist.sh and fill it with the following shell command:
# If the directory, `dist`, doesn't exist, create `dist` stat dist || mkdir dist # Archive artifacts zip dist/$npm_package_name.zip -r dist package.json package-lock.json .ebextensions
Next, move on over to your
package.json file and add two new scripts:
"dist": "sh ./scripts/dist.sh", "build": "tsc"
Test them out by first running
npm run build and then running
npm run dist.
You can confirm that everything is working by confirming there's a new .zip file in your
Now we'll need to tell the Elasticbeanstalk CLI which zip to upload. Head on over to the
./elasticbeanstalk/config.yml file that was generated with the
eb init command.
Add a new stage called
deploy at the very bottom:
branch-defaults: master: environment: Parseservertutorial1-env environment-defaults: Parseservertutorial1-env: branch: null repository: null global: application_name: parse-server-tutorial-1 default_ec2_keyname: null default_platform: Node.js 16 running on 64bit Amazon Linux 2 default_region: us-east-1 include_git_submodules: true instance_profile: null platform_name: null platform_version: null profile: null sc: git workspace_type: Application # New! # Replace the "parse-server-example" with the name of your zip file deploy: artifact: dist/parse-server-example.zip
Let's try to deploy and cross our fingers.
But first make sure to commit your changes, otherwise the elasticbeanstalk CLI will not pick them up.
git add . git commit -m "inital commit" eb deploy
Once the deployment completes, you can test that your Parse Server is running as expected by running the following command:
curl --location --request POST 'http://<your domain here>/parse/functions/hello' \ --header 'X-Parse-Application-Id: <your app id here>' \
You should get a response from your
./cloud/functions.ts file with a body of:
Now you have your Typescript Parse Server running on your Elasticbeanstalk environment!
Remember to set up VPC peering to secure your database connection!