Posted Saturday, 23rd May 2020
Hosting a Discord bot using Heroku for free
Starting November 28th, 2022, free Heroku Dynos, free Heroku Postgres, and free Heroku Data for Redis will no longer be available.
Find our more information here.
Heroku is a powerful platform as a service (PaaS) that allows you to build, run and operate many different types of applications in the cloud.
We are going to use Heroku to deploy a Discord bot that has been written using Node.js. However, you can use the same techniques described in this article to run a bot that has been written in Ruby, Java, PHP, Python or Go on Heroku.
Heroku offers 550 free Dyno (hosting) hours for new accounts. If you add your credit card to your account, you get an additional 450 hours taking you to a total of 1000 free Dyno hours per month which is more than enough to host your Discord bot 24/7.
Deploying your bot
To get your bot up and running, we need to tell Heroku what services our bot needs and what commands to run to start the bot.
First of all, we need to tell Heroku what version of node we need. We do this by updating the engines
property in our package.json
{
"name": "discord-bot-test-js",
"version": "1.0.0",
"description": "Discord bot test",
"main": "index.js",
"engines": {
"node": "12.x",
"npm": "*"
},
"author": "Mike Wazowski (https://en.wikipedia.org/wiki/Monsters,_Inc.)",
"dependencies": {
"discord.js": "^11.5.1",
}
}
This indicates to Heroku that we need node v12 and npm to use our application.
The Profile
Next, we need to tell Heroku what commands to run on startup. This is done by a file called Procfile
that is located in the root directory of your repository.
This file contains the process and the commands to run.
service: node index.js
The Procfile can be modified to suit your bot needs. We are going to simply start our bot using node.
You can now commit your Procfile
to your repository and push it your master
branch.
Connect your repository
There are multiple ways you can deploy your code onto Heroku.
You can use Heroku CLI to connect to your git repository, use a Docker container or connect straight to your GitHub.
The easiest way is to host your repository on GitHub; go to the "Deploy" section in Heroku, connect your GitHub account to Heroku and simply enter your repository name and you're connected!
Unless you have hardcoded the credentials of your bot, you are most likely going to use environment variables to provide settings to your bot. This can be achieved by updating your projects Config Vars.
You will need to ensure that your service is checked in the "Resources" section of Heroku before you start your app.
Now that we have everything set up and ready, we can simply go to the deploy section in Heroku, and manually deploy a branch.
You can go to "More" and "View logs" and you will be able to see the log output of your bot deployment and if everything goes successfully, your bot will be up and running within minutes!
To conclude
Using Heroku, we can deploy many types of applications including a Discord bot. You can customise the deployment to fit your application requirements and use their free tier to host a basic application.
Heroku allows you to focus on the code of your application and let Heroku do the heavy lifting to host your application in the cloud.