From 0c3ec631f61d715b6751c4b4e5e560d829a844f1 Mon Sep 17 00:00:00 2001 From: omri Date: Sat, 13 Jul 2024 22:05:17 +0300 Subject: [PATCH] add readme and dockers and make this presentable lol --- README.md | 4 ++++ app.png | Bin 0 -> 40883 bytes backend/Dockerfile | 22 ++++++++++++++++++++++ docker-compose.yml | 18 ++++++++++++++++++ frontend/Dockerfile | 29 +++++++++++++++++++++++++++++ frontend/src/App.tsx | 28 +++++++++++++++++++++++++++- 6 files changed, 100 insertions(+), 1 deletion(-) create mode 100644 README.md create mode 100644 app.png create mode 100644 backend/Dockerfile create mode 100644 docker-compose.yml create mode 100644 frontend/Dockerfile diff --git a/README.md b/README.md new file mode 100644 index 0000000..21903c3 --- /dev/null +++ b/README.md @@ -0,0 +1,4 @@ +funny app to calculate mini guildford times +very alpha, very not working, but hey first react project + +![app.png](app.png) diff --git a/app.png b/app.png new file mode 100644 index 0000000000000000000000000000000000000000..7567d2230757550f3be5b621e292217cabcfdb43 GIT binary patch literal 40883 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 bkb{#DQGqXtrnj_!IY9_R3;2^OH{<^Sx4X~^ literal 0 HcmV?d00001 diff --git a/backend/Dockerfile b/backend/Dockerfile new file mode 100644 index 0000000..52c9cc2 --- /dev/null +++ b/backend/Dockerfile @@ -0,0 +1,22 @@ +FROM golang:1.22.3-alpine as build + +WORKDIR /app + +COPY go.mod go.sum ./ + +RUN go mod download + +# Copy the rest of the application code to the working directory +COPY . . + +RUN go build -o main . + +FROM alpine:latest + +WORKDIR /app + +COPY --from=build /app/main . + +EXPOSE 8080 + +CMD ["./main"] diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..d901251 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,18 @@ +version: '3.8' + +services: + frontend: + build: + context: ./frontend + dockerfile: Dockerfile + ports: + - "1307:80" # Map port 80 of the frontend container to port 3000 on localhost + depends_on: + - backend # Ensure backend service is started before frontend + + backend: + build: + context: ./backend + dockerfile: Dockerfile + ports: + - "1308:8080" # Map port 8080 of the backend container to port 8080 on localhost diff --git a/frontend/Dockerfile b/frontend/Dockerfile new file mode 100644 index 0000000..074a3e1 --- /dev/null +++ b/frontend/Dockerfile @@ -0,0 +1,29 @@ +# Use an official Node runtime as a parent image +FROM node:22.2-alpine as build + +# Set the working directory in the container +WORKDIR /app + +# Copy package.json and package-lock.json to the working directory +COPY package*.json ./ + +# Install dependencies +RUN npm install + +# Copy the rest of the application code to the working directory +COPY . . + +# Build the React app for production +RUN npm run build + +# Use nginx as the base image for serving content +FROM nginx:alpine + +# Copy the build output from the build stage to serve with nginx +COPY --from=build /app/build /usr/share/nginx/html + +# Expose port 80 to the Docker network +EXPOSE 80 + +# Start nginx when the container starts +CMD ["nginx", "-g", "daemon off;"] diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx index 054ad1f..10b06cf 100644 --- a/frontend/src/App.tsx +++ b/frontend/src/App.tsx @@ -1,7 +1,33 @@ import RelayForm from "./RelayForm"; import "./App.css"; +import { Layout } from "antd"; + +const { Footer: AntFooter } = Layout; const App: React.FC = () => { - return ; + return ( + <> + {" "} + + +

+ + Source Code + +

+ + + ); }; export default App;