diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..b947077 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,2 @@ +node_modules/ +dist/ diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..d3e79ff --- /dev/null +++ b/Dockerfile @@ -0,0 +1,29 @@ +# Build the react project +FROM node:18-alpine as builder +WORKDIR /app + +# Install the node_modules first +COPY package*.json ./ +RUN npm ci + +# Copy the rest of the files +COPY . . + +# Build the react application +RUN npm run build + +# Runner image +FROM nginx:1.23.3-alpine + +# Copy the nginx configuration +COPY ./docker/default.conf.template /etc/nginx/templates/default.conf.template + +# Copy the built react application to the nginx folder +COPY --from=builder /app/dist /usr/share/nginx/html + +# Required NGINX env variables +ENV NGINX_ENVSUBST_OUTPUT_DIR=/etc/nginx/conf.d + +# Default env variables +ENV PORT=80 +ENV HOST=0.0.0.0 diff --git a/docker/default.conf.template b/docker/default.conf.template new file mode 100644 index 0000000..e22bf4c --- /dev/null +++ b/docker/default.conf.template @@ -0,0 +1,25 @@ +server { + listen $PORT; + + root /usr/share/nginx/html; + index index.html; + + server_tokens off; + server_name _; + + gzip on; + gzip_disable "msie6"; + + gzip_vary on; + gzip_proxied any; + gzip_comp_level 6; + gzip_buffers 16 8k; + gzip_http_version 1.1; + gzip_min_length 0; + gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript; + + location / { + try_files $uri /index.html; + } +} +