Every app can either be deployed stand-alone, or combined with other apps in one deployment.
Heads up! Note that most apps in the @probot organization have an official hosted app that you can use for your open source project. Use the hosted instance if you don’t want to deploy your own.
Contents:
Every deployment will need an App.
https://example.com/
for now, we’ll come back in a minute to update this with the URL of your deployed app.openssl rand -base64 32
and save it because you’ll need it in a minute to configure your deployed app.Download the private key from the app.
To deploy an app to any cloud provider, you will need 3 environment variables:
APP_ID
: the ID of the app, which you can get from the app settings page.WEBHOOK_SECRET
: the Webhook Secret that you generated when you created the app.And one of:
PRIVATE_KEY
: the contents of the private key you downloaded after creating the app, OR…PRIVATE_KEY_PATH
: the path to a private key file.PRIVATE_KEY
takes precedence over PRIVATE_KEY_PATH
.
Glitch lets you host node applications for free and edit them directly in your browser. It’s great for experimentation and entirely sufficient for simple apps.
Import from GitHub
(You will need to login with your GitHub account to enable that option). Enter the full repository name you want to import, e.g. for the welcome app it would be behaviorbot/new-issue-welcome
. The new-issue-welcome
app is a great template to get started with your own app, too!.env
file and replace its content with
APP_ID=<your app id>
WEBHOOK_SECRET=<your app secret>
PRIVATE_KEY_PATH=.data/private-key.pem
NODE_ENV=production
Replace the two <...>
placeholders with the values from your app. The .env
file cannot be accessed or seen by others.
New File
button and enter .data/private-key.pem
. Paste the content of your GitHub App’s private-key.pem
in there and save it. Files in the .data
folder cannot be seen or accessed by others, so your private key is safe.Show
button on top and paste the URL as the value of Webhook URL
. Ensure that you remove /probot
from the end of the Webhook URL
that was just pasted.Enjoy!
Bonus: You can deploy your app using glitch-deploy directly from your terminal or as continuous deployment.
Probot runs like any other Node app on Heroku. After creating the GitHub App:
Make sure you have the Heroku CLI client installed.
Clone the app that you want to deploy. e.g. git clone https://github.com/probot/stale
Create the Heroku app with the heroku create
command:
$ heroku create
Creating arcane-lowlands-8408... done, stack is cedar
http://arcane-lowlands-8408.herokuapp.com/ | git@heroku.com:arcane-lowlands-8408.git
Git remote heroku added
Go back to your app settings page and update the Webhook URL to the URL of your deployment, e.g. http://arcane-lowlands-8408.herokuapp.com/
.
Configure the Heroku app, replacing the APP_ID
and WEBHOOK_SECRET
with the values for those variables, and setting the path for the PRIVATE_KEY
:
$ heroku config:set APP_ID=aaa \
WEBHOOK_SECRET=bbb \
PRIVATE_KEY="$(cat ~/Downloads/*.private-key.pem)"
Deploy the app to heroku with git push
:
$ git push heroku master
...
-----> Node.js app detected
...
-----> Launching... done
http://arcane-lowlands-8408.herokuapp.com deployed to Heroku
Your app should be up and running! To verify that your app is receiving webhook data, you can tail your app’s logs:
$ heroku config:set LOG_LEVEL=trace
$ heroku logs --tail
Deploy Probot as a Serverless Function to ZEIT Now. After creating the GitHub App:
Install Now CLI with npm i -g now
and login with now login
Clone the app that you want to deploy. e.g. git clone https://github.com/probot/stale
Install probot-serverless-now
$ npm install probot-serverless-now
package.json
and add build
script to generate your HTML landing page, for example:
{
"scripts": {
"build": "mkdir public && echo 'Hello World' > public/index.html"
}
}
/api/index.js
with the following:
const { toLambda } = require('probot-serverless-now');
const app = require('./path/to/your/app.js');
module.exports = toLambda(app);
now.json
with the following:
{
"env": {
"APP_ID":"@probot-api-id",
"WEBHOOK_SECRET": "@probot-webhook-secret",
"PRIVATE_KEY": "@probot-private-key"
}
}
NOTE: Add LOG_LEVEL=trace
to get verbose logging, or add LOG_LEVEL=info
instead to show less details.
Run now secrets add probot-api-id aaa
, now secrets add probot-webhook-secret bbb
, now secrets add probot-private-key "$(cat ~/Downloads/*.private-key.pem | base64)"
replacing the aaa
and bbb
with the values for those variables.
Deploy with now
or connect your GitHub repository](https://zeit.co/github) to ZEIT Now and deploy on git push
.
Once the deploy is started, go back to your app settings page and update the Webhook URL to the URL of your deployment (which now
has kindly copied to your clipboard).
You can optionally add a Custom Domain and deploy to production with the following:
$ now --prod
https://your-deployment.now.sh/api
to invoke the serverless function.The Probot website includes a list of featured apps. Consider adding your app to the website so others can discover and use it.
To deploy multiple apps in one instance, create a new app that has the existing apps listed as dependencies in package.json
:
{
"name": "my-probot-app",
"private": true,
"dependencies": {
"probot-autoresponder": "probot/autoresponder",
"probot-settings": "probot/settings"
},
"scripts": {
"start": "probot run"
},
"probot": {
"apps": [
"probot-autoresponder",
"probot-settings"
]
}
}
Probot comes bundled with a client for the Sentry exception tracking platform. To enable Sentry:
SENTRY_DSN
environment variable with the DSN you retrieved.Serverless abstracts away the most menial parts of building an application, leaving developers to write code and not actively manage scaling for their applications. The Serverless Deployment section will show you how to deploy you application using functions instead of servers.
with by the picturesafe-search community
Code licensed Apache License 2.0 Documentation licensed CC-BY-4.0