Skip to main content

React App on CloudFlow

Learn how to run a React app at the edge for low latency and high availability. You can use our repo as a template, or perform the steps yourself using the Kubernetes dashboard or kubectl commands.


Option 1 - Copy Our GitHub Repo​

workflow status

Make a new repo from our template: in your browser visit https://github.com/section/react-template and select Use this template (don't clone, don't fork, but use the template). Choose yourself as an owner, give it a name of your choice, and make it be Public (not Private).

  1. In your new GitHub repo, under Settings > Secrets > Actions, use New repository secret to add these two:
  2. Make any change to src/app.js and watch your changes go live.

Option 2 - Step by Step​

Prerequisites​

  • Docker or equivalent installed
  • A public container repository account (eg GitHub or Docker Hub)
  • (optional) An existing React app
  • (optional) kubectl

Steps​

  1. Create a Dockerfile
  2. Build & push your container image
  3. Deploy to CloudFlow

Creating your Dockerfile​

We're assuming you are either using the CloudFlow tutorial example, you have your own React app that compiles successfully, or a newly created React app eg:

npx create-react-app $NAME

Create a Dockerfile in the root folder of your app. It should sit alongside package.json, eg the following

.
├── public
│ ├── favicon.ico
│ ├── index.html
│ └── ...
├── src
│ ├── App.js
│ ├── index.js
│ └── ...
├── Dockerfile
├── package-lock.json
└── package.json

The Dockerfile's contents should be the following:

Dockerfile
FROM node:alpine as build
WORKDIR /app
ENV PATH /app/node_modules/.bin:$PATH
COPY package.json ./
COPY package-lock.json ./
RUN npm clean-install
RUN npm install react-scripts -g
COPY . ./
RUN npm run build

# production environment
FROM nginx:alpine
COPY --from=build /app/build /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]

This script would create a clean build of your React app, and host it on port 80 of a lightweight nginx image when it's run.

Building the container image​

Simply run the following command from the Dockerfile's directory to build and tag your image.

# Replace these example values
USER=cloudflow
IMAGENAME=react
TAG=0.0.1

docker build . --tag ghcr.io/$USER/$IMAGENAME:$TAG

Push your image to a repository​

We will be pushing the container image to GitHub for this example. Follow the instructions to do a docker login on your terminal before running the next command.

GITHUB_TOKEN="" # https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token

echo $GITHUB_TOKEN | docker login ghcr.io -u $GITHUB_USER --password-stdin
docker push ghcr.io/$USER/$IMAGENAME:$TAG

Deploy to CloudFlow​

Follow the steps in this doc - Deploy a Project - and simply insert your image name from before, and specify port 80.

That's it! Navigate to your project URL and you'll see your React page live.

React demo splash page