From 466b9ea8db60df8d80c216cd8b1f42ea93619300 Mon Sep 17 00:00:00 2001 From: Humenius Date: Mon, 1 Jun 2020 16:09:57 +0200 Subject: [PATCH] Make website Docker ready --- .drone.yml | 25 ++++++++++++++++++++ backend/Dockerfile | 12 ++++++++++ docker-compose.yml | 48 +++++++++++++++++++++++++++++++++++++++ frontend/Dockerfile | 15 ++++++++++++ frontend/Dockerfile.dev | 10 ++++++++ frontend/nginx/nginx.conf | 12 ++++++++++ frontend/package.json | 2 +- 7 files changed, 123 insertions(+), 1 deletion(-) create mode 100644 .drone.yml create mode 100644 backend/Dockerfile create mode 100644 docker-compose.yml create mode 100644 frontend/Dockerfile create mode 100644 frontend/Dockerfile.dev create mode 100644 frontend/nginx/nginx.conf diff --git a/.drone.yml b/.drone.yml new file mode 100644 index 0000000..962f6f1 --- /dev/null +++ b/.drone.yml @@ -0,0 +1,25 @@ +kind: pipeline +type: docker +name: default + +steps: + - name: Build and push frontend image + image: plugins/docker + settings: + username: + from_secret: docker_username + password: + from_secret: docker_password + dockerfile: frontend/Dockerfile + repo: docker.humenius.me/humenius/ts-onlinetime-ranks-frontend + tags: latest + - name: Build and push backend image + image: plugins/docker + settings: + username: + from_secret: docker_username + password: + from_secret: docker_password + dockerfile: backend/Dockerfile + repo: docker.humenius.me/humenius/ts-onlinetime-ranks-backend + tags: latest diff --git a/backend/Dockerfile b/backend/Dockerfile new file mode 100644 index 0000000..669f71a --- /dev/null +++ b/backend/Dockerfile @@ -0,0 +1,12 @@ +FROM node:alpine AS builder +WORKDIR /app +COPY ./package.json ./ +RUN npm install +COPY . . +RUN npm run build + +FROM node:alpine +WORKDIR /app +COPY --from=builder /app ./ +CMD ["npm", "run", "start:prod"] + diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..5c31b1b --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,48 @@ +version: '3.7' + +services: + frontend: + image: docker.humenius.me/humenius/ts-onlinetime-ranks-frontend:latest + networks: + - proxy + labels: + - traefik.enable=true + + # HTTP + Redirect + - traefik.http.routers.aboutme.entrypoints=http + - traefik.http.routers.aboutme.rule=Host(`tsotr.humenius.me`) + - traefik.http.routers.aboutme.middlewares=aboutme-https-redirect + - traefik.http.middlewares.aboutme-https-redirect.redirectscheme.scheme=https + + # HTTPS + Port + network + - traefik.http.routers.aboutme-secure.entrypoints=https + - traefik.http.routers.aboutme-secure.rule=(`tsotr.humenius.me`) + - traefik.http.routers.aboutme-secure.tls=true + - traefik.http.routers.aboutme-secure.tls.certresolver=http + - traefik.http.services.aboutme.loadbalancer.server.port=80 + - traefik.docker.network=proxy + + backend: + image: docker.humenius.me/humenius/ts-onlinetime-ranks-backend:latest + networks: + - proxy + labels: + - traefik.enable=true + + # HTTP + Redirect + - traefik.http.routers.aboutme.entrypoints=http + - traefik.http.routers.aboutme.rule=(Host(`tsotr.humenius.me`) && Path(`/api`)) + - traefik.http.routers.aboutme.middlewares=aboutme-https-redirect + - traefik.http.middlewares.aboutme-https-redirect.redirectscheme.scheme=https + + # HTTPS + Port + network + - traefik.http.routers.aboutme-secure.entrypoints=https + - traefik.http.routers.aboutme-secure.rule=(Host(`tsotr.humenius.me`) && Path(`/api`)) + - traefik.http.routers.aboutme-secure.tls=true + - traefik.http.routers.aboutme-secure.tls.certresolver=http + - traefik.http.services.aboutme.loadbalancer.server.port=3500 + - traefik.docker.network=proxy + +networks: + proxy: + external: true diff --git a/frontend/Dockerfile b/frontend/Dockerfile new file mode 100644 index 0000000..2692525 --- /dev/null +++ b/frontend/Dockerfile @@ -0,0 +1,15 @@ +FROM node:alpine as builder +WORKDIR '/app' +COPY ./package.json ./ +RUN yarn +COPY . . +RUN yarn build + +FROM nginx:alpine +LABEL maintainer="Kevin Reis " + +COPY --from=builder /app/build /usr/share/nginx/html +COPY nginx/nginx.conf /etc/nginx/conf.d + +EXPOSE 80 +CMD ["nginx", "-g", "daemon off;"] diff --git a/frontend/Dockerfile.dev b/frontend/Dockerfile.dev new file mode 100644 index 0000000..72dc03d --- /dev/null +++ b/frontend/Dockerfile.dev @@ -0,0 +1,10 @@ +FROM node:alpine + +WORKDIR '/app' + +COPY package.json . +RUN yarn + +COPY . . + +CMD ["yarn", "start"] diff --git a/frontend/nginx/nginx.conf b/frontend/nginx/nginx.conf new file mode 100644 index 0000000..2c7e7d1 --- /dev/null +++ b/frontend/nginx/nginx.conf @@ -0,0 +1,12 @@ +server { + listen 80; + location / { + root /usr/share/nginx/html; + index index.html index.htm; + try_files $uri $uri/ /index.html; + } + error_page 500 502 503 504 /50x.html; + location = /50x.html { + root /usr/share/nginx/html; + } +} diff --git a/frontend/package.json b/frontend/package.json index 477eafa..b3e4089 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -2,7 +2,7 @@ "name": "ts-onlinetime-ranks", "version": "0.1.0", "private": true, - "proxy": "http://localhost:3500", + "proxy": "http://tsotr.humenius.me/api", "dependencies": { "@testing-library/jest-dom": "^4.2.4", "@testing-library/react": "^9.3.2",