Spaces:
No application file
No application file
sammy_alx
commited on
Commit
·
1bd7b45
1
Parent(s):
95e2112
use docker compose to start apps
Browse files- .env +1 -0
- Dockerfile → app/Dockerfile +1 -14
- best_model_89.pth → app/best_model_89.pth +0 -0
- data_prep.py → app/data_prep.py +0 -0
- model.py → app/model.py +0 -0
- requirements.txt → app/requirements.txt +0 -0
- docker-compose.yml +17 -0
- web_app/.env +1 -0
- web_app/Dockerfile +5 -0
- web_app/dist/assets/index-5bee3787.js +0 -0
- web_app/dist/assets/index-e9b6d1c9.css +1 -0
- web_app/dist/index.html +15 -0
- web_app/dist/vite.svg +1 -0
- web_app/src/Drawer.tsx +1 -1
.env
ADDED
@@ -0,0 +1 @@
|
|
|
|
|
1 |
+
API_URL=http://backend:8000
|
Dockerfile → app/Dockerfile
RENAMED
@@ -16,18 +16,5 @@ RUN apt-get update && apt-get install -y libgl1-mesa-glx
|
|
16 |
|
17 |
RUN pip install --no-cache-dir --upgrade -r /code/requirements.txt
|
18 |
|
19 |
-
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "
|
20 |
|
21 |
-
FROM node:18
|
22 |
-
|
23 |
-
WORKDIR /app
|
24 |
-
|
25 |
-
COPY --chown=node:node ./web_app/* /app
|
26 |
-
|
27 |
-
RUN npm install
|
28 |
-
|
29 |
-
USER node
|
30 |
-
|
31 |
-
EXPOSE 3000
|
32 |
-
|
33 |
-
CMD ["npm", "run", "dev"]
|
|
|
16 |
|
17 |
RUN pip install --no-cache-dir --upgrade -r /code/requirements.txt
|
18 |
|
19 |
+
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
|
20 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
best_model_89.pth → app/best_model_89.pth
RENAMED
File without changes
|
data_prep.py → app/data_prep.py
RENAMED
File without changes
|
model.py → app/model.py
RENAMED
File without changes
|
requirements.txt → app/requirements.txt
RENAMED
File without changes
|
docker-compose.yml
ADDED
@@ -0,0 +1,17 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
services:
|
2 |
+
backend:
|
3 |
+
image: back-prod
|
4 |
+
build:
|
5 |
+
context: ./app
|
6 |
+
dockerfile: Dockerfile
|
7 |
+
container_name: back-prod
|
8 |
+
web_app:
|
9 |
+
image: front-prod
|
10 |
+
build:
|
11 |
+
context: ./web_app
|
12 |
+
dockerfile: Dockerfile
|
13 |
+
depends_on:
|
14 |
+
- backend
|
15 |
+
ports:
|
16 |
+
- 8080:80
|
17 |
+
container_name: front-prod
|
web_app/.env
ADDED
@@ -0,0 +1 @@
|
|
|
|
|
1 |
+
VITE_API_URL=http://backend:8000
|
web_app/Dockerfile
ADDED
@@ -0,0 +1,5 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
FROM nginx:1.20-alpine
|
2 |
+
|
3 |
+
COPY ./dist/* /usr/share/nginx/html
|
4 |
+
|
5 |
+
|
web_app/dist/assets/index-5bee3787.js
ADDED
The diff for this file is too large to render.
See raw diff
|
|
web_app/dist/assets/index-e9b6d1c9.css
ADDED
@@ -0,0 +1 @@
|
|
|
|
|
1 |
+
::-webkit-scrollbar{width:6px;border-left:0px solid #080a0c}::-webkit-scrollbar-thumb{background-color:transparent;border-radius:5px;height:10px!important}::-webkit-scrollbar-thumb:hover{background-color:#a1c8fa}*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]{display:none}*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }.m-6{margin:1.5rem}.ml-8{margin-left:2rem}.mr-16{margin-right:4rem}.mt-16{margin-top:4rem}.flex{display:flex}.grid{display:grid}.h-10{height:2.5rem}.h-12{height:3rem}.h-3{height:.75rem}.h-\[100vh\],.h-screen{height:100vh}.max-h-screen{max-height:100vh}.w-10{width:2.5rem}.w-12{width:3rem}.basis-1\/3{flex-basis:33.333333%}.grid-cols-7{grid-template-columns:repeat(7,minmax(0,1fr))}.flex-row{flex-direction:row}.items-center{align-items:center}.justify-center{justify-content:center}.gap-x-0{-moz-column-gap:0px;column-gap:0px}.gap-y-1{row-gap:.25rem}.space-x-4>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(1rem * var(--tw-space-x-reverse));margin-left:calc(1rem * calc(1 - var(--tw-space-x-reverse)))}.space-x-6>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(1.5rem * var(--tw-space-x-reverse));margin-left:calc(1.5rem * calc(1 - var(--tw-space-x-reverse)))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse: 0;border-top-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)));border-bottom-width:calc(1px * var(--tw-divide-y-reverse))}.divide-cyan-300>:not([hidden])~:not([hidden]){--tw-divide-opacity: 1;border-color:rgb(103 232 249 / var(--tw-divide-opacity))}.overflow-hidden{overflow:hidden}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-xl{border-radius:.75rem}.border{border-width:1px}.border-2{border-width:2px}.border-cyan-400{--tw-border-opacity: 1;border-color:rgb(34 211 238 / var(--tw-border-opacity))}.border-white{--tw-border-opacity: 1;border-color:rgb(255 255 255 / var(--tw-border-opacity))}.bg-cyan-600{--tw-bg-opacity: 1;background-color:rgb(8 145 178 / var(--tw-bg-opacity))}.bg-cyan-700{--tw-bg-opacity: 1;background-color:rgb(14 116 144 / var(--tw-bg-opacity))}.bg-cyan-800{--tw-bg-opacity: 1;background-color:rgb(21 94 117 / var(--tw-bg-opacity))}.p-6{padding:1.5rem}.px-4{padding-left:1rem;padding-right:1rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.pb-32{padding-bottom:8rem}.pb-8{padding-bottom:2rem}.text-center{text-align:center}.text-2xl{font-size:1.5rem;line-height:2rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-4xl{font-size:2.25rem;line-height:2.5rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.font-bold{font-weight:700}.font-semibold{font-weight:600}.font-thin{font-weight:100}.text-slate-100{--tw-text-opacity: 1;color:rgb(241 245 249 / var(--tw-text-opacity))}.text-slate-200{--tw-text-opacity: 1;color:rgb(226 232 240 / var(--tw-text-opacity))}.text-slate-50{--tw-text-opacity: 1;color:rgb(248 250 252 / var(--tw-text-opacity))}.outline-none{outline:2px solid transparent;outline-offset:2px}.first\:ml-0:first-child{margin-left:0}.hover\:bg-cyan-500:hover{--tw-bg-opacity: 1;background-color:rgb(6 182 212 / var(--tw-bg-opacity))}.hover\:text-black:hover{--tw-text-opacity: 1;color:rgb(0 0 0 / var(--tw-text-opacity))}.\[\&\:\:-webkit-progress-bar\]\:bg-slate-700::-webkit-progress-bar{--tw-bg-opacity: 1;background-color:rgb(51 65 85 / var(--tw-bg-opacity))}.\[\&\:\:-webkit-progress-value\]\:bg-cyan-400::-webkit-progress-value{--tw-bg-opacity: 1;background-color:rgb(34 211 238 / var(--tw-bg-opacity))}
|
web_app/dist/index.html
ADDED
@@ -0,0 +1,15 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<!doctype html>
|
2 |
+
<html lang="en">
|
3 |
+
<head>
|
4 |
+
<meta charset="UTF-8" />
|
5 |
+
<link rel="icon" type="image/svg+xml" href="/vite.svg" />
|
6 |
+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
7 |
+
<title>Vite + React + TS</title>
|
8 |
+
<script type="module" crossorigin src="/assets/index-5bee3787.js"></script>
|
9 |
+
<link rel="stylesheet" href="/assets/index-e9b6d1c9.css">
|
10 |
+
</head>
|
11 |
+
<body>
|
12 |
+
<div id="root"></div>
|
13 |
+
|
14 |
+
</body>
|
15 |
+
</html>
|
web_app/dist/vite.svg
ADDED
|
web_app/src/Drawer.tsx
CHANGED
@@ -50,7 +50,7 @@ const Drawer = ({canvasRef, getPredictions}: ChildComponentsProps) => {
|
|
50 |
const formData = new FormData();
|
51 |
formData.append('req', blob, 'new_image.png')
|
52 |
|
53 |
-
fetch(
|
54 |
method: 'POST',
|
55 |
body: formData
|
56 |
})
|
|
|
50 |
const formData = new FormData();
|
51 |
formData.append('req', blob, 'new_image.png')
|
52 |
|
53 |
+
fetch(`${import.meta.env.VITE_API_URL}/predict`, {
|
54 |
method: 'POST',
|
55 |
body: formData
|
56 |
})
|