AxL95 commited on
Commit
fdb21d8
·
1 Parent(s): 7a70599

ajout fastapi react

Browse files
Files changed (3) hide show
  1. Dockerfile +30 -9
  2. app.py +52 -3
  3. requirements.txt +3 -1
Dockerfile CHANGED
@@ -1,16 +1,37 @@
1
- # Read the doc: https://huggingface.co/docs/hub/spaces-sdks-docker
2
- # you will also find guides on how best to write your Dockerfile
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3
 
4
- FROM python:3.9
 
 
5
 
6
  RUN useradd -m -u 1000 user
 
 
 
 
7
  USER user
8
- ENV PATH="/home/user/.local/bin:$PATH"
 
9
 
10
- WORKDIR /app
11
 
12
- COPY --chown=user ./requirements.txt requirements.txt
13
- RUN pip install --no-cache-dir --upgrade -r requirements.txt
 
 
 
14
 
15
- COPY --chown=user . /app
16
- CMD ["uvicorn", "app:app", "--host", "0.0.0.0", "--port", "7860"]
 
1
+ FROM node:20-alpine AS builder
2
+ RUN apk add --no-cache libc6-compat
3
+ WORKDIR /app
4
+
5
+ # Install dependencies based on the preferred package manager
6
+ COPY frontend .
7
+ RUN \
8
+ if [ -f yarn.lock ]; then yarn --frozen-lockfile; \
9
+ elif [ -f package-lock.json ]; then npm ci; \
10
+ elif [ -f pnpm-lock.yaml ]; then yarn global add pnpm && pnpm i --frozen-lockfile; \
11
+ else echo "Lockfile not found." && exit 1; \
12
+ fi
13
+
14
+ RUN npm run build
15
+ FROM python:3.10-slim AS backend
16
+ WORKDIR /app
17
 
18
+ RUN apt-get update && apt-get install --no-install-recommends -y \
19
+ git ffmpeg curl gnupg \
20
+ && apt-get clean && rm -rf /var/lib/apt/lists/*
21
 
22
  RUN useradd -m -u 1000 user
23
+
24
+ COPY ./requirements.txt .
25
+ RUN pip install --no-cache-dir --upgrade -r /app/requirements.txt
26
+
27
  USER user
28
+ ENV HOME=/home/user \
29
+ PATH=/home/user/.local/bin:$PATH
30
 
 
31
 
32
+ WORKDIR $HOME/app
33
+ COPY --from=builder /app/build ./static
34
+ COPY . .
35
+
36
+ CMD ["python", "app.py"]
37
 
 
 
app.py CHANGED
@@ -1,7 +1,56 @@
1
  from fastapi import FastAPI
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2
 
3
  app = FastAPI()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4
 
5
- @app.get("/")
6
- def greet_json():
7
- return {"Hello": "World!"}
 
 
 
 
 
 
 
1
  from fastapi import FastAPI
2
+ from fastapi.middleware.cors import CORSMiddleware
3
+ from fastapi.responses import JSONResponse
4
+ from fastapi.staticfiles import StaticFiles
5
+ import numpy as np
6
+ import argparse
7
+ import os
8
+
9
+ HOST = os.environ.get("API_URL", "0.0.0.0")
10
+ PORT = os.environ.get("PORT", 7860)
11
+ parser = argparse.ArgumentParser()
12
+ parser.add_argument("--host", default=HOST)
13
+ parser.add_argument("--port", type=int, default=PORT)
14
+ parser.add_argument("--reload", action="store_true", default=True)
15
+ parser.add_argument("--ssl_certfile")
16
+ parser.add_argument("--ssl_keyfile")
17
+ args = parser.parse_args()
18
 
19
  app = FastAPI()
20
+ app.add_middleware(
21
+ CORSMiddleware,
22
+ allow_origins=["*"],
23
+ allow_credentials=True,
24
+ allow_methods=["*"],
25
+ allow_headers=["*"],
26
+ )
27
+
28
+
29
+ @app.get("/invert")
30
+ async def invert(text: str):
31
+ return {
32
+ "original": text,
33
+ "inverted": text[::-1],
34
+ }
35
+
36
+
37
+ @app.get("/data")
38
+ async def get_data():
39
+ data = {"data": np.random.rand(100).tolist()}
40
+ return JSONResponse(data)
41
+
42
+
43
+ app.mount("/", StaticFiles(directory="static", html=True), name="static")
44
+
45
+ if __name__ == "__main__":
46
+ import uvicorn
47
 
48
+ print(args)
49
+ uvicorn.run(
50
+ "app:app",
51
+ host=args.host,
52
+ port=args.port,
53
+ reload=args.reload,
54
+ ssl_certfile=args.ssl_certfile,
55
+ ssl_keyfile=args.ssl_keyfile,
56
+ )
requirements.txt CHANGED
@@ -1,2 +1,4 @@
1
  fastapi
2
- uvicorn[standard]
 
 
 
1
  fastapi
2
+ uvicorn[standard]
3
+ torch==2.1.*
4
+ transformers==4.*