Skip to content

Heroku

Using Pode's docker image, you can host your Pode server in Heroku.

Hosting your server in Heroku works in a similar fashion to IIS, in that Pode can detect when you're using Heroku and set the Address/Port appropriately. Furthermore, Heroku can deal with HTTPS for you, so your Pode server only needs to bind onto HTTP within the container.

Requirements

To get started you'll need the following software installed:

  • Git
  • Docker
  • Heroku CLI

You'll also need an account with Heroku.

Server

Your server will need a Dockerfile, such as the following:

FROM badgerati/pode:latest
COPY . /usr/src/app/
EXPOSE $PORT
CMD [ "pwsh", "-c", "cd /usr/src/app; ./server.ps1" ]

While Pode can detect that your server is running in Heroku, and can set your server's endpoints appropriately, the Dockerfile will need to use the $PORT variable that Heroku set.

You can set this when testing locally as follows (assuming your server is listening on port 5000 locally):

docker run -p 5000:5000 -e PORT=5000 <image-name>

The server script itself could look as follows:

Start-PodeServer {
    Add-PodeEndpoint -Address 127.0.0.1 -Port 5000 -Protocol Http

    Add-PodeRoute -Method Get -Path '/' -ScriptBlock {
        Write-PodeJsonResponse -Value @{ Response = 'Hello, world!' }
    }
}

Here we have an endpoint on localhost and port 5000; but when in Heroku Pode will automatically change the address/port for you.

Build and Push

First, login to Heroku and then its Container Registry:

heroku login
heroku container:login

Next, create an app - note that you'll need to get the app-name that is returned:

heroku create
$appName = '<app-name-from-above>'

Then, push and release your server to the created app:

heroku container:push web --app $appName
heroku container:release web --app $appName

Finally, you can open your server as follows:

heroku open --app $appName

After this, you can view the logs of the server using:

heroku logs --tail --app $appName