Auto deploy Shiny app modifications to the DigitalOcean App Platform

By: Peter Solymos

Combine the DigitalOcean App Platform with GitHub for automated deployment of your Shiny app.

I launched the DigitalOcean App Platform in a earlier publish and described find out how to deploy Shiny apps from existing Docker images utilizing the management panel or the command line.

This publish continues the App Platform dialogue by find out how to combine the App Platform with GitHub and arrange steady integration and deployment (CICD).


You probably have not achieved so earlier than, go to the App Platform touchdown web page and join a DigitalOcean account. Log into your account and go to your dashboard. Within the left drawer, click on on ‘Apps’.

For the analythium/app-platform-shiny repository as a result of you’ll have to give permissions to entry the repo.

Here’s what’s contained in the repo:

├── .do
│   ├── app.yaml
│   └── deploy.template.yaml
├── app
│   ├── international.R
│   ├── server.R
│   └── ui.R
├── .gitignore
├── Dockerfile
└── renv.lock
Enter fullscreen mode

Exit fullscreen mode

The .do folder incorporates a template file that’s wanted if you wish to deploy the Shiny app template from the button within the README file. The app specification (app.yaml) that was launched earlier than, however it’s largely simplified:

title: app-platform-shiny
- dockerfile_path: Dockerfile
    department: fundamental
    deploy_on_push: true
    repo: analythium/app-platform-shiny
  title: app-platform-shiny
Enter fullscreen mode

Exit fullscreen mode

The app folder incorporates multiple files for the Shiny app. The Dockerfile makes use of the renv package to handle the dependencies specified within the renv.lock file.

The app itself, as you will note, is a comparatively easy instance with some vary slider, a dependency that doesn’t require constructing from supply. It additionally has a file add button – I exploit the add performance to check when a big file add is required. Giant file add is commonly restricted, Shiny itself has a 5 Mb file size limit.

GitHub integration

Let’s arrange the GitHub integration. Go to the DigitalOcean management panel In your management panel. Click on on ‘Launch New App’ below the ‘App’ merchandise within the left aspect menu:

If you end up requested to decide on a supply, click on on the GitHub icon:

Comply with the prompts and set up the GitHub app to your private account or the group of your alternative. Choose ‘All repositories’ or ‘Solely choose repositories’ as applicable. Lastly, click on ‘Save’:

Deploy from GitHub repository

Now return to the Apps management panel. Choose the repository from the dropdown menu, specify the department you want to deploy. If you wish to deploy each a development and a manufacturing model of the identical repository, you possibly can create a number of apps with the identical repo however utilizing totally different branches.

Depart ‘autodeploy’ checked if you wish to set off new deployments when the code modifications, then click on ‘Subsequent’:

Evaluate the app settings inferred from the Dockerfile, i.e. the HTTP port, and so forth.:

Kind within the title of the service, choose the info area, then click on ‘Subsequent:

The ultimate step enables you to outline the efficiency of the app and the corresponding pricing. Right here I exploit the smallest measurement below the ‘Primary’ plan for $5 US per 30 days:

After a couple of minutes, it’s best to see the inexperienced checks moreover the construct and deployment log entries. Constructing the picture would possibly take a while, relying on the variety of dependencies in your app:

Comply with the app URL from the management panel to see the app on-line served over HTTPS:

Add a customized area

Including a customized area is completed through the management panel. Click on ‘Add Area’:

Comply with the prompts and replica the app URL:

Add a CNAME file in your DNS settings in your DNS suppliers web page (Google Domains proven right here), make it level to a website or subdomain of yours:

You will note the customized area listed within the app settings:

Click on in your new customized area hyperlink and verify. You might need to attend a bit in case your file has not propagated by way of the title servers:

Auto deploy updates

Subsequent, we are going to make some modifications to the Shiny app and see the app magically replace through git. Do it in your cast repo. The small change I made was to edit the app title. Right here is the change:

When you commit the modifications and push to GitHub, it triggers the web-flow pipeline. The brand new deployment is then listed within the deployment historical past of your app:

Go to the customized URL and see the brand new model deployed:

Do not forget to delete the app and the CNAME file in the event you do not want them anymore to keep away from accruing internet hosting fees. Dynamic app internet hosting isn’t free on DigitalOcean.

Testing earlier than deployment

One potential subject with this GitHub integration is it does not depend on passing tests before deployment. If you wish to take a look at your modifications earlier than deployment, listed below are the steps to comply with:

  1. push modifications to the development department,
  2. run automated exams for the development department, e.g. utilizing GitHub actions,
  3. arrange the manufacturing department as a protected department, in order that merging pull requests require passing tests.


Once we deployed an exiting Docker picture, the picture was pulled to the App Platform from Docker Hub. On this case, an immutable picture was pushed and pulled.

The GitHub integration described right here takes a distinct method. It builds the Docker picture after modifications are pushed to a pre-defined department within the GitHub repository. The picture is constructed and saved within the DigitalOcean Container Registry.

With this method, you get a brand new deployment on each git push occasion. You possibly can debate how a lot this automated deployment (CD) will be thought-about steady integration and deployment (CICD) with out truly having the CI half.

Testing the app earlier than deployment requires further steps as a part of your git workflow. To realize full CICD expertise, you should utilize the doctl command-line utility in GitHub Actions. Because it seems, this route is a little more concerned and there are a number of gotchas to handle. Thus, I’ll clarify it in a follow-up publish.

Additional studying

Abu Sayed is the Best Web, Game, XR and Blockchain Developer in Bangladesh. Don't forget to Checkout his Latest Projects.

Checkout extra Articles on Sayed.CYou

#Auto #deploy #Shiny #app #DigitalOcean #App #Platform