FastAPI ๐ฆ - โ¶
๐โ ๐ ๏ธ FastAPI ๐ธ โ ๐ฏ ๐ ๐พ ๐ฆ ๐ผ. โซ๏ธ ๐ ๐จ โ๏ธ โ. ๐ ๐ช โคด๏ธ ๐ ๏ธ ๐ ๐ฆ ๐ผ 1๏ธโฃ ๐ฉโโคโ๐จ ๐ช ๐.
โ๏ธ ๐พ ๐ฆ โ๏ธ ๐ ๐ โ ๐โโ, ๐ฌ, ๐ฆ, & ๐.
Tip
๐ & โช ๐ญ ๐ ๐ฉ โ ๐ฆ Dockerfile
๐ ๐ถ.
๐ ๐ฎ ๐ถ
FROM python:3.9
WORKDIR /code
COPY ./requirements.txt /code/requirements.txt
RUN pip install --no-cache-dir --upgrade -r /code/requirements.txt
COPY ./app /code/app
CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "80"]
# If running behind a proxy like Nginx or Traefik add --proxy-headers
# CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "80", "--proxy-headers"]
โซ๏ธโ ๐ฆ¶
๐ฆ (โด๏ธ ๐พ ๐ฆ) ๐ถ ๐ฟ ๐ ๐ฆ ๐ธ โ ๐ ๐ซ ๐ & ๐ช ๐ โช ๐ง ๐ซ โ โช๏ธโก๏ธ ๐ ๐ฆ (๐ ๐ธ โ๏ธ ๐ฆฒ) ๐ โ๏ธ.
๐พ ๐ฆ ๐ โ๏ธ ๐ ๐พ ๐พ ๐ฆ (๐ฐ, ๐น ๐ฐ, โ ๐ฝ, โ๏ธ). ๐ โ ๐ ๐ซ ๐ถ ๐ฟ (๐ฌ ๐ ๐น ๐ฐ ๐ ๐ ๐โโ โ๏ธ).
๐ ๐, ๐ฆ ๐ด ๐ฅ โน, ๐ธ โญ ๐โโ ๐ ๏ธ ๐ (๐น ๐ฐ ๐ ๐ด ๐ ๐ ).
๐ฆ โ๏ธ ๐ซ ๐ โ ๐โโ ๐ ๏ธ (๐ 1๏ธโฃ ๐ ๏ธ), ๐ โ๏ธ, & ๐ธ, ๐ฌ ๐ ๏ธ, ๐โโ, ๐ ๏ธ, โ๏ธ.
โซ๏ธโ ๐ฆ ๐ผ¶
๐ฆ ๐ โช๏ธโก๏ธ ๐ฆ ๐ผ.
๐ฆ ๐ผ ๐ป โฌ ๐ ๐, ๐ ๐ข, & ๐ข ๐/๐ ๐ ๐ ๐ ๐ฆ. ๐ป ๐ฅ โ ๐ ๐ฆ ๐ผ ๐ซ ๐, โซ๏ธ ๐ซ โ ๐ ๏ธ, โซ๏ธ ๐ด ๐ฆ ๐ & ๐.
๐ "๐ฆ ๐ผ" ๐ ๐ช ๐ป ๐,"๐ฆ" ๐ ๐ ๐โโ ๐, ๐ ๐ โ ๐ ๏ธ.
๐โ ๐ฆ โถ๏ธ & ๐โโ (โถ๏ธ โช๏ธโก๏ธ ๐ฆ ๐ผ) โซ๏ธ ๐ช โ โ๏ธ ๐ ๐, ๐ ๐ข, โ๏ธ. ๐ ๐ ๐ ๐ ๐ด ๐ ๐ฆ, โ๏ธ ๐ ๐ซ ๐ฃ ๐ฝ ๐ฆ ๐ผ (๐ ๐ซ ๐ ๐พ).
๐ฆ ๐ผ โญ ๐ ๐ & ๐, โ
python
& ๐ main.py
.
& ๐ฆ โซ๏ธ (๐ ๐ฆ ๐ผ) โ ๐ ๐ ๐ผ, โญ ๐ ๏ธ. ๐, ๐ฆ ๐ ๐ด ๐โ โซ๏ธ โ๏ธ ๐ ๏ธ ๐ (& ๐ โซ๏ธ ๐ด ๐ ๐ ๏ธ). ๐ฆ โ๏ธ ๐โ ๐ค ๐ โโ ๐ ๏ธ ๐ โซ๏ธ.
๐ฆ ๐ผ¶
โ โ๏ธ 1๏ธโฃ ๐ ๐งฐ โ & ๐ ๏ธ ๐ฆ ๐ผ & ๐ฆ.
& ๐ค ๐ข โ ๐ก โฎ๏ธ ๐ค-โ ๐ ๐ฆ ๐ผ ๐ ๐งฐ, ๐, ๐ฝ, & ๐ธ.
๐ผ, ๐ค ๐ ๐ ๐ผ.
& ๐ค ๐ ๐ ๐ผ ๐ ๐ ๐ ๐ฝ, ๐ผ:
โ๏ธ ๐ค-โ ๐ฆ ๐ผ โซ๏ธ ๐ถ โฉ ๐ & โ๏ธ ๐ ๐งฐ. ๐ผ, ๐ ๐ ๐ ๐ฝ. ๐ ๐ผ, ๐ ๐ช โ๏ธ ๐ ๐ผ, & ๐ ๐ซ โฎ๏ธ ๐ ๐ข.
๐ ๐, ๐ ๐ผ ๐ ๐ช ๐ก ๐ ๐ฆ & โ & ๐ค-โ๏ธ ๐ ๐ก โฎ๏ธ ๐ ๐ ๐งฐ & ๐ฆฒ.
, ๐ ๐ ๐ ๐ ๐ฆ โฎ๏ธ ๐ ๐, ๐ ๐ฝ, ๐ ๐ธ, ๐ธ ๐ฝ โฎ๏ธ ๐ฅ ๐ธ ๐ธ, & ๐ ๐ซ ๐ฏโโ๏ธ ๐จ ๐ซ ๐ ๐ธ.
๐ ๐ฆ ๐งพ โ๏ธ (๐ โ โ๏ธ Kubernetes) โ๏ธ ๐ซ ๐ธ โ ๐ ๏ธ ๐ ๐ซ.
๐ฆ & ๐ ๏ธ¶
๐ฆ ๐ผ ๐ ๐ ๐ฎ ๐ ๐ข ๐ โ๏ธ ๐ ๐ ๐ ๐ ๐โ ๐ฆ โถ๏ธ & ๐ข ๐ถโโ๏ธ ๐ ๐. ๐ถ ๐ โซ๏ธโ ๐ ๐ฅ โซ๏ธ ๐ โธ.
๐โ ๐ฆ โถ๏ธ, โซ๏ธ ๐ ๐ ๐ ๐/๐ (๐ ๐ ๐ช ๐ โซ๏ธ & โ โซ๏ธ ๐ ๐ ๐/๐).
๐ฆ ๐ ๐ ๐ ๐ ๏ธ (๐ โ๏ธ ๐) ๐.
๐ฆ ๐ โ๏ธ ๐ ๐ ๏ธ, โ๏ธ โซ๏ธ ๐ช โถ๏ธ โณ โช๏ธโก๏ธ ๐ ๐ ๏ธ, & ๐ ๐ ๐ ๐ โ๏ธ ๐ ๐ ๏ธ ๐ ๐ฆ.
โ๏ธ โซ๏ธ ๐ซ ๐ช โ๏ธ ๐โโ ๐ฆ ๐ต ๐ 1๏ธโฃ ๐โโ ๐ ๏ธ. ๐ฅ ๐ ๐ ๏ธ โ๏ธ, ๐ฆ โ๏ธ.
๐ โ ๐ผ FastAPI¶
๐, โก๏ธ ๐ ๐ณ ๐ โ ๐ถ
๐ค ๐ ๐ฆ ๐ โ ๐ โ ๐ผ FastAPI โช๏ธโก๏ธ ๐, โ๏ธ ๐ ๐ ๐ ๐ผ.
๐ โซ๏ธโ ๐ ๐ ๐ ๐ ๐ผ, ๐ผ:
- โ๏ธ Kubernetes โ๏ธ ๐ ๐งฐ
- ๐โ ๐โโ ๐ ๐ ๐ฒ
- โ๏ธ โ ๐โ๐ฆบ ๐ ๐ ๐ ๐ฆ ๐ผ ๐, โ๏ธ.
๐ฆ ๐¶
๐ ๐ ๐ โ๏ธ ๐ฆ ๐ ๐ ๐ธ ๐.
โซ๏ธ ๐ ๐ช โด๏ธ ๐ ๐งฐ ๐ โ๏ธ โ ๐ ๐.
๐
โ ๐ โซ๏ธ โ๏ธ ๐ requirements.txt
โฎ๏ธ ๐ฆ ๐ & ๐ซ โฌ, 1๏ธโฃ ๐ โธ.
๐ ๐ โ๏ธ โ๏ธ ๐ ๐ญ ๐ โ ๐ FastAPI โฌ โ โ โฌ.
๐ผ, ๐ requirements.txt
๐ช ๐ ๐:
fastapi>=0.68.0,<0.69.0
pydantic>=1.8.0,<2.0.0
uvicorn>=0.15.0,<0.16.0
& ๐ ๐ ๐ โ ๐ ๐ฆ ๐ โฎ๏ธ pip
, ๐ผ:
$ pip install -r requirements.txt
---> 100%
Successfully installed fastapi pydantic uvicorn
Info
๐ค ๐ ๐ & ๐งฐ ๐ฌ & โ ๐ฆ ๐.
๐ค ๐ ๐ฆ ๐ ๐ผ โ๏ธ ๐ถ โช ๐ ๐. ๐ถ
โ FastAPI ๐¶
- โ
app
๐ & โ โซ๏ธ. - โ ๐ ๐
__init__.py
. - โ
main.py
๐ โฎ๏ธ:
from typing import Union
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
return {"Hello": "World"}
@app.get("/items/{item_id}")
def read_item(item_id: int, q: Union[str, None] = None):
return {"item_id": item_id, "q": q}
๐¶
๐ ๐ ๐ ๐ โ ๐ Dockerfile
โฎ๏ธ:
# (1)
FROM python:3.9
# (2)
WORKDIR /code
# (3)
COPY ./requirements.txt /code/requirements.txt
# (4)
RUN pip install --no-cache-dir --upgrade -r /code/requirements.txt
# (5)
COPY ./app /code/app
# (6)
CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "80"]
1๏ธโฃ. โถ๏ธ โช๏ธโก๏ธ ๐ ๐ ๐งข ๐ผ.
2๏ธโฃ. โ โฎ๏ธ ๐ท ๐ /code
.
๐ ๐โ ๐ฅ ๐ ๐ฎ `requirements.txt` ๐ & `app` ๐.
3๏ธโฃ. ๐ ๐ โฎ๏ธ ๐ /code
๐.
๐ **๐ด** ๐ โฎ๏ธ ๐ ๐ฅ, ๐ซ ๐ ๐.
๐ ๐ **๐ซ ๐ ๐**, โ ๐ ๐ โซ๏ธ & โ๏ธ **๐พ** ๐ ๐, ๐ ๏ธ ๐พ โญ ๐ ๐โโ๏ธ.
4๏ธโฃ. โ ๐ฆ ๐ ๐ ๐.
`--no-cache-dir` ๐ ๐ฌ `pip` ๐ซ ๐ โฌ ๐ฆ ๐, ๐ ๐ด ๐ฅ `pip` ๐ ๐ ๐ โ ๐ ๐ฆ, โ๏ธ ๐ ๐ซ ๐ผ ๐โ ๐ท โฎ๏ธ ๐ฆ.
!!! note
`--no-cache-dir` ๐ด ๐ `pip`, โซ๏ธ โ๏ธ ๐ณ โฎ๏ธ โ โ๏ธ ๐ฆ.
`--upgrade` ๐ ๐ฌ `pip` โป ๐ฆ ๐ฅ ๐ซ โช โ.
โฉ๏ธ โฎ๏ธ ๐ ๐จ ๐ ๐ช ๐ **โ ๐พ**, ๐ ๐ ๐ **โ๏ธ โ ๐พ** ๐โ ๐ช.
โ๏ธ ๐พ ๐ ๐ ๐ **๐** ๐ ๐ **๐ฐ** ๐โ ๐ ๐ผ ๐ & ๐ โฎ๏ธ ๐ ๏ธ, โฉ๏ธ **โฌ & โ** ๐ ๐ **๐ ๐ฐ**.
5๏ธโฃ. ๐ ./app
๐ ๐ /code
๐.
๐ โ๏ธ ๐ ๐ โ โซ๏ธโ **๐ ๐
๐** โ **๐พ** ๐ ๐ซ โ๏ธ ๐ โ๏ธ ๐ **๐ ๐** ๐ช.
, โซ๏ธ โ ๐ฎ ๐ **๐ ๐** `Dockerfile`, ๐ฌ ๐ฆ ๐ผ ๐ ๐ฐ.
6๏ธโฃ. โ ๐ ๐ uvicorn
๐ฝ.
`CMD` โ ๐ ๐ป, ๐ ๐ซ ๐ป โซ๏ธโ ๐ ๐ ๐ ๐ โธ ๐ฝ ๐.
๐ ๐ ๐ ๐ โช๏ธโก๏ธ **โฎ๏ธ ๐ท ๐**, ๐ `/code` ๐ ๐ โ ๐ โฎ๏ธ `WORKDIR /code`.
โฉ๏ธ ๐ ๐ โถ๏ธ `/code` & ๐ โซ๏ธ ๐ `./app` โฎ๏ธ ๐ ๐, **Uvicorn** ๐ ๐ช ๐ & **๐** `app` โช๏ธโก๏ธ `app.main`.
Tip
๐ โซ๏ธโ ๐ โธ ๐จ ๐ ๐ ๐ข ๐ญ ๐. ๐ถ
๐ ๐ ๐ โ๏ธ ๐ ๐ ๐:
.
โโโ app
โย ย โโโ __init__.py
โ โโโ main.py
โโโ Dockerfile
โโโ requirements.txt
โ ๐ค โ ๐ณ¶
๐ฅ ๐ ๐โโ ๐ ๐ฆ โ
๐ค โ ๐ณ (๐ โ) ๐ ๐ โ๏ธ Traefik, ๐ฎ ๐ --proxy-headers
, ๐ ๐ ๐ฌ Uvicorn ๐ ๐ ๐จ ๐ ๐ณ ๐ฌ โซ๏ธ ๐ ๐ธ ๐ โ
๐บ๐ธ๐, โ๏ธ.
CMD ["uvicorn", "app.main:app", "--proxy-headers", "--host", "0.0.0.0", "--port", "80"]
โ ๐พ¶
๐ค โ ๐ฑ ๐ Dockerfile
, ๐ฅ ๐ฅ ๐ ๐ โฎ๏ธ ๐ ๐, ๐ซ ๐ ๐. โก๏ธ ๐ค ๐ฌ ๐ โซ๏ธโ ๐.
COPY ./requirements.txt /code/requirements.txt
โ & ๐ ๐งฐ ๐ ๐ ๐ฆ ๐ผ ๐, ๐ฎ 1๏ธโฃ ๐งฝ ๐ ๐ ๐, โถ๏ธ โช๏ธโก๏ธ ๐ Dockerfile
& โ ๐ ๐ โ ๐ ๐ฉโ๐พ Dockerfile
.
โ & ๐ ๐งฐ โ๏ธ ๐ ๐พ ๐โ ๐ ๐ผ, ๐ฅ ๐ ๐ซ ๐ โฉ๏ธ ๐ ๐ฐ ๐ ๐ฆ ๐ผ, โคด๏ธ โซ๏ธ ๐ ๐ค-โ๏ธ ๐ ๐งฝ โ ๐ ๐ฐ, โฉ๏ธ ๐จ ๐ ๐ & ๐ ๐ ๐งฝ โช๏ธโก๏ธ ๐.
โ ๐ ๐ ๐ซ ๐ฏ ๐ ๐ ๐โโ๏ธ ๐ , โ๏ธ โฉ๏ธ โซ๏ธ โ๏ธ ๐พ ๐ ๐, โซ๏ธ ๐ช โ๏ธ ๐พ โญ ๐. ๐ผ, โซ๏ธ ๐ช โ๏ธ ๐พ ๐ฉโ๐พ ๐ โ ๐ โฎ๏ธ:
RUN pip install --no-cache-dir --upgrade -r /code/requirements.txt
๐ โฎ๏ธ ๐ฆ ๐ ๐ ๐ซ ๐ ๐. , ๐จ ๐ด ๐ ๐, โ ๐ ๐ช โ๏ธ ๐พ ๐ ๐.
& โคด๏ธ, โ ๐ ๐ช โ๏ธ ๐พ โญ ๐ ๐ โฌ & โ ๐ ๐. & ๐ฅ ๐โ ๐ฅ ๐ ๐ ๐ฐ. ๐ถ ...& โ ๐ฉ โ. ๐ถ ๐ถ
โฌ & โ ๐ฆ ๐ ๐ช โ โฒ, โ๏ธ โ๏ธ ๐พ ๐ โ ๐ฅ ๐ .
& ๐ ๐ ๐ ๐ฆ ๐ผ ๐ & ๐ โฎ๏ธ ๐ ๏ธ โ ๐ ๐ ๐ ๐ ๐ท, ๐ค ๐ ๐ ๐ฐ ๐ ๐ ๐.
โคด๏ธ, ๐ ๐ Dockerfile
, ๐ฅ ๐ ๐ ๐. ๐ โซ๏ธโ ๐ ๐ ๐, ๐ฅ ๐ฎ โซ๏ธ ๐ ๐, โฉ๏ธ ๐ ๐ง, ๐ณ โฎ๏ธ ๐ ๐ ๐ ๐ซ ๐ช โ๏ธ ๐พ.
COPY ./app /code/app
๐ โ ๐ผ¶
๐ ๐ ๐ ๐ ๐ฅ, โก๏ธ ๐ ๐ฆ ๐ผ.
- ๐ถ ๐ ๐ (๐โ ๐
Dockerfile
, โ ๐app
๐). - ๐ ๐ FastAPI ๐ผ:
$ docker build -t myimage .
---> 100%
Tip
๐ .
๐, โซ๏ธ ๐ ./
, โซ๏ธ ๐ฌ โ ๐ โ๏ธ ๐ ๐ฆ ๐ผ.
๐ ๐ผ, โซ๏ธ ๐ โฎ๏ธ ๐ (.
).
โถ๏ธ โ ๐ฆ¶
- ๐ ๐ฆ โ๏ธ ๐ ๐ ๐ผ:
$ docker run -d --name mycontainer -p 80:80 myimage
โ โซ๏ธ¶
๐ ๐ ๐ช โ โซ๏ธ ๐ โ ๐ฆ ๐, ๐ผ: http://192.168.99.100/items/5?q=somequery โ๏ธ http://127.0.0.1/items/5?q=somequery (โ๏ธ ๐, โ๏ธ ๐ โ ๐ฆ ).
๐ ๐ ๐ ๐ณ ๐:
{"item_id": 5, "q": "somequery"}
๐ ๐ ๏ธ ๐ฉบ¶
๐ ๐ ๐ช ๐ถ http://192.168.99.100/docs โ๏ธ http://127.0.0.1/docs (โ๏ธ ๐, โ๏ธ ๐ โ ๐ฆ ).
๐ ๐ ๐ ๐ง ๐ ๐ ๏ธ ๐งพ (๐ ๐ฆ ๐):
๐ ๐ ๏ธ ๐ฉบ¶
& ๐ ๐ช ๐ถ http://192.168.99.100/redoc โ๏ธ http://127.0.0.1/redoc (โ๏ธ ๐, โ๏ธ ๐ โ ๐ฆ ).
๐ ๐ ๐ ๐ ๐ง ๐งพ (๐ ๐):
๐ โ ๐ผ โฎ๏ธ ๐-๐ FastAPI¶
๐ฅ ๐ FastAPI ๐ ๐, ๐ผ, main.py
๐ต ./app
๐, ๐ ๐ ๐ ๐ช ๐ ๐ ๐:
.
โโโ Dockerfile
โโโ main.py
โโโ requirements.txt
โคด๏ธ ๐ ๐ โ๏ธ ๐ ๐ โก ๐ ๐ ๐ Dockerfile
:
FROM python:3.9
WORKDIR /code
COPY ./requirements.txt /code/requirements.txt
RUN pip install --no-cache-dir --upgrade -r /code/requirements.txt
# (1)
COPY ./main.py /code/
# (2)
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "80"]
1๏ธโฃ. ๐ main.py
๐ /code
๐ ๐ (๐ต ๐ ./app
๐).
2๏ธโฃ. ๐ Uvicorn & ๐ฌ โซ๏ธ ๐ app
๐ โช๏ธโก๏ธ main
(โฉ๏ธ ๐ญ โช๏ธโก๏ธ app.main
).
โคด๏ธ ๐ Uvicorn ๐ โ๏ธ ๐ ๐น main
โฉ๏ธ app.main
๐ FastAPI ๐ app
.
๐ ๏ธ ๐ง¶
โก๏ธ ๐ฌ ๐ ๐ ๐ ๐ ๏ธ ๐ง โ ๐ฆ.
๐ฆ โด๏ธ ๐งฐ ๐ ๐ ๏ธ ๐ & ๐ ๏ธ ๐ธ, โ๏ธ ๐ซ ๐ซ ๐ ๏ธ ๐ฏ ๐ฏ ๐ต ๐ ๐ ๏ธ ๐ง, & ๐ค ๐ ๐ช ๐.
๐ ๐ฐ ๐ โฎ๏ธ ๐ ๐ ๐ ๐ค ๐ ๐ ๐ ๐ ๏ธ ๐ง. ๐ถ
โก๏ธ ๐ ๐ ๐ ๏ธ ๐ง โ ๐ฆ:
- ๐บ๐ธ๐
- ๐โโ ๐ ๐ด
- โ
- ๐งฌ (๐ข ๐ ๏ธ ๐)
- ๐พ
- โฎ๏ธ ๐ โญ โถ๏ธ
๐บ๐ธ๐¶
๐ฅ ๐ฅ ๐ฏ ๐ ๐ฆ ๐ผ FastAPI ๐ธ (& โช ๐โโ ๐ฆ), ๐บ๐ธ๐ ๐ ๐ ๐ต ๐ โ1๏ธโฃ ๐งฐ.
โซ๏ธ ๐ช โ1๏ธโฃ ๐ฆ, ๐ผ โฎ๏ธ Traefik, ๐ ๐บ๐ธ๐ & ๐ง ๐ ๏ธ ๐.
Tip
Traefik โ๏ธ ๐ ๏ธ โฎ๏ธ โ, Kubernetes, & ๐, โซ๏ธ ๐ถ โฉ โ ๐ & ๐ ๐บ๐ธ๐ ๐ ๐ฆ โฎ๏ธ โซ๏ธ.
๐, ๐บ๐ธ๐ ๐ช ๐ต โ ๐โ๐ฆบ 1๏ธโฃ ๐ซ ๐โ๐ฆบ (โช ๐ ๐ธ ๐ฆ).
๐โโ ๐ ๐ด & โ¶
๐ค ๐ โ1๏ธโฃ ๐งฐ ๐ โถ๏ธ & ๐โโ ๐ ๐ฆ.
โซ๏ธ ๐ช โ ๐, โ โ, Kubernetes, โ ๐โ๐ฆบ, โ๏ธ.
๐
(โ๏ธ ๐) ๐ผ, ๐ค ๐
๐ ๐ ๏ธ ๐ ๐ฆ ๐ ๐ด & ๐ ๏ธ โ ๐ โ. ๐ผ, โ, โซ๏ธ ๐ โธ ๐ --restart
.
๐ต โ๏ธ ๐ฆ, โ ๐ธ ๐ ๐ ๐ด & โฎ๏ธ โ ๐ช โ & โ . โ๏ธ ๐โ ๐ท โฎ๏ธ ๐ฆ ๐ ๐ผ ๐ ๐ ๏ธ ๐ ๐ข. ๐ถ
๐งฌ - ๐ข ๐ ๏ธ¶
๐ฅ ๐ โ๏ธ ๐ ๐ฐ โฎ๏ธ โ, โ ๐ ๐ณ, ๐, โ๏ธ โ1๏ธโฃ ๐ ๐ โ๏ธ ๐ ๏ธ ๐ ๐ฆ ๐ ๐ ๐ฐ, โคด๏ธ ๐ ๐ ๐ฒ ๐ ๐ต ๐งฌ ๐ ๐ โฉ๏ธ โ๏ธ ๐ ๏ธ ๐จโ๐ผ (๐ ๐ โฎ๏ธ ๐จโ๐ญ) ๐ ๐ฆ.
1๏ธโฃ ๐ ๐ ๐ฆ ๐งพ โ๏ธ ๐ Kubernetes ๐ โ๏ธ ๐ ๏ธ ๐ ๐ ๐งฌ ๐ฆ โช ๐ ๐ โ ๐จ ๐จ. ๐ ๐ ๐.
๐ ๐ผ, ๐ ๐ ๐ฒ ๐ ๐ โ ๐ผ โช๏ธโก๏ธ ๐ ๐ฌ ๐, โ ๐ ๐, & ๐โโ ๐ Uvicorn ๐ ๏ธ โฉ๏ธ ๐โโ ๐ณ ๐ ๐ โฎ๏ธ Uvicorn ๐จโ๐ญ.
๐ โ¶
๐โ โ๏ธ ๐ฆ, ๐ ๐ ๐ โ๏ธ ๐ฆฒ ๐ ๐ ๐ โด. โซ๏ธ ๐ช ๐ฒ โ1๏ธโฃ ๐ฆ ๐ ๐ค โ ๐ณ ๐ต ๐บ๐ธ๐ โ๏ธ ๐ ๐งฐ.
๐ ๐ฆฒ ๐ โ ๐ ๐จ & ๐ ๐ ๐ช ๐จโ๐ญ (๐ค) โ ๐, โซ๏ธ ๐ ๐ค ๐ โ.
Tip
๐ ๐ค โ ๐ณ ๐ฆฒ โ๏ธ ๐บ๐ธ๐ ๐ ๐ฒ ๐ โ.
& ๐โ ๐ท โฎ๏ธ ๐ฆ, ๐ โ๏ธ ๐ โ๏ธ โถ๏ธ & ๐ ๏ธ ๐ซ ๐ โช โ๏ธ ๐ ๐งฐ ๐ถ ๐ธ ๐ป (โ ๐บ๐ธ๐ ๐จ) โช๏ธโก๏ธ ๐ ๐ โ (๐ ๐ช ๐ค โ ๐ณ) ๐ฆ(โ) โฎ๏ธ ๐ ๐ฑ.
1๏ธโฃ ๐ โ - ๐ ๐จโ๐ญ ๐ฆ¶
๐โ ๐ท โฎ๏ธ Kubernetes โ๏ธ ๐ ๐ ๐ฆ ๐งพ โ๏ธ, โ๏ธ ๐ซ ๐ ๐ธ ๐ ๏ธ ๐ โ ๐ ๐ โ ๐ ๐ ๐ ๐ โด ๐ถ ๐ป (๐จ) ๐ฒ ๐ ๐ฆ ๐ ๐ ๐ฑ.
๐ ๐ซ ๐ฆ ๐โโ ๐ ๐ฑ ๐ ๐ โ๏ธ 1๏ธโฃ ๐ ๏ธ (โ Uvicorn ๐ ๏ธ ๐ ๐ FastAPI ๐ธ). ๐ซ ๐ ๐ ๐ ๐ฆ, ๐โโ ๐ ๐, โ๏ธ ๐ โฎ๏ธ ๐ฎ ๐ ๐ ๏ธ, ๐พ, โ๏ธ. ๐ ๐ ๐ ๐ โ ๐ ๐ ๏ธ ๐ ๐ ๐ฝ, โ๏ธ ๐ ๐ฐ.
& ๐ ๐ฆ โ๏ธ โฎ๏ธ ๐ โ ๐ ๐ ๐จ ๐ 1๏ธโฃ ๐ฆ โฎ๏ธ ๐ ๐ฑ ๐. , ๐ ๐จ ๐ช ๐ต 1๏ธโฃ ๐ ๐ ๐ฆ ๐ ๐ ๐ฑ.
& ๐ ๐ ๐ โ ๐ ๐ช ๐ต ๐จ ๐ ๐ถ ๐ ๐ฑ ๐ ๐ (โ ๐ ๐, โ๏ธ ๐ฝ ๐ ๐ โก ๐ก), & ๐ ๐ถ ๐ ๐ป โถ๏ธ๏ธ ๐ฆ ๐ ๐ ๐ธ ๐โโ ๐ ๐.
1๏ธโฃ ๐ ๏ธ ๐ ๐ฆ¶
๐ ๐ ๐, ๐ ๐ฒ ๐ ๐ โ๏ธ ๐ (Uvicorn) ๐ ๏ธ ๐ ๐ฆ, ๐ ๐ โช ๐ ๐งฌ ๐ ๐.
, ๐ ๐ผ, ๐ ๐ ๐ซ ๐ โ๏ธ ๐ ๏ธ ๐จโ๐ผ ๐ ๐ โฎ๏ธ Uvicorn ๐จโ๐ญ, โ๏ธ Uvicorn โ๏ธ ๐ฎ ๐ Uvicorn ๐จโ๐ญ. ๐ ๐ ๐ โ๏ธ ๐ Uvicorn ๐ ๏ธ ๐ ๐ฆ (โ๏ธ ๐ฒ ๐ ๐ฆ).
โ๏ธ โ1๏ธโฃ ๐ ๏ธ ๐จโ๐ผ ๐ ๐ฆ (๐ โฎ๏ธ ๐ โ๏ธ Uvicorn ๐ ๏ธ Uvicorn ๐จโ๐ญ) ๐ ๐ด ๐ฎ ๐ ๐ ๐ ๐ ๐ ๐ฒ โช โ ๐ โฎ๏ธ ๐ ๐ โ๏ธ.
๐ฆ โฎ๏ธ ๐ ๐ ๏ธ & ๐ ๐ผ¶
โ๏ธ, ๐ค ๐ ๐ผ ๐โ ๐ ๐ช ๐ โ๏ธ ๐ฆ โฎ๏ธ ๐ ๐ ๏ธ ๐จโ๐ผ โถ๏ธ ๐ Uvicorn ๐จโ๐ญ ๐ ๏ธ ๐.
๐ ๐ผ, ๐ ๐ช โ๏ธ ๐ โ ๐ผ ๐ ๐ ๐ ๐ ๏ธ ๐จโ๐ผ ๐โโ ๐ Uvicorn ๐จโ๐ญ ๐ ๏ธ, & ๐ข โ ๐ ๐ข ๐จโ๐ญ โ๏ธ ๐ โฎ๏ธ ๐ฝ ๐ ๐. ๐ค ๐ ๐ฌ ๐ ๐ ๐ โซ๏ธ ๐ ๐ โ ๐ผ โฎ๏ธ ๐ - Uvicorn.
๐ฅ ๐ผ ๐โ ๐ ๐ช โ ๐:
๐ ๐ฑ¶
๐ ๐ช ๐ ๐ ๏ธ ๐จโ๐ผ ๐ฆ ๐ฅ ๐ ๐ธ ๐ ๐ฅ ๐ ๐ ๐ซ ๐ช (๐ฅ ๐ซ) ๐-๐ถ ๐ข ๐ ๏ธ ๐โโ๏ธ ๐ , & ๐ ๐ช โ๏ธ ๐ง ๐ข (โฎ๏ธ ๐ โ ๐ผ), & ๐ ๐โโ โซ๏ธ ๐ ๐ ๐ฝ, ๐ซ ๐.
โ โ¶
๐ ๐ช ๐ ๏ธ ๐ ๐ฝ (๐ซ ๐) โฎ๏ธ โ โ, ๐ ๐ซ๐ โ๏ธ โฉ ๐ ๐ ๏ธ ๐งฌ ๐ฆ (โฎ๏ธ โ โ) โช ๐ก ๐ ๐ธ & ๐ โ.
โคด๏ธ ๐ ๐ช ๐ โ๏ธ ๐ ๐ฆ โฎ๏ธ ๐ ๏ธ ๐จโ๐ผ โถ๏ธ ๐ ๐จโ๐ญ ๐ ๏ธ ๐.
๐คด & ๐ ๐ค¶
๐ ๐ช โ๏ธ ๐ ๐ค ๐ ๐ โ โซ๏ธ โฉ โ๏ธ ๐ ๐ฆ โฎ๏ธ ๐ ๐ ๏ธ โฉ๏ธ โ๏ธ ๐ ๐ฆ โฎ๏ธ ๐ ๐ ๏ธ ๐ ๐ซ.
๐ผ (๐ช ๐ ๐ ๐ฅ) ๐ ๐ช โ๏ธ ๐งฐ ๐ ๐คด ๐ญ ๐ ๐ฆ ๐ ๐ โ๏ธ ๐ ๐ ๐จ ๐ ๐.
๐ ๐ผ, ๐ฅ ๐ โ๏ธ ๐ ๐ฆ, ๐ข, ๐โ ๐คด ๐ โ โ, โซ๏ธ ๐ ๐ค ๐ ๐ ๐ฆ ๐ ๐ฐ (๐ฆ ๐ ๐ต ๐ ๐ฏ ๐จ), โฉ๏ธ ๐ค ๐ โ ๐ ๐ ๐ฆ.
โคด๏ธ, ๐ ๐ผ, โซ๏ธ ๐ช ๐ โ๏ธ 1๏ธโฃ ๐ฆ โฎ๏ธ ๐ ๐ ๏ธ, & ๐ง๐ฟ ๐งฐ (โ ๐คด ๐ญ) ๐ ๐ ๐ฆ ๐ ๐คด โ ๐ ๐ ๐ ๏ธ & ๐ฆ ๐ โ ๐ ๐ ๐ ๐ฆ.
๐ โ, ๐ ๐ ๐ซ โ ๐ฟ ๐ ๐ โ๏ธ ๐ โฉ. ๐ ๐ช โ๏ธ ๐ซ ๐ญ ๐ฌ ๐ ๐ โ๏ธ ๐ผ & ๐ญ โซ๏ธโ ๐ ๐ฏ ๐ โ๏ธ, โ ๐ โ ๐ ๏ธ ๐ง:
- ๐โโ - ๐บ๐ธ๐
- ๐โโ ๐ ๐ด
- โ
- ๐งฌ (๐ข ๐ ๏ธ ๐)
- ๐พ
- โฎ๏ธ ๐ โญ โถ๏ธ
๐พ¶
๐ฅ ๐ ๐ ๐ ๐ ๏ธ ๐ ๐ฆ ๐ ๐ โ๏ธ ๐ โ๏ธ ๐ ๐-๐ฌ, โ, & ๐ ๐ธ ๐พ ๐ด ๐ ๐ ๐ฆ (๐ ๐ 1๏ธโฃ ๐ฅ ๐ซ ๐).
& โคด๏ธ ๐ ๐ช โ ๐ ๐ ๐พ ๐ & ๐ ๐ ๐ณ ๐ ๐ฆ ๐งพ โ๏ธ (๐ผ Kubernetes). ๐ ๐ โซ๏ธ ๐ ๐ช ๐ ๐ฆ ๐ช ๐ฐ โ ๐ ๐ง ๐ธ ๐พ ๐ช ๐ซ, & ๐ธ ๐ช ๐ฐ ๐.
๐ฅ ๐ ๐ธ ๐ , ๐ ๐ ๐ฒ ๐ซ โ , & ๐ ๐ช ๐ซ ๐ช โ ๐๏ธ ๐พ ๐. โ๏ธ ๐ฅ ๐ โ๏ธ ๐ ๐พ (๐ผ โฎ๏ธ ๐ฐ ๐ซ ๐ท), ๐ ๐ โ โ ๐ ๐พ ๐ ๐ฉ & ๐ ๐ข ๐ฆ ๐ ๐ ๐ ๐ฐ (& ๐ฒ ๐ฎ ๐ ๐ฐ ๐ ๐).
๐ฅ ๐ ๐ ๐ ๐ ๏ธ ๐ ๐ฆ (๐ผ โฎ๏ธ ๐ โ ๐ผ) ๐ ๐ โ๏ธ โ ๐ญ ๐ ๐ข ๐ ๏ธ โถ๏ธ ๐ซ ๐ด ๐ ๐พ ๐ โซ๏ธโ ๐ช.
โฎ๏ธ ๐ โญ โถ๏ธ & ๐ฆ¶
๐ฅ ๐ โ๏ธ ๐ฆ (โ โ, Kubernetes), โคด๏ธ ๐ค 2๏ธโฃ ๐ ๐ฏ ๐ ๐ช โ๏ธ.
๐ ๐ฆ¶
๐ฅ ๐ โ๏ธ ๐ ๐ฆ, ๐ฒ ๐ 1๏ธโฃ ๐ ๐ ๐ ๏ธ (๐ผ, Kubernetes ๐), โคด๏ธ ๐ ๐ ๐ฒ ๐ โ๏ธ ๐ ๐ฆ ๐จ ๐ท โฎ๏ธ ๐ถ ๐ ๐ฆ, ๐ ๐ ๐ ๏ธ, โญ ๐ ๐ ๐จโ๐ญ ๐ฆ.
Info
๐ฅ ๐ โ๏ธ Kubernetes, ๐ ๐ ๐ฒ ๐ ๐ฆ.
๐ฅ ๐ โ๏ธ ๐ผ ๐ค ๐ โโ โ ๐โโ ๐ โฎ๏ธ ๐ถ ๐ ๐ฐ ๐ (๐ผ ๐ฅ ๐ ๐ซ ๐ ๐ฝ ๐ ๏ธ, โ๏ธ โ ๐ฅ ๐ฝ ๐), โคด๏ธ ๐ ๐ช ๐ฎ ๐ซ ๐ ๐ฆ โถ๏ธ๏ธ โญ โถ๏ธ ๐ ๐ ๏ธ.
๐ ๐ฆ¶
๐ฅ ๐ โ๏ธ ๐ ๐ฅ, โฎ๏ธ ๐ ๐ฆ ๐ โคด๏ธ โถ๏ธ ๐ ๐จโ๐ญ ๐ ๏ธ (โ๏ธ 1๏ธโฃ ๐ ๏ธ), โคด๏ธ ๐ ๐ช ๐ ๐ โฎ๏ธ ๐ ๐ ๐ฆ, โถ๏ธ๏ธ โญ โถ๏ธ ๐ ๏ธ โฎ๏ธ ๐ฑ. ๐ โ ๐ผ ๐โ๐ฆบ ๐ ๐.
๐ โ ๐ผ โฎ๏ธ ๐ - Uvicorn¶
๐ค ๐ โ ๐ผ ๐ ๐ ๐ ๐โโ โฎ๏ธ Uvicorn ๐จโ๐ญ, โน โฎ๏ธ ๐: ๐ฝ ๐จโ๐ญ - ๐ โฎ๏ธ Uvicorn.
๐ ๐ผ ๐ โ โด๏ธ โ ๐ฌ ๐: ๐ฆ โฎ๏ธ ๐ ๐ ๏ธ & ๐ ๐ผ.
Warning
๐ค โ ๐ค ๐ ๐ ๐ซ ๐ช ๐ ๐งข ๐ผ โ๏ธ ๐ ๐ ๐ 1๏ธโฃ, & ๐ ๐ป ๐ ๐ ๐ผ โช๏ธโก๏ธ ๐ ๐ฌ ๐: ๐ โ ๐ผ FastAPI.
๐ ๐ผ โ๏ธ ๐-๐ณ ๐ ๏ธ ๐ โ ๐ข ๐จโ๐ญ ๐ ๏ธ โ๏ธ ๐ ๐ฝ ๐ ๐ช.
โซ๏ธ โ๏ธ ๐ค ๐ข, โ๏ธ ๐ ๐ช ๐ & โน ๐ ๐ณ โฎ๏ธ ๐ ๐ข โ๏ธ ๐ณ ๐.
โซ๏ธ ๐โ๐ฆบ ๐ โฎ๏ธ ๐ โญ โถ๏ธ โฎ๏ธ โ.
Tip
๐ ๐ ๐ณ & ๐, ๐ถ โ ๐ผ ๐: Tiangolo/uvicorn-๐-fastapi.
๐ข ๐ ๏ธ ๐ ๐ โ ๐ผ¶
๐ข ๐ ๏ธ ๐ ๐ ๐ผ ๐ ๐ โช๏ธโก๏ธ ๐ฝ ๐ ๐ช.
๐ โ ๐ โซ๏ธ ๐ ๐ ๐ ๐ ๐ญ โช๏ธโก๏ธ ๐ฝ ๐ช.
๐ ๐ช ๐ โซ๏ธ โฎ๏ธ ๐ณ โ๏ธ ๐ ๐ข, โ๏ธ.
โ๏ธ โซ๏ธ โ ๐ ๐ข ๐ ๏ธ ๐ช ๐ ๐ฝ ๐ฆ ๐, ๐ธ ๐พ ๐ด ๐ ๐ช ๐ ๐.
, ๐ฅ ๐ ๐ธ ๐ด ๐ ๐พ (๐ผ โฎ๏ธ ๐ฐ ๐ซ ๐ท), & ๐ ๐ฝ โ๏ธ ๐ ๐ฝ ๐ โ๏ธ ๐ฅ ๐พ, โคด๏ธ ๐ ๐ฆ ๐ช ๐ ๐ ๐ โ๏ธ ๐ ๐พ ๐ โซ๏ธโ ๐ช, & ๐ค ๐ญ ๐ (โ๏ธ ๐ฅ). ๐ถ
โ Dockerfile
¶
๐ฅ โ ๐ ๐ โ Dockerfile
โ๏ธ ๐ ๐ ๐ผ:
FROM tiangolo/uvicorn-gunicorn-fastapi:python3.9
COPY ./requirements.txt /app/requirements.txt
RUN pip install --no-cache-dir --upgrade -r /app/requirements.txt
COPY ./app /app
๐ฆ ๐ธ¶
๐ฅ ๐ โฉ ๐ ๐ ๐ ๐ฆ ๐ธ โฎ๏ธ ๐ ๐, ๐ Dockerfile
๐ช โฉ๏ธ ๐ ๐:
FROM tiangolo/uvicorn-gunicorn-fastapi:python3.9
COPY ./requirements.txt /app/requirements.txt
RUN pip install --no-cache-dir --upgrade -r /app/requirements.txt
COPY ./app /app/app
๐โ โ๏ธ¶
๐ ๐ ๐ฒ ๐ซ โ๏ธ ๐ ๐ ๐งข ๐ผ (โ๏ธ ๐ ๐ ๐ 1๏ธโฃ) ๐ฅ ๐ โ๏ธ Kubernetes (โ๏ธ ๐) & ๐ โช โ ๐งฌ ๐ ๐, โฎ๏ธ ๐ ๐ฆ. ๐ ๐ผ, ๐ ๐ ๐ ๐ ๐ผ โช๏ธโก๏ธ ๐ ๐ฌ ๐: ๐ โ ๐ผ FastAPI.
๐ ๐ผ ๐ โ โด๏ธ ๐ ๐ผ ๐ฌ ๐ ๐ฆ โฎ๏ธ ๐ ๐ ๏ธ & ๐ ๐ผ. ๐ผ, ๐ฅ ๐ ๐ธ ๐ ๐ฅ ๐ โ ๐ข ๐ข ๐ ๏ธ โ๏ธ ๐ ๐ฝ ๐ท ๐, ๐ ๐ซ ๐ ๐ฅ โฎ๏ธ โ ๐ ๏ธ ๐งฌ ๐ ๐, & ๐ ๐ซ ๐ ๐ ๐ 1๏ธโฃ ๐ฆ โฎ๏ธ ๐ ๐ฑ. โ๏ธ ๐ฅ ๐ ๐ ๏ธ โฎ๏ธ โ โ, ๐ ๐ ๐ ๐ฝ, โ๏ธ.
๐ ๏ธ ๐ฆ ๐ผ¶
โฎ๏ธ โ๏ธ ๐ฆ (โ) ๐ผ ๐ค ๐ ๐ ๐ ๏ธ โซ๏ธ.
๐ผ:
- โฎ๏ธ โ โ ๐ ๐ฝ
- โฎ๏ธ Kubernetes ๐
- โฎ๏ธ โ ๐ ๐ณ ๐
- โฎ๏ธ โ1๏ธโฃ ๐งฐ ๐ ๐
- โฎ๏ธ โ ๐โ๐ฆบ ๐ โ ๐ ๐ฆ ๐ผ & ๐ ๏ธ โซ๏ธ
โ ๐ผ โฎ๏ธ ๐ถ¶
๐ฅ ๐ โ๏ธ ๐ถ ๐ ๏ธ ๐ ๐ ๐, ๐ ๐ช โ๏ธ โ ๐-โถ๏ธ ๐:
# (1)
FROM python:3.9 as requirements-stage
# (2)
WORKDIR /tmp
# (3)
RUN pip install poetry
# (4)
COPY ./pyproject.toml ./poetry.lock* /tmp/
# (5)
RUN poetry export -f requirements.txt --output requirements.txt --without-hashes
# (6)
FROM python:3.9
# (7)
WORKDIR /code
# (8)
COPY --from=requirements-stage /tmp/requirements.txt /code/requirements.txt
# (9)
RUN pip install --no-cache-dir --upgrade -r /code/requirements.txt
# (10)
COPY ./app /code/app
# (11)
CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "80"]
1๏ธโฃ. ๐ ๐ฅ โถ๏ธ, โซ๏ธ ๐ requirements-stage
.
2๏ธโฃ. โ /tmp
โฎ๏ธ ๐ท ๐.
๐ฅ ๐โ ๐ฅ ๐ ๐ ๐ `requirements.txt`
3๏ธโฃ. โ ๐ถ ๐ โ โถ๏ธ.
4๏ธโฃ. ๐ pyproject.toml
& poetry.lock
๐ /tmp
๐.
โฉ๏ธ โซ๏ธ โ๏ธ `./poetry.lock*` (โถ๏ธ โฎ๏ธ `*`), โซ๏ธ ๐ ๐ซ ๐ฅ ๐ฅ ๐ ๐ ๐ซ ๐ช.
5๏ธโฃ. ๐ requirements.txt
๐.
6๏ธโฃ. ๐ ๐ โถ๏ธ, ๐ณ ๐ฅ ๐ ๐ก ๐ ๐ฆ ๐ผ.
7๏ธโฃ. โ โฎ๏ธ ๐ท ๐ /code
.
8๏ธโฃ. ๐ requirements.txt
๐ /code
๐.
๐ ๐ ๐ด ๐ โฎ๏ธ โ โถ๏ธ, ๐ โซ๏ธโ ๐ฅ โ๏ธ `--from-requirements-stage` ๐ โซ๏ธ.
9๏ธโฃ. โ ๐ฆ ๐ ๐ requirements.txt
๐.
1๏ธโฃ0๏ธโฃ. ๐ app
๐ /code
๐.
1๏ธโฃ1๏ธโฃ. ๐ uvicorn
๐, ๐ฌ โซ๏ธ โ๏ธ app
๐ ๐ โช๏ธโก๏ธ app.main
.
Tip
๐ ๐ญ ๐ข ๐ โซ๏ธโ ๐ โธ ๐จ.
โ โถ๏ธ ๐ Dockerfile
๐ ๐ท ๐ ๐ฆ ๐ผ ๐ ๐ด โ๏ธ ๐ ๐ โ๏ธ โช.
๐ฅ โถ๏ธ ๐ ๐ด โ๏ธ โ ๐ถ & ๐ requirements.txt
โฎ๏ธ ๐ ๐ ๐ โช๏ธโก๏ธ ๐ถ pyproject.toml
๐.
๐ requirements.txt
๐ ๐ โ๏ธ โฎ๏ธ pip
โช โญ โถ๏ธ.
๐ ๐ฆ ๐ผ ๐ด ๐ โถ๏ธ ๐ก. โฎ๏ธ โถ๏ธ(โ) ๐ โ.
๐โ โ๏ธ ๐ถ, โซ๏ธ ๐ โ ๐ โ๏ธ โ ๐-โถ๏ธ ๐ โฉ๏ธ ๐ ๐ซ ๐ค ๐ช โ๏ธ ๐ถ & ๐ฎ ๐ โ ๐ ๐ฆ ๐ผ, ๐ ๐ด ๐ช โ๏ธ ๐ requirements.txt
๐ โ ๐ ๐ ๐.
โคด๏ธ โญ (& ๐) โถ๏ธ ๐ ๐ ๐ ๐ผ ๐ โ๏ธ ๐ ๐ ๐ ๐ฌ โญ.
โ ๐ค โ ๐ณ - ๐ถ¶
๐, ๐ฅ ๐ ๐โโ ๐ ๐ฆ โ
๐ค โ ๐ณ (๐ โ) ๐ ๐ โ๏ธ Traefik, ๐ฎ ๐ --proxy-headers
๐:
CMD ["uvicorn", "app.main:app", "--proxy-headers", "--host", "0.0.0.0", "--port", "80"]
๐¶
โ๏ธ ๐ฆ โ๏ธ (โ โฎ๏ธ โ & Kubernetes) โซ๏ธ โถ๏ธ๏ธ ๐ถ ๐ฏ ๐ต ๐ ๐ ๏ธ ๐ง:
- ๐บ๐ธ๐
- ๐โโ ๐ ๐ด
- โ
- ๐งฌ (๐ข ๐ ๏ธ ๐)
- ๐พ
- โฎ๏ธ ๐ โญ โถ๏ธ
๐ ๐ผ, ๐ ๐ฒ ๐ ๐ซ ๐ โ๏ธ ๐ ๐งข ๐ผ, & โฉ๏ธ ๐ ๐ฆ ๐ผ โช๏ธโก๏ธ ๐ 1๏ธโฃ โ๏ธ ๐ ๐ ๐ โ ๐ผ.
โ ๐
โ ๐ฉโ๐พ Dockerfile
& โ ๐พ ๐ ๐ช ๐ ๐ ๐ฐ, ๐ ๐ ๐ (& โ ๐ฉ). ๐ถ
๐ฏ ๐ ๐ผ, ๐ ๐ช ๐ โ๏ธ ๐ โ ๐ผ FastAPI. ๐ถ