Static React App
Sample App
See sample apps directory for a ready to deploy React App. While the example given in that directory is great, if your server doesn't have enough RAM and your package.json has too many dependencies, your build process may crash on your server when it runs out of memory. In that case, you can follow the steps give below to build your app on your own local machine (e.g., your laptop) and deploy the built code to the server.
Build on Local Machine
Here is a small step-by-step guide to deploy a create-react-app
as a static site.
Unlike the regular caprover deploy
that would deploy source files on a NodeJS
container then build your app and run a small node server to serve your files, this guide shows how you can build locally and deploy the static bundle in a simple static server container.
The big advantage of this technique is that the build happens on your machine where you already have node_modules
and probably more computing power than on your server. You also only upload minified files and not the entire codebase. Because of these, the deployment is way faster and less computing intensive for your server.
While this guide uses create-react-app
as an example, you can apply the same technique for any static project (VueJS, Parcel, Angular...).
Build your app
The first thing you have to do is to build your app for production.
npm run build
captain-definition
Create Then create a captain-definition
at the root of your project:
{
"schemaVersion": 2,
"dockerfileLines": [
"FROM socialengine/nginx-spa:latest",
"COPY ./build /app",
"RUN chmod -R 777 /app"
]
}
This captain-definition
uses socialengine/nginx-spa
which is a simple static ngninx server that handle pushState
(every request is routed to /index.html
so you can use frontend routing).
Note: If your build
output in a different folder than build
you need to change the COPY ./build /app
into COPY ./[my-output-folder] /app
tar
file
Create the Now you need to create a tar
file, usually you don't have to do this because caprover deploy
create one from you git repository but here we don't want to put the content of our repository in the tar
but only the static files and captain-definition
file.
tar -cvf ./deploy.tar --exclude='*.map' ./captain-definition ./build/*
Note: If your build
output in a different folder than build
you need to replace ./build/*
with ./[my-output-folder]/*
Note: We also exclude .map
files because these are usually quite big and make the upload longer. If you want .map
files in production just remove the --exclude='*.map'
.
Tip: Add deploy.tar
to your .gitignore
to avoid accidentally pushing it ๐
caprover
Deploy with Now all we have to do is to use the caprover
CLI with a -t
argument to use our own tar
file instead of the one made from the git repo.
caprover deploy -t ./deploy.tar
Then answer the questions as usual, wait for the upload and ๐