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/.github/workflows/docker.yml b/.github/workflows/docker.yml new file mode 100644 index 0000000..8dea6cf --- /dev/null +++ b/.github/workflows/docker.yml @@ -0,0 +1,37 @@ +name: ci-docker + +on: + push: + branches: + - 'main' + + workflow_dispatch: + +jobs: + docker: + runs-on: ubuntu-latest + steps: + - + name: Set up QEMU + uses: docker/setup-qemu-action@v2 + + - + name: Set up Docker Buildx + uses: docker/setup-buildx-action@v2 + + - + name: Login to Github Container Registry + uses: docker/login-action@v2 + with: + username: ${{ github.repository_owner }} + password: ${{ secrets.CR_PAT }} + registry: ghcr.io + + - + name: Build and push + uses: docker/build-push-action@v4 + with: + context: . + push: true + platforms: linux/amd64,linux/arm64 + tags: ghcr.io/${{ github.repository }}:${{ github.sha }}, ghcr.io/${{ github.repository }}:latest 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; + } +} +