Radioactive
Radioactive

Reputation: 779

Unable to deploy React Application to Kubernetes

I am trying to deploy an application created using Create-React App to Kubernetes through Docker. When the docker file tries to create the container using Jenkins pipeline, it fails with the below error : "Starting the development server...

Failed to compile.

./src/index.js

Module not found: Can't resolve './App.js' in '/app/src'

The folder structure is exactly similar to the default 'create-react app' folder structure.

Also below is the Dockerfile:

FROM node:10.6.0-jessie

# set working directory
RUN mkdir /app
WORKDIR /app
COPY . .

# add `/usr/src/app/node_modules/.bin` to $PATH
#ENV PATH /usr/src/app/node_modules/.bin:$PATH

RUN npm install
#RUN npm install react-scripts -g --silent

# start app
CMD ["npm", "start"]

I am unable to understand where I might be going wrong.

Edit 1: I would also like to mention that I am able to run the docker container on my local machine using this config.

So any help would be appreciated.

Update 1 :

I was able to do a kubectl exec -it pod_name -- bash to the container inside the pod. I found out due to some reason the "App.js" file was getting copied to the container as "app.js". Since linux is case sensitive so it was not able to find the file. Changing the import statement in index.js fixed the problem. But I still have no idea as to what might have caused the file to get copied with a lower-case since in my local the file exists as "App.js".

Upvotes: 1

Views: 1077

Answers (1)

Niels de Bruin
Niels de Bruin

Reputation: 713

The problem you're having will be omitted when you adjust your deployment process to a more production-ready setup.

What you're doing currently is installing all (development) dependencies on every Kubernetes node, compiling your application, and then starting a development webserver. This makes your deployed builds inconsistent and increases load and bloat on the deployment nodes.

Instead what you want to do is create a production-ready build by running npm run build on a build machine, which will compile your application and output to the build folder in your project. You then want to transfer this folder to your server in a .zip file, which will need a production-ready webserver installed (Nginx is highly recommended and industry standard) to serve the static files from your build.

Upvotes: 1

Related Questions