From: Motov Yurii <109919500+YuriiMotov@users.noreply.github.com>
Date: Tue, 30 Sep 2025 11:24:39 +0000 (+0200)
Subject: 🌐 Update Russian translations for existing pages (LLM-generated) (#14123)
X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=977abe239662203ab0ea3b089092f94d3526e8fd;p=thirdparty%2Ffastapi%2Ffastapi.git
🌐 Update Russian translations for existing pages (LLM-generated) (#14123)
* Update Russian translations for modified pages
* docs: fix translation for multiprocessing
* Update Russian translations for other existing pages
* Apply changes from latest PRs: 13917 and 14099
---------
Co-authored-by: vldmrdev <70532790+vldmrdev@users.noreply.github.com>
---
diff --git a/docs/ru/docs/about/index.md b/docs/ru/docs/about/index.md
index 1015b667a8..4f48266a7a 100644
--- a/docs/ru/docs/about/index.md
+++ b/docs/ru/docs/about/index.md
@@ -1,3 +1,3 @@
-# РпÑоекÑе
+# РпÑоекÑе { #about }
-FastAPI: внÑÑÑеннее ÑÑÑÑойÑÑво, повлиÑвÑие ÑеÑ
нологии и вÑÑ Ñакое пÑоÑее. ð¤
+Ð FastAPI, его дизайне, иÑÑоÑникаÑ
вдоÑ
Ð½Ð¾Ð²ÐµÐ½Ð¸Ñ Ð¸ многом дÑÑгом. ð¤
diff --git a/docs/ru/docs/advanced/additional-status-codes.md b/docs/ru/docs/advanced/additional-status-codes.md
index aab1f8ee38..7c73cf5d5d 100644
--- a/docs/ru/docs/advanced/additional-status-codes.md
+++ b/docs/ru/docs/advanced/additional-status-codes.md
@@ -1,28 +1,28 @@
-# ÐополниÑелÑнÑе ÑÑаÑÑÑ ÐºÐ¾Ð´Ñ
+# ÐополниÑелÑнÑе ÑÑаÑÑÑ-ÐºÐ¾Ð´Ñ { #additional-status-codes }
-Ðо ÑмолÑÐ°Ð½Ð¸Ñ **FastAPI** возвÑаÑÐ°ÐµÑ Ð¾ÑвеÑÑ, иÑполÑзÑÑ `JSONResponse`, помеÑÐ°Ñ ÑодеÑжимое, коÑоÑое Ð²Ñ Ð²Ð¾Ð·Ð²ÑаÑаеÑе из ваÑей *опеÑаÑии пÑÑи*, внÑÑÑÑ ÑÑого `JSONResponse`.
+Ðо ÑмолÑÐ°Ð½Ð¸Ñ **FastAPI** бÑÐ´ÐµÑ Ð²Ð¾Ð·Ð²ÑаÑаÑÑ Ð¾ÑвеÑÑ, иÑполÑзÑÑ `JSONResponse`, помеÑÐ°Ñ ÑодеÑжимое, коÑоÑое Ð²Ñ Ð²Ð¾Ð·Ð²ÑаÑаеÑе из ваÑей *опеÑаÑии пÑÑи*, внÑÑÑÑ ÑÑого `JSONResponse`.
-Ðн бÑÐ´ÐµÑ Ð¸ÑполÑзоваÑÑ ÐºÐ¾Ð´ ÑÑаÑÑÑа по ÑмолÑÐ°Ð½Ð¸Ñ Ð¸Ð»Ð¸ ÑоÑ, коÑоÑÑй Ð²Ñ ÑкажеÑе в ваÑей *опеÑаÑии пÑÑи*.
+Ðн бÑÐ´ÐµÑ Ð¸ÑполÑзоваÑÑ ÑÑаÑÑÑ-код по ÑмолÑÐ°Ð½Ð¸Ñ Ð¸Ð»Ð¸ ÑоÑ, коÑоÑÑй Ð²Ñ ÑкажеÑе в ваÑей *опеÑаÑии пÑÑи*.
-## ÐополниÑелÑнÑе ÑÑаÑÑÑ ÐºÐ¾Ð´Ñ
+## ÐополниÑелÑнÑе ÑÑаÑÑÑ-ÐºÐ¾Ð´Ñ { #additional-status-codes_1 }
-ÐÑли Ð²Ñ Ñ
оÑиÑе возвÑаÑаÑÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑй ÑÑаÑÑÑ ÐºÐ¾Ð´ помимо оÑновного, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе ÑделаÑÑ ÑÑо, возвÑаÑÐ°Ñ Ð¾Ð±ÑÐµÐºÑ `Response` напÑÑмÑÑ, как `JSONResponse`, и ÑÑÑÐ°Ð½Ð°Ð²Ð»Ð¸Ð²Ð°Ñ Ð½ÑжнÑй ÑÑаÑÑÑ ÐºÐ¾Ð´ напÑÑмÑÑ.
+ÐÑли Ð²Ñ Ñ
оÑиÑе возвÑаÑаÑÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑе ÑÑаÑÑÑ-ÐºÐ¾Ð´Ñ Ð¿Ð¾Ð¼Ð¸Ð¼Ð¾ оÑновного, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе ÑделаÑÑ ÑÑо, возвÑаÑÐ°Ñ `Response` напÑÑмÑÑ, напÑÐ¸Ð¼ÐµÑ `JSONResponse`, и ÑÑÑÐ°Ð½Ð°Ð²Ð»Ð¸Ð²Ð°Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑй ÑÑаÑÑÑ-код напÑÑмÑÑ.
-ÐапÑимеÑ, Ñкажем, Ð²Ñ Ñ
оÑиÑе ÑоздаÑÑ *опеÑаÑÐ¸Ñ Ð¿ÑÑи*, коÑоÑÐ°Ñ Ð¿Ð¾Ð·Ð²Ð¾Ð»ÑÐµÑ Ð¾Ð±Ð½Ð¾Ð²Ð»ÑÑÑ ÑлеменÑÑ Ð¸ возвÑаÑÐ°ÐµÑ HTTP-код 200 "OK" пÑи ÑÑпеÑном вÑполнении.
+ÐапÑимеÑ, пÑедположим, ÑÑо Ð²Ñ Ñ
оÑиÑе имеÑÑ *опеÑаÑÐ¸Ñ Ð¿ÑÑи*, коÑоÑÐ°Ñ Ð¿Ð¾Ð·Ð²Ð¾Ð»ÑÐµÑ Ð¾Ð±Ð½Ð¾Ð²Ð»ÑÑÑ ÑлеменÑÑ Ð¸ возвÑаÑÐ°ÐµÑ HTTP ÑÑаÑÑÑ-код 200 «OK» пÑи ÑÑпеÑном вÑполнении.
-Ðо Ð²Ñ Ñакже Ñ
оÑиÑе, ÑÑÐ¾Ð±Ñ Ð¾Ð½Ð° пÑинимала новÑе ÑлеменÑÑ. РеÑли ÑÐ»ÐµÐ¼ÐµÐ½Ñ Ñанее не ÑÑÑеÑÑвовал, он ÑоздаÑÑÑÑ, и возвÑаÑалÑÑ HTTP-код 201 "Created".
+Ðо Ð²Ñ Ñакже Ñ
оÑиÑе, ÑÑÐ¾Ð±Ñ Ð¾Ð½Ð° пÑинимала новÑе ÑлеменÑÑ. РеÑли ÑлеменÑÑ Ñанее не ÑÑÑеÑÑвовали, она ÑоздаÑÑ Ð¸Ñ
и возвÑаÑÐ°ÐµÑ HTTP ÑÑаÑÑÑ-код 201 «Created».
-ЧÑÐ¾Ð±Ñ ÑеализоваÑÑ ÑÑо, импоÑÑиÑÑйÑе `JSONResponse` и возвÑаÑайÑе Ð²Ð°Ñ ÐºÐ¾Ð½ÑÐµÐ½Ñ Ð½Ð°Ð¿ÑÑмÑÑ, ÑÑÑÐ°Ð½Ð°Ð²Ð»Ð¸Ð²Ð°Ñ Ð½ÑжнÑй `status_code`:
+ЧÑÐ¾Ð±Ñ Ð´Ð¾Ð±Ð¸ÑÑÑÑ ÑÑого, импоÑÑиÑÑйÑе `JSONResponse` и веÑниÑе ÑÑда Ñвой конÑÐµÐ½Ñ Ð½Ð°Ð¿ÑÑмÑÑ, ÑÑÑановив нÑжнÑй вам `status_code`:
{* ../../docs_src/additional_status_codes/tutorial001_an_py310.py hl[4,25] *}
/// warning | Ðнимание
-Ðогда Ð²Ñ Ð²Ð¾Ð·Ð²ÑаÑаеÑе обÑÐµÐºÑ `Response` напÑÑмÑÑ, как в пÑимеÑе вÑÑе, он бÑÐ´ÐµÑ Ð²Ð¾Ð·Ð²ÑаÑÑн как еÑÑÑ.
+Ðогда Ð²Ñ Ð²Ð¾Ð·Ð²ÑаÑаеÑе `Response` напÑÑмÑÑ, как в пÑимеÑе вÑÑе, он бÑÐ´ÐµÑ Ð²Ð¾Ð·Ð²ÑаÑÑн как еÑÑÑ.
-Ðн не бÑÐ´ÐµÑ ÑеÑиализован пÑи помоÑи модели и Ñ.д.
+Ðн не бÑÐ´ÐµÑ ÑеÑиализован Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Ð¼Ð¾Ð´ÐµÐ»Ð¸ и Ñ.п.
-УбедиÑеÑÑ, ÑÑо в нÑм ÑодеÑжаÑÑÑ Ð¸Ð¼ÐµÐ½Ð½Ð¾ Ñе даннÑе, коÑоÑÑе Ð²Ñ Ñ
оÑиÑе, и ÑÑо знаÑÐµÐ½Ð¸Ñ ÑвлÑÑÑÑÑ Ð²Ð°Ð»Ð¸Ð´Ð½Ñм JSON (еÑли Ð²Ñ Ð¸ÑполÑзÑеÑе `JSONResponse`).
+УбедиÑеÑÑ, ÑÑо в нÑм именно Ñе даннÑе, коÑоÑÑе Ð²Ñ Ñ
оÑиÑе, и ÑÑо знаÑÐµÐ½Ð¸Ñ ÑвлÑÑÑÑÑ Ð²Ð°Ð»Ð¸Ð´Ð½Ñм JSON (еÑли Ð²Ñ Ð¸ÑполÑзÑеÑе `JSONResponse`).
///
@@ -30,12 +30,12 @@
ÐÑ Ñакже можеÑе иÑполÑзоваÑÑ `from starlette.responses import JSONResponse`.
-**FastAPI** пÑедоÑÑавлÑÐµÑ ÑÐ¾Ñ Ð¶Ðµ `starlette.responses` ÑеÑез `fastapi.responses` пÑоÑÑо Ð´Ð»Ñ Ð²Ð°Ñего ÑдобÑÑва, как ÑазÑабоÑÑика. Ðо болÑÑинÑÑво доÑÑÑпнÑÑ
Response-клаÑÑов поÑÑÑпаÑÑ Ð½Ð°Ð¿ÑÑмÑÑ Ð¸Ð· Starlette. То же Ñамое каÑаеÑÑÑ Ð¸ `status`.
+**FastAPI** пÑедоÑÑавлÑÐµÑ ÑÐ¾Ñ Ð¶Ðµ `starlette.responses` ÑеÑез `fastapi.responses` пÑоÑÑо Ð´Ð»Ñ Ð²Ð°Ñего ÑдобÑÑва как ÑазÑабоÑÑика. Ðо болÑÑинÑÑво доÑÑÑпнÑÑ
Response-клаÑÑов пÑиÑ
одÑÑ Ð½Ð°Ð¿ÑÑмÑÑ Ð¸Ð· Starlette. То же Ñамое Ñо `status`.
///
-## OpenAPI и докÑменÑаÑÐ¸Ñ API
+## OpenAPI и докÑменÑаÑÐ¸Ñ API { #openapi-and-api-docs }
-ÐÑли Ð²Ñ Ð²Ð¾Ð·Ð²ÑаÑаеÑе дополниÑелÑнÑе ÐºÐ¾Ð´Ñ ÑÑаÑÑÑов и оÑвеÑÑ Ð½Ð°Ð¿ÑÑмÑÑ, они не бÑдÑÑ Ð²ÐºÐ»ÑÑÐµÐ½Ñ Ð² ÑÑ
ÐµÐ¼Ñ OpenAPI (докÑменÑаÑÐ¸Ñ API), поÑÐ¾Ð¼Ñ ÑÑо FastAPI не Ð¼Ð¾Ð¶ÐµÑ Ð·Ð°Ñанее знаÑÑ, ÑÑо Ð²Ñ ÑобиÑаеÑеÑÑ Ð²ÐµÑнÑÑÑ.
+ÐÑли Ð²Ñ Ð²Ð¾Ð·Ð²ÑаÑаеÑе дополниÑелÑнÑе ÑÑаÑÑÑ-ÐºÐ¾Ð´Ñ Ð¸ оÑвеÑÑ Ð½Ð°Ð¿ÑÑмÑÑ, они не бÑдÑÑ Ð²ÐºÐ»ÑÑÐµÐ½Ñ Ð² ÑÑ
ÐµÐ¼Ñ OpenAPI (докÑменÑаÑÐ¸Ñ API), поÑÐ¾Ð¼Ñ ÑÑо Ñ FastAPI Ð½ÐµÑ ÑпоÑоба заÑанее знаÑÑ, ÑÑо Ð²Ñ ÑобиÑаеÑеÑÑ Ð²ÐµÑнÑÑÑ.
-Ðо Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе задокÑменÑиÑоваÑÑ ÑÑо в ваÑем коде, иÑполÑзÑÑ: [ÐополниÑелÑнÑе оÑвеÑÑ Ð² OpenAPI](additional-responses.md){.internal-link target=_blank}.
+Ðо Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе задокÑменÑиÑоваÑÑ ÑÑо в ÑвоÑм коде, иÑполÑзÑÑ: [ÐополниÑелÑнÑе оÑвеÑÑ](additional-responses.md){.internal-link target=_blank}.
diff --git a/docs/ru/docs/advanced/async-tests.md b/docs/ru/docs/advanced/async-tests.md
index 7849ad1090..5062bc52e7 100644
--- a/docs/ru/docs/advanced/async-tests.md
+++ b/docs/ru/docs/advanced/async-tests.md
@@ -1,4 +1,4 @@
-# ÐÑинÑ
Ñонное ÑеÑÑиÑование
+# ÐÑинÑ
Ñонное ÑеÑÑиÑование { #async-tests }
ÐÑ Ñже видели как ÑеÑÑиÑоваÑÑ **FastAPI** пÑиложение, иÑполÑзÑÑ Ð¸Ð¼ÐµÑÑийÑÑ ÐºÐ»Ð°ÑÑ `TestClient`. Ð ÑÑÐ¾Ð¼Ñ Ð¼Ð¾Ð¼ÐµÐ½ÑÑ Ð²Ñ Ð²Ð¸Ð´ÐµÐ»Ð¸ ÑолÑко как пиÑаÑÑ ÑеÑÑÑ Ð² ÑинÑ
Ñонном ÑÑиле без иÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ `async` ÑÑнкÑий.
@@ -6,11 +6,11 @@
ÐавайÑе ÑаÑÑмоÑÑим, как Ð¼Ñ Ð¼Ð¾Ð¶ÐµÐ¼ ÑÑо ÑеализоваÑÑ.
-## pytest.mark.anyio
+## pytest.mark.anyio { #pytest-mark-anyio }
ÐÑли Ð¼Ñ Ñ
оÑим вÑзÑваÑÑ Ð°ÑинÑ
ÑоннÑе ÑÑнкÑии в наÑиÑ
ÑеÑÑаÑ
, Ñо наÑи ÑеÑÑовÑе ÑÑнкÑии Ð´Ð¾Ð»Ð¶Ð½Ñ Ð±ÑÑÑ Ð°ÑинÑ
ÑоннÑми. AnyIO пÑедоÑÑавлÑÐµÑ Ð´Ð»Ñ ÑÑого оÑлиÑнÑй плагин, коÑоÑÑй позволÑÐµÑ Ð½Ð°Ð¼ ÑказÑваÑÑ, какие ÑеÑÑовÑе ÑÑнкÑии Ð´Ð¾Ð»Ð¶Ð½Ñ Ð²ÑзÑваÑÑÑÑ Ð°ÑинÑ
Ñонно.
-## HTTPX
+## HTTPX { #httpx }
Ðаже еÑли **FastAPI** пÑиложение иÑполÑзÑÐµÑ Ð¾Ð±ÑÑнÑе ÑÑнкÑии `def` вмеÑÑо `async def`, ÑÑо вÑе Ñавно `async` пÑиложение 'под капоÑом'.
@@ -18,7 +18,7 @@
`TestClient` оÑнован на HTTPX, и, к ÑÑаÑÑÑÑ, Ð¼Ñ Ð¼Ð¾Ð¶ÐµÐ¼ иÑполÑзоваÑÑ ÐµÐ³Ð¾ (`HTTPX`) напÑÑмÑÑ Ð´Ð»Ñ ÑеÑÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ API.
-## ÐÑимеÑ
+## ÐÑÐ¸Ð¼ÐµÑ { #example }
РкаÑеÑÑве пÑоÑÑого пÑимеÑа, давайÑе ÑаÑÑмоÑÑим ÑайловÑÑ ÑÑÑÑкÑÑÑÑ, ÑÑ
ожÑÑ Ñ Ð¾Ð¿Ð¸Ñанной в [ÐолÑÑие пÑиложениÑ](../tutorial/bigger-applications.md){.internal-link target=_blank} и [ТеÑÑиÑование](../tutorial/testing.md){.internal-link target=_blank}:
@@ -38,7 +38,7 @@
{* ../../docs_src/async_tests/test_main.py *}
-## ÐапÑÑк ÑеÑÑов
+## ÐапÑÑк ÑеÑÑов { #run-it }
ÐÑ Ð¼Ð¾Ð¶ÐµÑе запÑÑÑиÑÑ Ñвои ÑеÑÑÑ ÐºÐ°Ðº обÑÑно:
@@ -52,7 +52,7 @@ $ pytest
-## ÐодÑобнее
+## ÐодÑобнее { #in-detail }
ÐаÑÐºÐµÑ `@pytest.mark.anyio` говоÑÐ¸Ñ pytest, ÑÑо ÑеÑÑÐ¾Ð²Ð°Ñ ÑÑнкÑÐ¸Ñ Ð´Ð¾Ð»Ð¶Ð½Ð° бÑÑÑ Ð²Ñзвана аÑинÑ
Ñонно:
@@ -88,7 +88,7 @@ response = client.get('/')
///
-## ÐÑзов дÑÑгиÑ
аÑинÑ
ÑоннÑÑ
ÑÑнкÑий
+## ÐÑзов дÑÑгиÑ
аÑинÑ
ÑоннÑÑ
ÑÑнкÑий { #other-asynchronous-function-calls }
ТепеÑÑ ÑеÑÑÐ¾Ð²Ð°Ñ ÑÑнкÑÐ¸Ñ ÑÑала аÑинÑ
Ñонной, поÑÑÐ¾Ð¼Ñ Ð²Ð½ÑÑÑи нее Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе вÑзÑваÑÑ Ñакже и дÑÑгие `async` ÑÑнкÑии, не ÑвÑзаннÑе Ñ Ð¾ÑпÑавлением запÑоÑов в ваÑе FastAPI пÑиложение. Ðак еÑли Ð±Ñ Ð²Ñ Ð²ÑзÑвали иÑ
в лÑбом дÑÑгом меÑÑе ваÑего кода.
diff --git a/docs/ru/docs/advanced/index.md b/docs/ru/docs/advanced/index.md
index b5cb733e7b..c0a52c6c14 100644
--- a/docs/ru/docs/advanced/index.md
+++ b/docs/ru/docs/advanced/index.md
@@ -1,12 +1,12 @@
-# РаÑÑиÑенное ÑÑководÑÑво полÑзоваÑелÑ
+# РаÑÑиÑенное ÑÑководÑÑво полÑзоваÑÐµÐ»Ñ { #advanced-user-guide }
-## ÐополниÑелÑнÑе возможноÑÑи
+## ÐополниÑелÑнÑе возможноÑÑи { #additional-features }
ÐÑновное [УÑебник - Ð ÑководÑÑво полÑзоваÑелÑ](../tutorial/index.md){.internal-link target=_blank} должно бÑÑÑ Ð´Ð¾ÑÑаÑоÑно, ÑÑÐ¾Ð±Ñ Ð¿Ð¾Ð·Ð½Ð°ÐºÐ¾Ð¼Ð¸ÑÑ Ð²Ð°Ñ Ñо вÑеми оÑновнÑми ÑÑнкÑиÑми **FastAPI**.
Ð ÑледÑÑÑиÑ
ÑазделаÑ
Ð²Ñ ÑвидиÑе дÑÑгие ваÑианÑÑ, конÑигÑÑаÑии и дополниÑелÑнÑе возможноÑÑи.
-/// tip
+/// tip | СовеÑ
СледÑÑÑие ÑÐ°Ð·Ð´ÐµÐ»Ñ **не обÑзаÑелÑно ÑвлÑÑÑÑÑ "пÑодвинÑÑÑми"**.
@@ -14,7 +14,7 @@
///
-## СнаÑала пÑоÑиÑайÑе УÑебник - Ð ÑководÑÑво полÑзоваÑелÑ
+## СнаÑала пÑоÑиÑайÑе УÑебник - Ð ÑководÑÑво полÑзоваÑÐµÐ»Ñ { #read-the-tutorial-first }
ÐÑ Ð²Ñе еÑе можеÑе иÑполÑзоваÑÑ Ð±Ð¾Ð»ÑÑинÑÑво ÑÑнкÑий **FastAPI** Ñо знаниÑми из [УÑебник - Ð ÑководÑÑво полÑзоваÑелÑ](../tutorial/index.md){.internal-link target=_blank}.
diff --git a/docs/ru/docs/advanced/response-change-status-code.md b/docs/ru/docs/advanced/response-change-status-code.md
index 37dade99f8..e9e1c9470f 100644
--- a/docs/ru/docs/advanced/response-change-status-code.md
+++ b/docs/ru/docs/advanced/response-change-status-code.md
@@ -1,22 +1,22 @@
-# Response - Ðзменение cÑаÑÑÑ ÐºÐ¾Ð´Ð°
+# Response - Ðзменение ÑÑаÑÑÑ-кода { #response-change-status-code }
-ÐÑ, веÑоÑÑно, Ñже ÑиÑали о Ñом, ÑÑо можно ÑÑÑановиÑÑ [СоÑÑоÑние оÑвеÑа по ÑмолÑаниÑ](../tutorial/response-status-code.md){.internal-link target=_blank}.
+ÐÑ, веÑоÑÑно, Ñже ÑиÑали о Ñом, ÑÑо можно ÑÑÑановиÑÑ [ÑÑаÑÑÑ-код оÑвеÑа по ÑмолÑаниÑ](../tutorial/response-status-code.md){.internal-link target=_blank}.
-Ðо в некоÑоÑÑÑ
ÑлÑÑаÑÑ
вам нÑжно веÑнÑÑÑ ÐºÐ¾Ð´ ÑоÑÑоÑниÑ, оÑлиÑнÑй Ð¾Ñ ÑÑÑановленного по ÑмолÑаниÑ.
+Ðо в некоÑоÑÑÑ
ÑлÑÑаÑÑ
нÑжно веÑнÑÑÑ Ð´ÑÑгой ÑÑаÑÑÑ-код, оÑлиÑнÑй Ð¾Ñ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ Ð¿Ð¾ ÑмолÑаниÑ.
-## ÐÑÐ¸Ð¼ÐµÑ Ð¸ÑполÑзованиÑ
+## ÐÑÐ¸Ð¼ÐµÑ Ð¸ÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ { #use-case }
-ÐапÑимеÑ, пÑедÑÑавÑÑе, ÑÑо Ð²Ñ Ñ
оÑиÑе возвÑаÑаÑÑ HTTP код ÑоÑÑоÑÐ½Ð¸Ñ "OK" `200` по ÑмолÑаниÑ.
+ÐапÑимеÑ, пÑедÑÑавÑÑе, ÑÑо Ð²Ñ Ñ
оÑиÑе по ÑмолÑÐ°Ð½Ð¸Ñ Ð²Ð¾Ð·Ð²ÑаÑаÑÑ HTTP ÑÑаÑÑÑ-код «OK» `200`.
-Ðо еÑли даннÑе не ÑÑÑеÑÑвовали, Ð²Ñ Ñ
оÑиÑе ÑоздаÑÑ Ð¸Ñ
и веÑнÑÑÑ HTTP код ÑоÑÑоÑÐ½Ð¸Ñ "CREATED" `201`.
+Ðо еÑли даннÑе не ÑÑÑеÑÑвовали, Ð²Ñ Ñ
оÑиÑе ÑоздаÑÑ Ð¸Ñ
и веÑнÑÑÑ HTTP ÑÑаÑÑÑ-код «CREATED» `201`.
ÐÑи ÑÑом Ð²Ñ Ð²ÑÑ ÐµÑÑ Ñ
оÑиÑе имеÑÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑÑ ÑилÑÑÑоваÑÑ Ð¸ пÑеобÑазовÑваÑÑ Ð²Ð¾Ð·Ð²ÑаÑаемÑе даннÑе Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ `response_model`.
ÐÐ»Ñ ÑакиÑ
ÑлÑÑаев Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе иÑполÑзоваÑÑ Ð¿Ð°ÑамеÑÑ `Response`.
-## ÐÑполÑзование паÑамеÑÑа `Response`
+## ÐÑполÑзование паÑамеÑÑа `Response` { #use-a-response-parameter }
-ÐÑ Ð¼Ð¾Ð¶ÐµÑе обÑÑвиÑÑ Ð¿Ð°ÑамеÑÑ Ñипа `Response` в ваÑей *ÑÑнкÑии обÑабоÑки пÑÑи* (Ñак же как Ð´Ð»Ñ cookies и headers).
+ÐÑ Ð¼Ð¾Ð¶ÐµÑе обÑÑвиÑÑ Ð¿Ð°ÑамеÑÑ Ñипа `Response` в ваÑей *ÑÑнкÑии обÑабоÑки пÑÑи* (как и Ð´Ð»Ñ cookies и HTTP-заголовков).
РзаÑем Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе ÑÑÑановиÑÑ `status_code` в ÑÑом *вÑеменном* обÑекÑе оÑвеÑа.
@@ -26,6 +26,6 @@
РеÑли Ð²Ñ Ð¾Ð±ÑÑвили `response_model`, он вÑÑ Ñавно бÑÐ´ÐµÑ Ð¸ÑполÑзоваÑÑÑÑ Ð´Ð»Ñ ÑилÑÑÑаÑии и пÑеобÑÐ°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð²Ð¾Ð·Ð²ÑаÑаемого обÑекÑа.
-**FastAPI** бÑÐ´ÐµÑ Ð¸ÑполÑзоваÑÑ ÑÑÐ¾Ñ *вÑеменнÑй* оÑÐ²ÐµÑ Ð´Ð»Ñ Ð¸Ð·Ð²Ð»ÐµÑÐµÐ½Ð¸Ñ ÐºÐ¾Ð´Ð° ÑоÑÑоÑÐ½Ð¸Ñ (а Ñакже cookies и headers) и помеÑÑÐ¸Ñ Ð¸Ñ
в ÑиналÑнÑй оÑвеÑ, коÑоÑÑй ÑодеÑÐ¶Ð¸Ñ Ð²Ð¾Ð·Ð²ÑаÑаемое вами знаÑение, оÑÑилÑÑÑованное лÑбÑм `response_model`.
+**FastAPI** бÑÐ´ÐµÑ Ð¸ÑполÑзоваÑÑ ÑÑÐ¾Ñ *вÑеменнÑй* оÑÐ²ÐµÑ Ð´Ð»Ñ Ð¸Ð·Ð²Ð»ÐµÑÐµÐ½Ð¸Ñ ÑÑаÑÑÑ-кода (а Ñакже cookies и HTTP-заголовков) и помеÑÑÐ¸Ñ Ð¸Ñ
в ÑиналÑнÑй оÑвеÑ, коÑоÑÑй ÑодеÑÐ¶Ð¸Ñ Ð²Ð¾Ð·Ð²ÑаÑаемое вами знаÑение, оÑÑилÑÑÑованное лÑбÑм `response_model`.
-ÐÑ Ñакже можеÑе обÑÑвиÑÑ Ð¿Ð°ÑамеÑÑ `Response` в завиÑимоÑÑÑÑ
и ÑÑÑановиÑÑ ÐºÐ¾Ð´ ÑоÑÑоÑÐ½Ð¸Ñ Ð² ниÑ
. Ðо помниÑе, ÑÑо поÑледнее ÑÑÑановленное знаÑение бÑÐ´ÐµÑ Ð¸Ð¼ÐµÑÑ Ð¿ÑиоÑиÑеÑ.
+ÐÑ Ñакже можеÑе обÑÑвиÑÑ Ð¿Ð°ÑамеÑÑ `Response` в завиÑимоÑÑÑÑ
и ÑÑÑановиÑÑ Ð² ниÑ
ÑÑаÑÑÑ-код. Ðо помниÑе, ÑÑо поÑледнее ÑÑÑановленное знаÑение бÑÐ´ÐµÑ Ð¸Ð¼ÐµÑÑ Ð¿ÑиоÑиÑеÑ.
diff --git a/docs/ru/docs/advanced/response-cookies.md b/docs/ru/docs/advanced/response-cookies.md
index e04ff577c9..3aa32b9bb7 100644
--- a/docs/ru/docs/advanced/response-cookies.md
+++ b/docs/ru/docs/advanced/response-cookies.md
@@ -1,9 +1,8 @@
+# Cookies в оÑвеÑе { #response-cookies }
-# Cookies в оÑвеÑе
+## ÐÑполÑзование паÑамеÑÑа `Response` { #use-a-response-parameter }
-## ÐÑполÑзование паÑамеÑÑа `Response`
-
-ÐÑ Ð¼Ð¾Ð¶ÐµÑе обÑÑвиÑÑ Ð¿Ð°ÑамеÑÑ Ñипа `Response` в ваÑей ÑÑнкÑии ÑндпоинÑа.
+ÐÑ Ð¼Ð¾Ð¶ÐµÑе обÑÑвиÑÑ Ð¿Ð°ÑамеÑÑ Ñипа `Response` в ваÑей ÑÑнкÑии-обÑабоÑÑике пÑÑи.
ÐаÑем ÑÑÑановиÑÑ cookies в ÑÑом вÑеменном обÑекÑе оÑвеÑа.
@@ -13,36 +12,40 @@
ÐÑли Ð²Ñ Ñказали `response_model`, он вÑÑ Ñавно бÑÐ´ÐµÑ Ð¸ÑполÑзоваÑÑÑÑ Ð´Ð»Ñ ÑилÑÑÑаÑии и пÑеобÑÐ°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð²Ð¾Ð·Ð²ÑаÑаемого обÑекÑа.
-**FastAPI** извлеÑÐµÑ cookies (а Ñакже заголовки и ÐºÐ¾Ð´Ñ ÑоÑÑоÑниÑ) из вÑеменного оÑвеÑа и вклÑÑÐ¸Ñ Ð¸Ñ
в оконÑаÑелÑнÑй оÑвеÑ, ÑодеÑжаÑий ваÑе возвÑаÑаемое знаÑение, оÑÑилÑÑÑованное ÑеÑез `response_model`.
+**FastAPI** извлеÑÐµÑ cookies (а Ñакже HTTP-заголовки и ÑÑаÑÑÑ-код) из вÑеменного оÑвеÑа и вклÑÑÐ¸Ñ Ð¸Ñ
в оконÑаÑелÑнÑй оÑвеÑ, ÑодеÑжаÑий ваÑе возвÑаÑаемое знаÑение, оÑÑилÑÑÑованное ÑеÑез `response_model`.
-ÐÑ Ñакже можеÑе обÑÑвиÑÑ Ð¿Ð°ÑамеÑÑ Ñипа Response в завиÑимоÑÑÑÑ
и ÑÑÑанавливаÑÑ cookies (и заголовки) Ñам.
+ÐÑ Ñакже можеÑе обÑÑвиÑÑ Ð¿Ð°ÑамеÑÑ Ñипа `Response` в завиÑимоÑÑÑÑ
и ÑÑÑанавливаÑÑ cookies (и HTTP-заголовки) Ñам.
-## ÐозвÑаÑение `Response` напÑÑмÑÑ
+## ÐозвÑаÑение `Response` напÑÑмÑÑ { #return-a-response-directly }
-ÐÑ Ñакже можеÑе ÑÑÑановиÑÑ cookies, еÑли возвÑаÑаеÑе `Response` напÑÑмÑÑ Ð² ваÑем коде.
+ÐÑ Ñакже можеÑе ÑÑÑановиÑÑ Cookies, еÑли возвÑаÑаеÑе `Response` напÑÑмÑÑ Ð² ваÑем коде.
-ÐÐ»Ñ ÑÑого ÑоздайÑе обÑÐµÐºÑ `Response`, как опиÑано в Ñазделе [ÐозвÑаÑение оÑвеÑа напÑÑмÑÑ](response-directly.md){.target=_blank}.
+ÐÐ»Ñ ÑÑого ÑоздайÑе обÑÐµÐºÑ `Response`, как опиÑано в Ñазделе [ÐозвÑаÑение оÑвеÑа напÑÑмÑÑ](response-directly.md){.internal-link target=_blank}.
ÐаÑем ÑÑÑановиÑе cookies и веÑниÑе ÑÑÐ¾Ñ Ð¾Ð±ÑекÑ:
{* ../../docs_src/response_cookies/tutorial001.py hl[10:12] *}
-/// tip | ÐÑимеÑание
-ÐмейÑе в видÑ, ÑÑо еÑли Ð²Ñ Ð²Ð¾Ð·Ð²ÑаÑаеÑе оÑÐ²ÐµÑ Ð½Ð°Ð¿ÑÑмÑÑ, вмеÑÑо иÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ð°ÑамеÑÑа `Response`, **FastAPI** оÑпÑÐ°Ð²Ð¸Ñ ÐµÐ³Ð¾ без дополниÑелÑной обÑабоÑки.
+/// tip | СовеÑ
+
+ÐмейÑе в видÑ, ÑÑо еÑли Ð²Ñ Ð²Ð¾Ð·Ð²ÑаÑаеÑе оÑÐ²ÐµÑ Ð½Ð°Ð¿ÑÑмÑÑ, вмеÑÑо иÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ð°ÑамеÑÑа `Response`, FastAPI веÑнÑÑ ÐµÐ³Ð¾ напÑÑмÑÑ.
-УбедиÑеÑÑ, ÑÑо ваÑи даннÑе имеÑÑ ÐºÐ¾ÑÑекÑнÑй Ñип. ÐапÑимеÑ, они Ð´Ð¾Ð»Ð¶Ð½Ñ Ð±ÑÑÑ ÑовмеÑÑÐ¸Ð¼Ñ Ñ JSON, еÑли Ð²Ñ Ð¸ÑполÑзÑеÑе `JSONResponse`.
+УбедиÑеÑÑ, ÑÑо ваÑи даннÑе имеÑÑ ÐºÐ¾ÑÑекÑнÑй Ñип. ÐапÑимеÑ, они Ð´Ð¾Ð»Ð¶Ð½Ñ Ð±ÑÑÑ ÑовмеÑÑÐ¸Ð¼Ñ Ñ JSON, еÑли Ð²Ñ Ð²Ð¾Ð·Ð²ÑаÑаеÑе `JSONResponse`.
Также ÑбедиÑеÑÑ, ÑÑо Ð²Ñ Ð½Ðµ оÑпÑавлÑеÑе даннÑе, коÑоÑÑе Ð´Ð¾Ð»Ð¶Ð½Ñ Ð±Ñли бÑÑÑ Ð¾ÑÑилÑÑÑÐ¾Ð²Ð°Ð½Ñ ÑеÑез `response_model`.
+
///
-### ÐополниÑелÑÐ½Ð°Ñ Ð¸Ð½ÑоÑмаÑиÑ
+### ÐополниÑелÑÐ½Ð°Ñ Ð¸Ð½ÑоÑмаÑÐ¸Ñ { #more-info }
/// note | ТеÑ
ниÑеÑкие деÑали
+
ÐÑ Ñакже можеÑе иÑполÑзоваÑÑ `from starlette.responses import Response` или `from starlette.responses import JSONResponse`.
**FastAPI** пÑедоÑÑавлÑÐµÑ `fastapi.responses`, коÑоÑÑе ÑвлÑÑÑÑÑ Ñеми же обÑекÑами, ÑÑо и `starlette.responses`, пÑоÑÑо Ð´Ð»Ñ ÑдобÑÑва. Ðднако болÑÑинÑÑво доÑÑÑпнÑÑ
Ñипов оÑвеÑов поÑÑÑÐ¿Ð°ÐµÑ Ð½ÐµÐ¿Ð¾ÑÑедÑÑвенно из **Starlette**.
-ÐÐ»Ñ ÑÑÑановки заголовков и cookies `Response` иÑполÑзÑеÑÑÑ ÑаÑÑо, поÑÑÐ¾Ð¼Ñ **FastAPI** Ñакже пÑедоÑÑавлÑÐµÑ ÐµÐ³Ð¾ ÑеÑез `fastapi.responses`.
+Ð Ñак как `Response` ÑаÑÑо иÑполÑзÑеÑÑÑ Ð´Ð»Ñ ÑÑÑановки HTTP-заголовков и cookies, **FastAPI** Ñакже пÑедоÑÑавлÑÐµÑ ÐµÐ³Ð¾ как `fastapi.Response`.
+
///
ЧÑÐ¾Ð±Ñ ÑвидеÑÑ Ð²Ñе доÑÑÑпнÑе паÑамеÑÑÑ Ð¸ наÑÑÑойки, ознакомÑÑеÑÑ Ñ Ð´Ð¾ÐºÑменÑаÑией Starlette.
diff --git a/docs/ru/docs/advanced/response-directly.md b/docs/ru/docs/advanced/response-directly.md
index ee83d22b10..febd40ed4a 100644
--- a/docs/ru/docs/advanced/response-directly.md
+++ b/docs/ru/docs/advanced/response-directly.md
@@ -1,4 +1,4 @@
-# ÐозвÑÐ°Ñ Ð¾ÑвеÑа напÑÑмÑÑ
+# ÐозвÑÐ°Ñ Ð¾ÑвеÑа напÑÑмÑÑ { #return-a-response-directly }
Ðогда Ð²Ñ ÑоздаÑÑе **FastAPI** *опеÑаÑÐ¸Ñ Ð¿ÑÑи*, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе возвÑаÑаÑÑ Ð¸Ð· Ð½ÐµÑ Ð»ÑбÑе даннÑе: `dict`, `list`, Pydantic-моделÑ, Ð¼Ð¾Ð´ÐµÐ»Ñ Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
и Ñ.д.
@@ -8,9 +8,9 @@
Ðо Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе возвÑаÑаÑÑ `JSONResponse` напÑÑмÑÑ Ð¸Ð· ваÑиÑ
*опеÑаÑий пÑÑи*.
-ÐÑо Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿Ð¾Ð»ÐµÐ·Ð½Ð¾, напÑимеÑ, еÑли нÑжно веÑнÑÑÑ Ð¿Ð¾Ð»ÑзоваÑелÑÑкие заголовки или кÑки.
+ÐÑо Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿Ð¾Ð»ÐµÐ·Ð½Ð¾, напÑимеÑ, еÑли нÑжно веÑнÑÑÑ Ð¿Ð¾Ð»ÑзоваÑелÑÑкие HTTP-заголовки или cookie.
-## ÐозвÑÐ°Ñ `Response`
+## ÐозвÑÐ°Ñ `Response` { #return-a-response }
Ðа Ñамом деле, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе возвÑаÑаÑÑ Ð»Ñбой обÑÐµÐºÑ `Response` или его подклаÑÑ.
@@ -26,7 +26,7 @@
ÐÑо даÑÑ Ð²Ð°Ð¼ болÑÑÑÑ Ð³Ð¸Ð±ÐºÐ¾ÑÑÑ. ÐÑ Ð¼Ð¾Ð¶ÐµÑе возвÑаÑаÑÑ Ð»ÑбÑе ÑÐ¸Ð¿Ñ Ð´Ð°Ð½Ð½ÑÑ
, пеÑеопÑеделÑÑÑ Ð»ÑбÑе обÑÑÐ²Ð»ÐµÐ½Ð¸Ñ Ð¸Ð»Ð¸ валидаÑÐ¸Ñ Ð´Ð°Ð½Ð½ÑÑ
и Ñ.д.
-## ÐÑполÑзование `jsonable_encoder` в `Response`
+## ÐÑполÑзование `jsonable_encoder` в `Response` { #using-the-jsonable-encoder-in-a-response }
ÐоÑколÑÐºÑ **FastAPI** не изменÑÐµÑ Ð¾Ð±ÑÐµÐºÑ `Response`, коÑоÑÑй Ð²Ñ Ð²Ð¾Ð·Ð²ÑаÑаеÑе, Ð²Ñ Ð´Ð¾Ð»Ð¶Ð½Ñ ÑбедиÑÑÑÑ, ÑÑо его ÑодеÑжимое гоÑово к оÑпÑавке.
@@ -44,7 +44,7 @@
///
-## ÐозвÑÐ°Ñ Ð¿Ð¾Ð»ÑзоваÑелÑÑкого `Response`
+## ÐозвÑÐ°Ñ Ð¿Ð¾Ð»ÑзоваÑелÑÑкого `Response` { #returning-a-custom-response }
ÐÑÐ¸Ð¼ÐµÑ Ð²ÑÑе показÑÐ²Ð°ÐµÑ Ð²Ñе необÑ
одимÑе ÑаÑÑи, но он пока не оÑÐµÐ½Ñ Ð¿Ð¾Ð»ÐµÐ·ÐµÐ½, Ñак как Ð²Ñ Ð¼Ð¾Ð³Ð»Ð¸ Ð±Ñ Ð¿ÑоÑÑо веÑнÑÑÑ `item` напÑÑмÑÑ, и **FastAPI** помеÑÑил Ð±Ñ ÐµÐ³Ð¾ в `JSONResponse`, пÑеобÑазовав в `dict` и Ñ.д. ÐÑÑ ÑÑо пÑоиÑÑ
Ð¾Ð´Ð¸Ñ Ð¿Ð¾ ÑмолÑаниÑ.
@@ -56,7 +56,7 @@
{* ../../docs_src/response_directly/tutorial002.py hl[1,18] *}
-## ÐÑимеÑаниÑ
+## ÐÑимеÑÐ°Ð½Ð¸Ñ { #notes }
Ðогда Ð²Ñ Ð²Ð¾Ð·Ð²ÑаÑаеÑе обÑÐµÐºÑ `Response` напÑÑмÑÑ, его даннÑе не валидиÑÑÑÑÑÑ, не пÑеобÑазÑÑÑÑÑ (не ÑеÑиализÑÑÑÑÑ) и не докÑменÑиÑÑÑÑÑÑ Ð°Ð²ÑомаÑиÑеÑки.
diff --git a/docs/ru/docs/advanced/websockets.md b/docs/ru/docs/advanced/websockets.md
index bc9dfcbffb..b73fa1ddba 100644
--- a/docs/ru/docs/advanced/websockets.md
+++ b/docs/ru/docs/advanced/websockets.md
@@ -1,10 +1,10 @@
-# Ðеб-ÑокеÑÑ
+# Ðеб-ÑокеÑÑ { #websockets }
ÐÑ Ð¼Ð¾Ð¶ÐµÑе иÑполÑзоваÑÑ Ð²ÐµÐ±-ÑокеÑÑ Ð² **FastAPI**.
-## УÑÑановка `WebSockets`
+## УÑÑановка `websockets` { #install-websockets }
-УбедиÑеÑÑ, ÑÑо [виÑÑÑалÑÐ½Ð°Ñ ÑÑеда](../virtual-environments.md){.internal-link target=_blank} Ñоздана, акÑивиÑÑйÑе ÐµÑ Ð¸ ÑÑÑановиÑе `websockets`:
+УбедиÑеÑÑ, ÑÑо Ð²Ñ Ñоздали [виÑÑÑалÑное окÑÑжение](../virtual-environments.md){.internal-link target=_blank}, акÑивиÑовали его и ÑÑÑановили `websockets` (библиоÑека Python, ÑпÑоÑаÑÑÐ°Ñ ÑабоÑÑ Ñ Ð¿ÑоÑоколом "WebSocket"):
```console
$ pip install -r requirements.txt
---> 100%
-Successfully installed fastapi pydantic uvicorn
+Successfully installed fastapi pydantic
```
/// info | ÐнÑоÑмаÑиÑ
-СÑÑеÑÑвÑÑÑ Ð¸ дÑÑгие инÑÑÑÑменÑÑ ÑпÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð·Ð°Ð²Ð¸ÑимоÑÑÑми.
-
-Ð ÑÑом же Ñазделе, но позже, Ñ Ð¿Ð¾ÐºÐ°Ð¶Ñ Ð²Ð°Ð¼ пÑÐ¸Ð¼ÐµÑ Ð¸ÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Poetry. ð
+СÑÑеÑÑвÑÑÑ Ð¸ дÑÑгие ÑоÑмаÑÑ Ð¸ инÑÑÑÑменÑÑ Ð´Ð»Ñ Ð¾Ð¿Ð¸ÑÐ°Ð½Ð¸Ñ Ð¸ ÑÑÑановки завиÑимоÑÑей.
///
-### СоздаÑÑ Ð¿Ñиложение **FastAPI**
+### СоздаÑÑ ÐºÐ¾Ð´ **FastAPI** { #create-the-fastapi-code }
* СоздайÑе диÑекÑоÑÐ¸Ñ `app` и пеÑейдиÑе в неÑ.
* СоздайÑе пÑÑÑой Ñайл `__init__.py`.
-* СоздайÑе Ñайл `main.py` и заполниÑе его:
+* СоздайÑе Ñайл `main.py` Ñо ÑледÑÑÑим ÑодеÑжимÑм:
```Python
from typing import Union
@@ -167,77 +162,109 @@ def read_item(item_id: int, q: Union[str, None] = None):
return {"item_id": item_id, "q": q}
```
-### Dockerfile
+### Dockerfile { #dockerfile }
-Ð ÑÑой же диÑекÑоÑии ÑоздайÑе Ñайл `Dockerfile` и заполниÑе его:
+ТепеÑÑ Ð² Ñой же диÑекÑоÑии пÑоекÑа ÑоздайÑе Ñайл `Dockerfile`:
```{ .dockerfile .annotate }
-# (1)
+# (1)!
FROM python:3.9
-# (2)
+# (2)!
WORKDIR /code
-# (3)
+# (3)!
COPY ./requirements.txt /code/requirements.txt
-# (4)
+# (4)!
RUN pip install --no-cache-dir --upgrade -r /code/requirements.txt
-# (5)
+# (5)!
COPY ./app /code/app
-# (6)
-CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "80"]
+# (6)!
+CMD ["fastapi", "run", "app/main.py", "--port", "80"]
```
-1. ÐаÑниÑе Ñ Ð¾ÑиÑиалÑного обÑаза Python, коÑоÑÑй бÑÐ´ÐµÑ Ð¾Ñновой Ð´Ð»Ñ Ð¾Ð±Ñаза пÑиложениÑ.
+1. ÐаÑинаем Ñ Ð¾ÑиÑиалÑного базового обÑаза Python.
-2. УкажиÑе, ÑÑо в далÑнейÑем ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ Ð·Ð°Ð¿ÑÑкаемÑе в конÑейнеÑе, бÑдÑÑ Ð²ÑполнÑÑÑÑÑ Ð² диÑекÑоÑии `/code`.
+2. УÑÑанавливаем ÑекÑÑÑÑ ÑабоÑÑÑ Ð´Ð¸ÑекÑоÑÐ¸Ñ Ð² `/code`.
- ÐнÑÑÑÑкÑÐ¸Ñ ÑоздаÑÑ ÑÑÑ Ð´Ð¸ÑекÑоÑÐ¸Ñ Ð²Ð½ÑÑÑи конÑейнеÑа и Ð¼Ñ Ð¿Ð¾Ð¼ÐµÑÑим в Ð½ÐµÑ Ñайл `requirements.txt` и диÑекÑоÑÐ¸Ñ `app`.
+ ÐдеÑÑ Ð¼Ñ ÑазмеÑÑим Ñайл `requirements.txt` и диÑекÑоÑÐ¸Ñ `app`.
-3. СкопиÑÑеÑе Ñайл Ñ Ð·Ð°Ð²Ð¸ÑимоÑÑÑми из ÑекÑÑей диÑекÑоÑии в `/code`.
+3. ÐопиÑÑем Ñайл Ñ Ð·Ð°Ð²Ð¸ÑимоÑÑÑми в диÑекÑоÑÐ¸Ñ `/code`.
- СнаÑала копиÑÑйÑе **ÑолÑко** Ñайл Ñ Ð·Ð°Ð²Ð¸ÑимоÑÑÑми.
+ СнаÑала копиÑÑйÑе **ÑолÑко** Ñайл Ñ Ð·Ð°Ð²Ð¸ÑимоÑÑÑми, не оÑÑалÑной код.
- ÐÑÐ¾Ñ Ñайл **изменÑеÑÑÑ Ð´Ð¾Ð²Ð¾Ð»Ñно Ñедко**, Docker иÑÐµÑ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð¿Ñи поÑÑÑойке обÑаза и еÑли не наÑ
одиÑ, Ñо иÑполÑзÑÐµÑ **кÑÑ**, в коÑоÑом Ñ
ÑанÑÑÑÑ Ð¿ÑедÑдÑÑие веÑÑии ÑбоÑки обÑаза.
+ Так как ÑÑÐ¾Ñ Ñайл **менÑеÑÑÑ Ð½ÐµÑаÑÑо**, Docker опÑÐµÐ´ÐµÐ»Ð¸Ñ ÑÑо и иÑполÑзÑÐµÑ **кÑÑ** на ÑÑом Ñаге, ÑÑо Ð¿Ð¾Ð·Ð²Ð¾Ð»Ð¸Ñ Ð¸ÑполÑзоваÑÑ ÐºÑÑ Ð¸ на ÑледÑÑÑем Ñаге.
-4. УÑÑановиÑе библиоÑеки пеÑеÑиÑленнÑе в Ñайле Ñ Ð·Ð°Ð²Ð¸ÑимоÑÑÑми.
+4. УÑÑанавливаем завиÑимоÑÑи из Ñайла Ñ ÑÑебованиÑми.
- ÐпÑÐ¸Ñ `--no-cache-dir` ÑказÑÐ²Ð°ÐµÑ `pip` не ÑоÑ
ÑанÑÑÑ Ð·Ð°Ð³ÑÑжаемÑе библиоÑеки на локалÑной маÑине Ð´Ð»Ñ Ð¸ÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¸Ñ
в ÑлÑÑае повÑоÑной загÑÑзки. РконÑейнеÑе, в ÑлÑÑае пеÑеÑбоÑки ÑÑого Ñага, они вÑÑ Ñавно бÑдÑÑ ÑдаленÑ.
+ ÐпÑÐ¸Ñ `--no-cache-dir` ÑказÑÐ²Ð°ÐµÑ `pip` не ÑоÑ
ÑанÑÑÑ Ð·Ð°Ð³ÑÑженнÑе пакеÑÑ Ð»Ð¾ÐºÐ°Ð»Ñно, Ñ.к. ÑÑо нÑжно ÑолÑко еÑли `pip` бÑÐ´ÐµÑ Ð·Ð°Ð¿ÑÑкаÑÑÑÑ Ñнова Ð´Ð»Ñ ÑÑÑановки ÑеÑ
же пакеÑов, а пÑи ÑабоÑе Ñ ÐºÐ¾Ð½ÑейнеÑами ÑÑо обÑÑно не ÑÑебÑеÑÑÑ.
/// note | ÐамеÑка
- ÐпÑÐ¸Ñ `--no-cache-dir` нÑжна ÑолÑко Ð´Ð»Ñ `pip`, она никак не влиÑÐµÑ Ð½Ð° Docker или конÑейнеÑÑ.
+ `--no-cache-dir` оÑноÑиÑÑÑ ÑолÑко к `pip` и не Ð¸Ð¼ÐµÐµÑ Ð¾ÑноÑÐµÐ½Ð¸Ñ Ðº Docker или конÑейнеÑам.
///
- ÐпÑÐ¸Ñ `--upgrade` ÑказÑÐ²Ð°ÐµÑ `pip` обновиÑÑ Ð±Ð¸Ð±Ð»Ð¸Ð¾Ñеки, емли они Ñже ÑÑÑановленÑ.
+ ÐпÑÐ¸Ñ `--upgrade` ÑказÑÐ²Ð°ÐµÑ `pip` обновлÑÑÑ Ð¿Ð°ÐºÐµÑÑ, еÑли они Ñже ÑÑÑановленÑ.
- Ðак и в пÑедÑдÑÑем Ñаге Ñ ÐºÐ¾Ð¿Ð¸Ñованием Ñайла, ÑÑÐ¾Ñ Ñаг Ñакже бÑÐ´ÐµÑ Ð¸ÑполÑзоваÑÑ **кÑÑ Docker** в ÑлÑÑае оÑÑÑÑÑÑÐ²Ð¸Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ð¹.
+ ÐоÑколÑÐºÑ Ð¿ÑедÑдÑÑий Ñаг Ñ ÐºÐ¾Ð¿Ð¸Ñованием Ñайла Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¾Ð±ÑабоÑан **кÑÑем Docker**, ÑÑÐ¾Ñ Ñаг Ñакже **иÑполÑзÑÐµÑ ÐºÑÑ Docker**, когда ÑÑо возможно.
- ÐÑполÑзование кÑÑа, оÑобенно на ÑÑом Ñаге, Ð¿Ð¾Ð·Ð²Ð¾Ð»Ð¸Ñ Ð²Ð°Ð¼ **ÑÑкономиÑÑ** кÑÑÑ Ð²Ñемени пÑи повÑоÑной ÑбоÑке обÑаза, Ñак как завиÑимоÑÑи бÑдÑÑ ÑоÑ
ÑÐ°Ð½ÐµÐ½Ñ Ð² кеÑе, а не **загÑÑжаÑÑÑÑ Ð¸ ÑÑÑанавливаÑÑÑÑ ÐºÐ°Ð¶Ð´Ñй Ñаз**.
+ ÐÑполÑзование кÑÑа на ÑÑом Ñаге **ÑÑкономиÑ** вам много **вÑемени** пÑи повÑоÑнÑÑ
ÑбоÑкаÑ
обÑаза во вÑÐµÐ¼Ñ ÑазÑабоÑки, вмеÑÑо Ñого ÑÑÐ¾Ð±Ñ **загÑÑжаÑÑ Ð¸ ÑÑÑанавливаÑÑ** вÑе завиÑимоÑÑи **каждÑй Ñаз**.
-5. СкопиÑÑйÑе диÑекÑоÑÐ¸Ñ `./app` внÑÑÑÑ Ð´Ð¸ÑекÑоÑии `/code` (в конÑейнеÑе).
+5. ÐопиÑÑем диÑекÑоÑÐ¸Ñ `./app` внÑÑÑÑ Ð´Ð¸ÑекÑоÑии `/code`.
- Так как в ÑÑой диÑекÑоÑии ÑаÑположен код, коÑоÑÑй **ÑаÑÑо изменÑеÑÑÑ**, Ñо иÑполÑзование **кÑÑа** на ÑÑом Ñаге бÑÐ´ÐµÑ Ð½Ð°Ð¸Ð¼ÐµÐ½ÐµÐµ ÑÑÑекÑивно, а знаÑÐ¸Ñ Ð»ÑÑÑе помеÑÑиÑÑ ÑÑÐ¾Ñ Ñаг **ближе к конÑÑ** `Dockerfile`, Ð´Ð°Ð±Ñ Ð½Ðµ ÑеÑÑÑÑ Ð²ÑÐ³Ð¾Ð´Ñ Ð¾Ñ Ð¾Ð¿ÑимизаÑии пÑедÑдÑÑиÑ
Ñагов.
+ Так как здеÑÑ Ð²ÐµÑÑ ÐºÐ¾Ð´, коÑоÑÑй **менÑеÑÑÑ ÑаÑе вÑего**, кÑÑ Docker **вÑÑд ли** бÑÐ´ÐµÑ Ð¸ÑполÑзоваÑÑÑÑ Ð´Ð»Ñ ÑÑого Ñагa или **поÑледÑÑÑиÑ
Ñагов**.
-6. УкажиÑе **командÑ**, запÑÑкаÑÑÑÑ ÑеÑÐ²ÐµÑ `uvicorn`.
+ ÐоÑÑÐ¾Ð¼Ñ Ð²Ð°Ð¶Ð½Ð¾ ÑазмеÑÑиÑÑ ÑÑÐ¾Ñ Ñаг **ближе к конÑÑ** `Dockerfile`, ÑÑÐ¾Ð±Ñ Ð¾Ð¿ÑимизиÑоваÑÑ Ð²ÑÐµÐ¼Ñ ÑбоÑки обÑаза конÑейнеÑа.
- `CMD` пÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ ÑпиÑок ÑÑÑок, ÑазделÑннÑÑ
запÑÑÑми, но пÑи вÑполнении обÑÐµÐ´Ð¸Ð½Ð¸Ñ Ð¸Ñ
ÑеÑез пÑобел, ÑобÑав из ниÑ
Ð¾Ð´Ð½Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ, коÑоÑÑÑ Ð²Ñ Ð¼Ð¾Ð³Ð»Ð¸ Ð±Ñ Ð½Ð°Ð¿Ð¸ÑаÑÑ Ð² ÑеÑминале.
+6. УказÑваем **командÑ** Ð´Ð»Ñ Ð·Ð°Ð¿ÑÑка `fastapi run`, под капоÑом иÑполÑзÑеÑÑÑ Uvicorn.
- ÐÑа команда бÑÐ´ÐµÑ Ð²Ñполнена в **ÑекÑÑей ÑабоÑей диÑекÑоÑии**, а именно в диÑекÑоÑии `/code`, коÑоÑÐ°Ñ Ñказана в команде `WORKDIR /code`.
+ `CMD` пÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ ÑпиÑок ÑÑÑок, ÐºÐ°Ð¶Ð´Ð°Ñ Ð¸Ð· коÑоÑÑÑ
â ÑÑо Ñо, ÑÑо Ð²Ñ Ð±Ñ Ð²Ð²ÐµÐ»Ð¸ в командной ÑÑÑоке, ÑазделÑÑ Ð¿Ñобелами.
- Так как команда вÑполнÑеÑÑÑ Ð²Ð½ÑÑÑи диÑекÑоÑии `/code`, в коÑоÑÑÑ Ð¼Ñ Ð¿Ð¾Ð¼ÐµÑÑили Ð¿Ð°Ð¿ÐºÑ `./app` Ñ Ð¿Ñиложением, Ñо **Uvicorn** ÑÐ¼Ð¾Ð¶ÐµÑ Ð½Ð°Ð¹Ñи и **импоÑÑиÑоваÑÑ** обÑÐµÐºÑ `app` из Ñайла `app.main`.
+ ÐÑа команда бÑÐ´ÐµÑ Ð²Ñполнена из **ÑекÑÑей ÑабоÑей диÑекÑоÑии**, Ñой Ñамой `/code`, коÑоÑÑÑ Ð²Ñ Ð·Ð°Ð´Ð°Ð»Ð¸ вÑÑе `WORKDIR /code`.
/// tip | ÐодÑказка
-ÐÑли ÑкнÑÑе на кÑÑжок Ñ Ð¿Ð»ÑÑом, Ñо ÑвидиÑе поÑÑнениÑ. ð
+ÐоÑмоÑÑиÑе, ÑÑо Ð´ÐµÐ»Ð°ÐµÑ ÐºÐ°Ð¶Ð´Ð°Ñ ÑÑÑока, кликнÑв по номеÑÑ ÑÑдом Ñо ÑÑÑокой. ð
+
+///
+
+/// warning | ÐÑедÑпÑеждение
+
+ÐÑегда иÑполÑзÑйÑе **exec-ÑоÑмÑ** инÑÑÑÑкÑии `CMD`, как опиÑано ниже.
///
-Ðа данном ÑÑапе ÑÑÑÑкÑÑÑа пÑоекÑа Ð´Ð¾Ð»Ð¶Ð½Ñ Ð²ÑглÑдеÑÑ Ñак:
+#### ÐÑполÑзÑйÑе `CMD` â exec-ÑоÑма { #use-cmd-exec-form }
+
+ÐнÑÑÑÑкÑÐ¸Ñ Docker
@@ -308,15 +334,15 @@ $ docker build -t myimage .
/// tip | ÐодÑказка
-ÐбÑаÑиÑе внимание, ÑÑо в конÑе напиÑана ÑоÑка - `.`, ÑÑо Ñо же Ñамое ÑÑо и `./`, Ñем ÑамÑм Ð¼Ñ ÑказÑваем Docker диÑекÑоÑиÑ, из коÑоÑой нÑжно вÑполнÑÑÑ ÑбоÑÐºÑ Ð¾Ð±Ñаза конÑейнеÑа.
+ÐбÑаÑиÑе внимание на ÑоÑÐºÑ `.` в конÑе â ÑÑо Ñо же Ñамое, ÑÑо `./`. Так Ð¼Ñ ÑказÑваем Docker, из какой диÑекÑоÑии ÑобиÑаÑÑ Ð¾Ð±Ñаз конÑейнеÑа.
-Рданном ÑлÑÑае ÑÑо Ñа же ÑÐ°Ð¼Ð°Ñ Ð´Ð¸ÑекÑоÑÐ¸Ñ (`.`).
+Рданном ÑлÑÑае ÑÑо ÑекÑÑÐ°Ñ Ð´Ð¸ÑекÑоÑÐ¸Ñ (`.`).
///
-### ÐапÑÑк Docker-конÑейнеÑа
+### ÐапÑÑÑиÑÑ Docker-конÑÐµÐ¹Ð½ÐµÑ { #start-the-docker-container }
-* ÐапÑÑÑиÑе конÑейнеÑ, оÑнованнÑй на ваÑем обÑазе:
+* ÐапÑÑÑиÑе конÑÐµÐ¹Ð½ÐµÑ Ð½Ð° оÑнове ваÑего обÑаза:
@@ -326,35 +352,35 @@ $ docker run -d --name mycontainer -p 80:80 myimage
-## ÐÑовеÑка
+## ÐÑовеÑка { #check-it }
-ÐÑ Ð¼Ð¾Ð¶ÐµÑе пÑовеÑиÑÑ, ÑÑо ÐÐ°Ñ Docker-конÑÐµÐ¹Ð½ÐµÑ ÑабоÑÐ°ÐµÑ Ð¿ÐµÑÐµÐ¹Ð´Ñ Ð¿Ð¾ ÑÑÑлке:
http://192.168.99.100/items/5?q=somequery или
http://127.0.0.1/items/5?q=somequery (или поÑ
ожей, коÑоÑÑÑ Ð¸ÑполÑзÑÐµÑ ÐÐ°Ñ Docker-Ñ
оÑÑ).
+ÐÑовеÑÑÑе ÑабоÑÑ Ð¿Ð¾ адÑеÑÑ Ð²Ð°Ñего Docker-Ñ
оÑÑа, напÑимеÑ:
http://192.168.99.100/items/5?q=somequery или
http://127.0.0.1/items/5?q=somequery (или аналогиÑнÑй URL ваÑего Docker-Ñ
оÑÑа).
-Там Ð²Ñ ÑвидиÑе:
+ÐÑ ÑвидиÑе ÑÑо-Ñо вÑоде:
```JSON
{"item_id": 5, "q": "somequery"}
```
-## ÐнÑеÑакÑÐ¸Ð²Ð½Ð°Ñ Ð´Ð¾ÐºÑменÑаÑÐ¸Ñ API
+## ÐнÑеÑакÑÐ¸Ð²Ð½Ð°Ñ Ð´Ð¾ÐºÑменÑаÑÐ¸Ñ API { #interactive-api-docs }
-ТепеÑÑ Ð¿ÐµÑейдиÑе по ÑÑÑлке
http://192.168.99.100/docs или
http://127.0.0.1/docs (или поÑ
ожей, коÑоÑÑÑ Ð¸ÑполÑзÑÐµÑ ÐÐ°Ñ Docker-Ñ
оÑÑ).
+ТепеÑÑ Ð·Ð°Ð¹Ð´Ð¸Ñе на
http://192.168.99.100/docs или
http://127.0.0.1/docs (или аналогиÑнÑй URL ваÑего Docker-Ñ
оÑÑа).
-ÐдеÑÑ Ð²Ñ ÑвидиÑе авÑомаÑиÑеÑкÑÑ Ð¸Ð½ÑеÑакÑивнÑÑ Ð´Ð¾ÐºÑменÑаÑÐ¸Ñ API (пÑедоÑÑавлÑемÑÑ
Swagger UI):
+ÐÑ ÑвидиÑе авÑомаÑиÑеÑкÑÑ Ð¸Ð½ÑеÑакÑивнÑÑ Ð´Ð¾ÐºÑменÑаÑÐ¸Ñ API (на базе
Swagger UI):

-## ÐлÑÑеÑнаÑÐ¸Ð²Ð½Ð°Ñ Ð´Ð¾ÐºÑменÑаÑÐ¸Ñ API
+## ÐлÑÑеÑнаÑÐ¸Ð²Ð½Ð°Ñ Ð´Ð¾ÐºÑменÑаÑÐ¸Ñ API { #alternative-api-docs }
-Также Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе пеÑейÑи по ÑÑÑлке
http://192.168.99.100/redoc or
http://127.0.0.1/redoc (или поÑ
ожей, коÑоÑÑÑ Ð¸ÑполÑзÑÐµÑ ÐÐ°Ñ Docker-Ñ
оÑÑ).
+Также можно оÑкÑÑÑÑ
http://192.168.99.100/redoc или
http://127.0.0.1/redoc (или аналогиÑнÑй URL ваÑего Docker-Ñ
оÑÑа).
-ÐдеÑÑ Ð²Ñ ÑвидиÑе алÑÑеÑнаÑивнÑÑ Ð°Ð²ÑомаÑиÑеÑкÑÑ Ð´Ð¾ÐºÑменÑаÑÐ¸Ñ API (пÑедоÑÑавлÑемÑÑ
ReDoc):
+ÐÑ ÑвидиÑе алÑÑеÑнаÑивнÑÑ Ð°Ð²ÑомаÑиÑеÑкÑÑ Ð´Ð¾ÐºÑменÑаÑÐ¸Ñ (на базе
ReDoc):

-## Создание Docker-обÑаза на оÑнове одноÑайлового пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ FastAPI
+## СобÑаÑÑ Docker-обÑаз Ð´Ð»Ñ Ð¾Ð´Ð½Ð¾Ñайлового FastAPI { #build-a-docker-image-with-a-single-file-fastapi }
-ÐÑли ваÑе пÑиложение FastAPI помеÑено в один Ñайл, напÑимеÑ, `main.py` и ÑÑÑÑкÑÑÑа ÐаÑиÑ
Ñайлов поÑ
ожа на ÑÑÑ:
+ÐÑли ваÑе пÑиложение FastAPI â один Ñайл, напÑÐ¸Ð¼ÐµÑ `main.py` без диÑекÑоÑии `./app`, ÑÑÑÑкÑÑÑа Ñайлов Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ñакой:
```
.
@@ -363,7 +389,7 @@ $ docker run -d --name mycontainer -p 80:80 myimage
âââ requirements.txt
```
-Ðам нÑжно измениÑÑ Ð² `Dockerfile` ÑооÑвеÑÑÑвÑÑÑие пÑÑи копиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ñайлов:
+Тогда в `Dockerfile` нÑжно измениÑÑ Ð¿ÑÑи копиÑованиÑ:
```{ .dockerfile .annotate hl_lines="10 13" }
FROM python:3.9
@@ -374,360 +400,221 @@ COPY ./requirements.txt /code/requirements.txt
RUN pip install --no-cache-dir --upgrade -r /code/requirements.txt
-# (1)
+# (1)!
COPY ./main.py /code/
-# (2)
-CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "80"]
+# (2)!
+CMD ["fastapi", "run", "main.py", "--port", "80"]
```
-1. СкопиÑÑйÑе непоÑÑедÑÑвенно Ñайл `main.py` в диÑекÑоÑÐ¸Ñ `/code` (не ÑказÑвайÑе `./app`).
+1. ÐопиÑÑем Ñайл `main.py` напÑÑмÑÑ Ð² `/code` (без диÑекÑоÑии `./app`).
-2. ÐÑи запÑÑке Uvicorn ÑкажиÑе емÑ, ÑÑо обÑÐµÐºÑ `app` нÑжно импоÑÑиÑоваÑÑ Ð¸Ð· Ñайла `main` (вмеÑÑо импоÑÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð¸Ð· `app.main`).
+2. ÐÑполÑзÑем `fastapi run` Ð´Ð»Ñ Ð·Ð°Ð¿ÑÑка пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¸Ð· одного Ñайла `main.py`.
-ÐаÑÑÑойÑе Uvicorn на иÑполÑзование `main` вмеÑÑо `app.main` Ð´Ð»Ñ Ð¸Ð¼Ð¿Ð¾ÑÑа обÑекÑа `app`.
+Ðогда Ð²Ñ Ð¿ÐµÑедаÑÑе Ñайл в `fastapi run`, он авÑомаÑиÑеÑки опÑеделиÑ, ÑÑо ÑÑо одиноÑнÑй Ñайл, а не ÑаÑÑÑ Ð¿Ð°ÐºÐµÑа, и поймÑÑ, как его импоÑÑиÑоваÑÑ Ð¸ запÑÑÑиÑÑ Ð²Ð°Ñе FastAPI-пÑиложение. ð
-## ÐонÑепÑии ÑазвÑÑÑÑваниÑ
+## ÐонÑепÑии ÑазвеÑÑÑÐ²Ð°Ð½Ð¸Ñ { #deployment-concepts }
-ÐавайÑе вÑпомним о [ÐонÑепÑиÑÑ
ÑазвÑÑÑÑваниÑ](concepts.md){.internal-link target=_blank} и пÑименим иÑ
к конÑейнеÑам.
+ÐÑÑ Ñаз ÑаÑÑмоÑÑим [конÑепÑии ÑазвеÑÑÑваниÑ](concepts.md){.internal-link target=_blank} пÑимениÑелÑно к конÑейнеÑам.
-ÐонÑейнеÑÑ - ÑÑо, в оÑновном, инÑÑÑÑÐ¼ÐµÐ½Ñ ÑпÑоÑаÑÑий **ÑбоÑÐºÑ Ð¸ ÑазвÑÑÑÑвание** пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¸ они не обÑзÑваÑÑ Ðº пÑÐ¸Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ ÐºÐ°ÐºÐ¾Ð¹-Ñо опÑеделÑнной **конÑепÑии ÑазвÑÑÑÑваниÑ**, а знаÑÐ¸Ñ Ð¼Ñ Ð¼Ð¾Ð¶ÐµÐ¼ вÑбиÑаÑÑ Ð½ÑжнÑÑ ÑÑÑаÑегиÑ.
+ÐонÑейнеÑÑ Ð³Ð»Ð°Ð²Ð½Ñм обÑазом ÑпÑоÑаÑÑ **ÑбоÑÐºÑ Ð¸ ÑазвÑÑÑÑвание** пÑиложениÑ, но не навÑзÑваÑÑ ÐºÐ¾Ð½ÐºÑеÑнÑй подÑ
од к ÑÑим **конÑепÑиÑм ÑазвеÑÑÑваниÑ**, и ÑÑÑеÑÑвÑÐµÑ Ð½ÐµÑколÑко ÑÑÑаÑегий.
-**ХоÑоÑÐ°Ñ Ð½Ð¾Ð²Ð¾ÑÑÑ** в Ñом, ÑÑо незавиÑимо Ð¾Ñ Ð²ÑбÑанной ÑÑÑаÑегии, Ð¼Ñ Ð²ÑÑ Ñавно можем покÑÑÑÑ Ð²Ñе конÑепÑии ÑазвÑÑÑÑваниÑ. ð
+**ХоÑоÑÐ°Ñ Ð½Ð¾Ð²Ð¾ÑÑÑ** в Ñом, ÑÑо пÑи лÑбой ÑÑÑаÑегии еÑÑÑ ÑпоÑоб оÑ
ваÑиÑÑ Ð²Ñе конÑепÑии ÑазвеÑÑÑваниÑ. ð
-РаÑÑмоÑÑим ÑÑи **конÑепÑии ÑазвÑÑÑÑваниÑ** пÑимениÑелÑно к конÑейнеÑам:
+РаÑÑмоÑÑим ÑÑи **конÑепÑии ÑазвеÑÑÑваниÑ** в ÑеÑминаÑ
конÑейнеÑов:
-* ÐÑполÑзование более безопаÑного пÑоÑокола HTTPS
-* ÐаÑÑÑойки запÑÑка пÑиложениÑ
-* ÐеÑезагÑÑзка пÑиложениÑ
-* ÐапÑÑк неÑколÑкиÑ
ÑкземплÑÑов пÑиложениÑ
-* УпÑавление памÑÑÑÑ
-* ÐÑполÑзование пеÑеÑиÑленнÑÑ
ÑÑнкÑий пеÑед запÑÑком пÑиложениÑ
+* HTTPS
+* ÐапÑÑк пÑи ÑÑаÑÑе
+* ÐеÑезапÑÑки
+* РепликаÑÐ¸Ñ (колиÑеÑÑво запÑÑеннÑÑ
пÑоÑеÑÑов)
+* ÐамÑÑÑ
+* ÐÑедваÑиÑелÑнÑе Ñаги пеÑед запÑÑком
-## ÐÑполÑзование более безопаÑного пÑоÑокола HTTPS
+## HTTPS { #https }
-ÐÑли Ð¼Ñ Ð¾Ð¿ÑеделимÑÑ, ÑÑо **обÑаз конÑейнеÑа** бÑÐ´ÐµÑ ÑодеÑжаÑÑ ÑолÑко пÑиложение FastAPI, Ñо ÑабоÑÑ Ñ HTTPS можно оÑганизоваÑÑ **ÑнаÑÑжи** конÑейнеÑа пÑи помоÑи дÑÑгого инÑÑÑÑменÑа.
+ÐÑли Ð¼Ñ ÑаÑÑмаÑÑиваем ÑолÑко **обÑаз конÑейнеÑа** Ð´Ð»Ñ Ð¿ÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ FastAPI (и далее запÑÑеннÑй **конÑейнеÑ**), Ñо HTTPS обÑÑно обÑабаÑÑваеÑÑÑ **внеÑним** инÑÑÑÑменÑом.
-ÐÑо Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð´ÑÑгой конÑейнеÑ, в коÑоÑом еÑÑÑ, напÑимеÑ,
Traefik, ÑабоÑаÑÑий Ñ **HTTPS** и **ÑамоÑÑоÑÑелÑно** обновлÑÑÑий **ÑеÑÑиÑикаÑÑ**.
+ÐÑо Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð´ÑÑгой конÑейнеÑ, напÑÐ¸Ð¼ÐµÑ Ñ
Traefik, коÑоÑÑй беÑÑÑ Ð½Ð° ÑÐµÐ±Ñ **HTTPS** и **авÑомаÑиÑеÑкое** полÑÑение **ÑеÑÑиÑикаÑов**.
/// tip | ÐодÑказка
-Traefik ÑовмеÑÑим Ñ Docker, Kubernetes и им подобнÑми инÑÑÑÑменÑами. Ðн оÑÐµÐ½Ñ Ð¿ÑоÑÑ Ð² ÑÑÑановке и наÑÑÑойке иÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ HTTPS Ð´Ð»Ñ ÐаÑиÑ
конÑейнеÑов.
+У Traefik еÑÑÑ Ð¸Ð½ÑегÑаÑии Ñ Docker, Kubernetes и дÑÑгими, поÑÑÐ¾Ð¼Ñ Ð¾ÑÐµÐ½Ñ Ð»ÐµÐ³ÐºÐ¾ наÑÑÑоиÑÑ Ð¸ ÑконÑигÑÑиÑоваÑÑ HTTPS Ð´Ð»Ñ Ð²Ð°ÑиÑ
конÑейнеÑов.
///
-РкаÑеÑÑве алÑÑеÑнаÑивÑ, ÑабоÑÑ Ñ HTTPS можно довеÑиÑÑ Ð¾Ð±Ð»Ð°ÑÐ½Ð¾Ð¼Ñ Ð¿ÑовайдеÑÑ, еÑли он пÑедоÑÑавлÑÐµÑ ÑакÑÑ ÑÑлÑгÑ.
+РкаÑеÑÑве алÑÑеÑнаÑÐ¸Ð²Ñ HTTPS Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ñеализован как ÑеÑÐ²Ð¸Ñ Ð¾Ð±Ð»Ð°Ñного пÑовайдеÑа (пÑи ÑÑом пÑиложение вÑÑ Ñавно ÑабоÑÐ°ÐµÑ Ð² конÑейнеÑе).
-## ÐаÑÑÑойки запÑÑка и пеÑезагÑÑзки пÑиложениÑ
+## ÐапÑÑк пÑи ÑÑаÑÑе и пеÑезапÑÑки { #running-on-startup-and-restarts }
-ÐбÑÑно **запÑÑком конÑейнеÑа Ñ Ð¿Ñиложением** занимаеÑÑÑ ÐºÐ°ÐºÐ¾Ð¹-Ñо оÑделÑнÑй инÑÑÑÑменÑ.
+ÐбÑÑно еÑÑÑ Ð´ÑÑгой инÑÑÑÑменÑ, оÑвеÑаÑÑий за **запÑÑк и ÑабоÑÑ** ваÑего конÑейнеÑа.
-ÐÑо Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ñам **Docker**, **Docker Compose**, **Kubernetes**, **облаÑнÑй пÑовайдеÑ** и Ñ.п.
+ÐÑо Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ñам **Docker**, **Docker Compose**, **Kubernetes**, **облаÑнÑй ÑеÑвиÑ** и Ñ.п.
-РболÑÑинÑÑве ÑлÑÑаев ÑÑо пÑоÑÑейÑие наÑÑÑойки запÑÑка и пеÑезагÑÑзки пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ (пÑи падении). ÐапÑимеÑ, команде запÑÑка Docker-конÑейнеÑа можно добавиÑÑ Ð¾Ð¿ÑÐ¸Ñ `--restart`.
+РболÑÑинÑÑве (или во вÑеÑ
) ÑлÑÑаев еÑÑÑ Ð¿ÑоÑÑÐ°Ñ Ð¾Ð¿ÑиÑ, ÑÑÐ¾Ð±Ñ Ð²ÐºÐ»ÑÑиÑÑ Ð·Ð°Ð¿ÑÑк конÑейнеÑа пÑи ÑÑаÑÑе ÑиÑÑÐµÐ¼Ñ Ð¸ пеÑезапÑÑки пÑи ÑбоÑÑ
. ÐапÑимеÑ, в Docker ÑÑо опÑÐ¸Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð½Ð¾Ð¹ ÑÑÑоки `--restart`.
-УпÑавление запÑÑком и пеÑезагÑÑзкой пÑиложений без иÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ ÐºÐ¾Ð½ÑейнеÑов - веÑÑма заÑÑÑдниÑелÑно. Ðо пÑи **ÑабоÑе Ñ ÐºÐ¾Ð½ÑейнеÑами** - ÑÑо вÑего лиÑÑ ÑÑнкÑионал доÑÑÑпнÑй по ÑмолÑаниÑ. â¨
+Ðез конÑейнеÑов обеÑпеÑиÑÑ Ð·Ð°Ð¿ÑÑк пÑи ÑÑаÑÑе и пеÑезапÑÑки Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ñложно. Ðо пÑи **ÑабоÑе Ñ ÐºÐ¾Ð½ÑейнеÑами** в болÑÑинÑÑве ÑлÑÑаев ÑÑÐ¾Ñ ÑÑнкÑионал доÑÑÑпен по ÑмолÑаниÑ. â¨
-## ÐапÑÑк неÑколÑкиÑ
ÑкземплÑÑов пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ - Указание колиÑеÑÑва пÑоÑеÑÑов
+## РепликаÑÐ¸Ñ â колиÑеÑÑво пÑоÑеÑÑов { #replication-number-of-processes }
-ÐÑли Ñ Ð²Ð°Ñ ÐµÑÑÑ
клаÑÑÐµÑ Ð¼Ð°Ñин под ÑпÑавлением **Kubernetes**, Docker Swarm Mode, Nomad или аналогиÑной Ñложной ÑиÑÑемой оÑкеÑÑÑаÑии конÑейнеÑов, ÑкоÑее вÑего, вмеÑÑо иÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¼ÐµÐ½ÐµÐ´Ð¶ÐµÑа пÑоÑеÑÑов (Ñипа Gunicorn и его воÑкеÑÑ) в каждом конÑейнеÑе, Ð²Ñ Ð·Ð°Ñ
оÑиÑе **ÑпÑавлÑÑÑ ÐºÐ¾Ð»Ð¸ÑеÑÑвом запÑÑеннÑÑ
ÑкземплÑÑов пÑиложениÑ** на **ÑÑовне клаÑÑеÑа**.
+ÐÑли Ñ Ð²Ð°Ñ ÐµÑÑÑ
клаÑÑÐµÑ Ð¼Ð°Ñин Ñ **Kubernetes**, Docker Swarm Mode, Nomad или дÑÑгой поÑ
ожей ÑиÑÑемой Ð´Ð»Ñ ÑпÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ ÑаÑпÑеделÑннÑми конÑейнеÑами на неÑколÑкиÑ
маÑинаÑ
, ÑкоÑее вÑего Ð²Ñ Ð±ÑдеÑе **ÑпÑавлÑÑÑ ÑепликаÑией** на **ÑÑовне клаÑÑеÑа**, а не иÑполÑзоваÑÑ **Ð¼ÐµÐ½ÐµÐ´Ð¶ÐµÑ Ð¿ÑоÑеÑÑов** (напÑимеÑ, Uvicorn Ñ Ð²Ð¾ÑкеÑами) в каждом конÑейнеÑе.
-РлÑбÑÑ Ð¸Ð· ÑÑиÑ
ÑиÑÑем ÑпÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ ÐºÐ¾Ð½ÑейнеÑами обÑÑно вÑÑÑоен ÑпоÑоб ÑпÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ **колиÑеÑÑвом запÑÑеннÑÑ
конÑейнеÑов** Ð´Ð»Ñ ÑаÑпÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ **нагÑÑзки** Ð¾Ñ Ð²Ñ
одÑÑиÑ
запÑоÑов на **ÑÑовне клаÑÑеÑа**.
+Ðдна из ÑакиÑ
ÑиÑÑем ÑпÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ ÑаÑпÑеделÑннÑми конÑейнеÑами, как Kubernetes, обÑÑно Ð¸Ð¼ÐµÐµÑ Ð²ÑÑÑоеннÑй ÑпоÑоб ÑпÑавлÑÑÑ **ÑепликаÑией конÑейнеÑов**, поддеÑÐ¶Ð¸Ð²Ð°Ñ **баланÑиÑÐ¾Ð²ÐºÑ Ð½Ð°Ð³ÑÑзки** Ð´Ð»Ñ Ð²Ñ
одÑÑиÑ
запÑоÑов â вÑÑ ÑÑо на **ÑÑовне клаÑÑеÑа**.
-Ð Ñакой ÑиÑÑаÑии ÐÑ, веÑоÑÑно, заÑ
оÑиÑе ÑоздаÑÑ **обÑаз Docker**, как [опиÑано вÑÑе](#dockerfile), Ñ ÑÑÑановленнÑми завиÑимоÑÑÑми и запÑÑкаÑÑий **один пÑоÑеÑÑ Uvicorn** вмеÑÑо Ñого, ÑÑÐ¾Ð±Ñ Ð·Ð°Ð¿ÑÑкаÑÑ Gunicorn ÑпÑавлÑÑÑий неÑколÑкими воÑкеÑами Uvicorn.
+Ð ÑакиÑ
ÑлÑÑаÑÑ
вÑ, ÑкоÑее вÑего, заÑ
оÑиÑе ÑобÑаÑÑ **Docker-обÑаз Ñ Ð½ÑлÑ**, как [опиÑано вÑÑе](#dockerfile), ÑÑÑановиÑÑ Ð·Ð°Ð²Ð¸ÑимоÑÑи и запÑÑкаÑÑ **один пÑоÑеÑÑ Uvicorn** вмеÑÑо множеÑÑва воÑкеÑов Uvicorn.
-### ÐаланÑиÑовÑик нагÑÑзки
+### ÐаланÑиÑовÑик нагÑÑзки { #load-balancer }
-ÐбÑÑно пÑи иÑполÑзовании конÑейнеÑов один ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½Ñ **пÑоÑлÑÑÐ¸Ð²Ð°ÐµÑ Ð³Ð»Ð°Ð²Ð½Ñй поÑÑ**. ÐÑо Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ ÐºÐ¾Ð½ÑÐµÐ¹Ð½ÐµÑ ÑодеÑжаÑий **пÑокÑи-ÑеÑÐ²ÐµÑ Ð·Ð°Ð²ÐµÑÑÐµÐ½Ð¸Ñ ÑабоÑÑ TLS** Ð´Ð»Ñ ÑабоÑÑ Ñ **HTTPS** или ÑÑо-Ñо подобное.
+ÐÑи иÑполÑзовании конÑейнеÑов обÑÑно еÑÑÑ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½Ñ, **ÑлÑÑаÑÑий главнÑй поÑÑ**. ÐÑо Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð´ÑÑгой конÑÐµÐ¹Ð½ÐµÑ â **пÑокÑи завеÑÑÐµÐ½Ð¸Ñ TLS** Ð´Ð»Ñ Ð¾Ð±ÑабоÑки **HTTPS** или поÑ
ожий инÑÑÑÑменÑ.
-ÐоÑколÑÐºÑ ÑÑÐ¾Ñ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½Ñ **пÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ Ð·Ð°Ð¿ÑоÑÑ** и ÑавномеÑно **ÑаÑпÑеделÑеÑ** иÑ
Ð¼ÐµÐ¶Ð´Ñ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½Ñами, его Ñакже назÑваÑÑ **баланÑиÑовÑиком нагÑÑзки**.
+ÐоÑколÑÐºÑ ÑÑÐ¾Ñ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½Ñ Ð¿ÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ **нагÑÑзкÑ** запÑоÑов и ÑаÑпÑеделÑÐµÑ ÐµÑ Ð¼ÐµÐ¶Ð´Ñ Ð²Ð¾ÑкеÑами **ÑбаланÑиÑованно**, его ÑаÑÑо назÑваÑÑ **баланÑиÑовÑиком нагÑÑзки**.
/// tip | ÐодÑказка
-**ÐÑокÑи-ÑеÑÐ²ÐµÑ Ð·Ð°Ð²ÐµÑÑÐµÐ½Ð¸Ñ ÑабоÑÑ TLS** одновÑеменно Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ **баланÑиÑовÑиком нагÑÑзки**.
+Ð¢Ð¾Ñ Ð¶Ðµ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½Ñ **пÑокÑи завеÑÑÐµÐ½Ð¸Ñ TLS**, коÑоÑÑй обÑабаÑÑÐ²Ð°ÐµÑ HTTPS, ÑкоÑее вÑего Ñакже бÑÐ´ÐµÑ **баланÑиÑовÑиком нагÑÑзки**.
///
-СиÑÑема оÑкеÑÑÑаÑии, коÑоÑÑÑ Ð²Ñ Ð¸ÑполÑзÑеÑе Ð´Ð»Ñ Ð·Ð°Ð¿ÑÑка и ÑпÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ ÐºÐ¾Ð½ÑейнеÑами, Ð¸Ð¼ÐµÐµÑ Ð²ÑÑÑоеннÑй инÑÑÑÑÐ¼ÐµÐ½Ñ **ÑеÑевого взаимодейÑÑвиÑ** (напÑимеÑ, Ð´Ð»Ñ Ð¿ÐµÑедаÑи HTTP-запÑоÑов) Ð¼ÐµÐ¶Ð´Ñ ÐºÐ¾Ð½ÑейнеÑами Ñ ÐаÑими пÑиложениÑми и **баланÑиÑовÑиком нагÑÑзки** (коÑоÑÑй Ñакже Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ **пÑокÑи-ÑеÑвеÑом**).
+ÐÑи ÑабоÑе Ñ ÐºÐ¾Ð½ÑейнеÑами ÑиÑÑема, коÑоÑÑÑ Ð²Ñ Ð¸ÑполÑзÑеÑе Ð´Ð»Ñ Ð·Ð°Ð¿ÑÑка и ÑпÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¸Ð¼Ð¸, Ñже Ð¸Ð¼ÐµÐµÑ Ð²Ð½ÑÑÑенние ÑÑедÑÑва Ð´Ð»Ñ Ð¿ÐµÑедаÑи **ÑеÑевого взаимодейÑÑвиÑ** (напÑимеÑ, HTTP-запÑоÑов) Ð¾Ñ **баланÑиÑовÑика нагÑÑзки** (коÑоÑÑй Ñакже Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ **пÑокÑи завеÑÑÐµÐ½Ð¸Ñ TLS**) к конÑейнеÑÑ(-ам) Ñ Ð²Ð°Ñим пÑиложением.
-### Ðдин баланÑиÑовÑик - ÐножеÑÑво конÑейнеÑов
+### Ðдин баланÑиÑовÑик â неÑколÑко конÑейнеÑов-воÑкеÑов { #one-load-balancer-multiple-worker-containers }
-ÐÑи ÑабоÑе Ñ **Kubernetes** или аналогиÑнÑми ÑиÑÑемами оÑкеÑÑÑаÑии иÑполÑзование иÑ
внÑÑÑенней ÑеÑи позволÑÐµÑ Ð¸Ð¼ÐµÑÑ Ð¾Ð´Ð¸Ð½ **баланÑиÑовÑик нагÑÑзки**, коÑоÑÑй пÑоÑлÑÑÐ¸Ð²Ð°ÐµÑ **главнÑй** поÑÑ Ð¸ пеÑедаÑÑ Ð·Ð°Ð¿ÑоÑÑ **множеÑÑÐ²Ñ Ð·Ð°Ð¿ÑÑеннÑÑ
конÑейнеÑов** Ñ ÐаÑими пÑиложениÑми.
+ÐÑи ÑабоÑе Ñ **Kubernetes** или поÑ
ожими ÑиÑÑемами ÑпÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ ÑаÑпÑеделÑннÑми конÑейнеÑами иÑ
внÑÑÑенние меÑ
Ð°Ð½Ð¸Ð·Ð¼Ñ ÑеÑи позволÑÑÑ Ð¾Ð´Ð½Ð¾Ð¼Ñ **баланÑиÑовÑÐ¸ÐºÑ Ð½Ð°Ð³ÑÑзки**, ÑлÑÑаÑÑÐµÐ¼Ñ Ð³Ð»Ð°Ð²Ð½Ñй **поÑÑ**, пеÑедаваÑÑ Ð·Ð°Ð¿ÑоÑÑ Ð² **неÑколÑко конÑейнеÑов**, где запÑÑено ваÑе пÑиложение.
-Ркаждом из конÑейнеÑов обÑÑно ÑабоÑÐ°ÐµÑ **ÑолÑко один пÑоÑеÑÑ** (напÑимеÑ, пÑоÑеÑÑ Uvicorn ÑпÑавлÑÑÑий ÐаÑим пÑиложением FastAPI). ÐонÑейнеÑÑ Ð¼Ð¾Ð³ÑÑ Ð±ÑÑÑ **иденÑиÑнÑми**, запÑÑеннÑми на оÑнове одного и Ñого же обÑаза, но Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ бÑдÑÑ Ñвои оÑделÑнÑе пÑоÑеÑÑ, памÑÑÑ Ð¸ Ñ.п. Таким обÑазом Ð¼Ñ Ð¿Ð¾Ð»ÑÑаем пÑеимÑÑеÑÑва **ÑаÑпаÑаллеливаниÑ** ÑабоÑÑ Ð¿Ð¾ **ÑазнÑм ÑдÑам** пÑоÑеÑÑоÑа или даже **ÑазнÑм маÑинам**.
+ÐаждÑй Ñакой конÑÐµÐ¹Ð½ÐµÑ Ñ Ð²Ð°Ñим пÑиложением обÑÑно Ð¸Ð¼ÐµÐµÑ **ÑолÑко один пÑоÑеÑÑ** (напÑимеÑ, пÑоÑеÑÑ Uvicorn Ñ Ð²Ð°Ñим пÑиложением FastAPI). ÐÑе они â **одинаковÑе конÑейнеÑÑ**, запÑÑкаÑÑие одно и Ñо же, но Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ Ñвой пÑоÑеÑÑ, памÑÑÑ Ð¸ Ñ.п. Так Ð²Ñ Ð¸ÑполÑзÑеÑе **паÑаллелизм** по **ÑазнÑм ÑдÑам** CPU или даже **ÑазнÑм маÑинам**.
-СиÑÑема ÑпÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ ÐºÐ¾Ð½ÑейнеÑами Ñ **баланÑиÑовÑиком нагÑÑзки** бÑÐ´ÐµÑ **ÑаÑпÑеделÑÑÑ Ð·Ð°Ð¿ÑоÑÑ** к конÑейнеÑам Ñ Ð¿ÑиложениÑми **по оÑеÑеди**. То еÑÑÑ ÐºÐ°Ð¶Ð´Ñй запÑÐ¾Ñ Ð±ÑÐ´ÐµÑ Ð¾Ð±ÑабоÑан одним из множеÑÑва **одинаковÑÑ
конÑейнеÑов** Ñ Ð¾Ð´Ð½Ð¸Ð¼ и Ñем же пÑиложением.
+СиÑÑема ÑаÑпÑеделÑннÑÑ
конÑейнеÑов Ñ **баланÑиÑовÑиком нагÑÑзки** бÑÐ´ÐµÑ **ÑаÑпÑеделÑÑÑ Ð·Ð°Ð¿ÑоÑÑ** Ð¼ÐµÐ¶Ð´Ñ ÐºÐ¾Ð½ÑейнеÑами Ñ Ð²Ð°Ñим пÑиложением **по оÑеÑеди**. То еÑÑÑ ÐºÐ°Ð¶Ð´Ñй запÑÐ¾Ñ Ð¼Ð¾Ð¶ÐµÑ Ð¾Ð±ÑабаÑÑваÑÑÑÑ Ð¾Ð´Ð½Ð¸Ð¼ из неÑколÑкиÑ
**ÑеплиÑиÑованнÑÑ
конÑейнеÑов**.
-**ÐаланÑиÑовÑик нагÑÑзки** Ð¼Ð¾Ð¶ÐµÑ Ð¾Ð±ÑабаÑÑваÑÑ Ð·Ð°Ð¿ÑоÑÑ Ðº *ÑазнÑм* пÑиложениÑм, ÑаÑположеннÑм в ваÑем клаÑÑеÑе (напÑимеÑ, еÑли Ñ Ð½Ð¸Ñ
ÑазнÑе Ð´Ð¾Ð¼ÐµÐ½Ñ Ð¸Ð»Ð¸ пÑеÑикÑÑ Ð¿ÑÑи) и пеÑедаваÑÑ Ð·Ð°Ð¿ÑоÑÑ Ð½ÑÐ¶Ð½Ð¾Ð¼Ñ ÐºÐ¾Ð½ÑейнеÑÑ Ñ ÑÑебÑемÑм пÑиложением.
+ÐбÑÑно Ñакой **баланÑиÑовÑик нагÑÑзки** Ð¼Ð¾Ð¶ÐµÑ Ñакже обÑабаÑÑваÑÑ Ð·Ð°Ð¿ÑоÑÑ Ðº *дÑÑгим* пÑиложениÑм в ваÑем клаÑÑеÑе (напÑимеÑ, к дÑÑÐ³Ð¾Ð¼Ñ Ð´Ð¾Ð¼ÐµÐ½Ñ Ð¸Ð»Ð¸ под дÑÑгим пÑеÑикÑом пÑÑи URL) и напÑавлÑÑÑ Ð¸Ñ
к нÑжнÑм конÑейнеÑам ÑÑого *дÑÑгого* пÑиложениÑ.
-### Ðдин пÑоÑеÑÑ Ð½Ð° конÑейнеÑ
+### Ðдин пÑоÑеÑÑ Ð½Ð° конÑÐµÐ¹Ð½ÐµÑ { #one-process-per-container }
-Ð ÑÑом ваÑианÑе **в одном конÑейнеÑе бÑÐ´ÐµÑ Ð·Ð°Ð¿ÑÑен ÑолÑко один пÑоÑеÑÑ (Uvicorn)**, а ÑпÑавление изменением колиÑеÑÑва запÑÑеннÑÑ
копий пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¿ÑоиÑÑ
Ð¾Ð´Ð¸Ñ Ð½Ð° ÑÑовне клаÑÑеÑа.
+Ð Ñаком ÑÑенаÑии, ÑкоÑее вÑего, Ð²Ñ Ð·Ð°Ñ
оÑиÑе имеÑÑ **один (Uvicorn) пÑоÑеÑÑ Ð½Ð° конÑейнеÑ**, Ñак как ÑепликаÑÐ¸Ñ Ñже ÑпÑавлÑеÑÑÑ Ð½Ð° ÑÑовне клаÑÑеÑа.
-ÐдеÑÑ **не нÑжен** Ð¼ÐµÐ½ÐµÐ´Ð¶ÐµÑ Ð¿ÑоÑеÑÑов Ñипа Gunicorn, ÑпÑавлÑÑÑий пÑоÑеÑÑами Uvicorn, или же Uvicorn, ÑпÑавлÑÑÑий дÑÑгими пÑоÑеÑÑами Uvicorn. ÐоÑÑаÑоÑно **ÑолÑко одного пÑоÑеÑÑа Uvicorn** на конÑÐµÐ¹Ð½ÐµÑ (но запÑÑк неÑколÑкиÑ
пÑоÑеÑÑов не запÑеÑÑн).
+ÐоÑÑÐ¾Ð¼Ñ Ð² конÑейнеÑе **не нÑжно** поднимаÑÑ Ð½ÐµÑколÑко воÑкеÑов, напÑÐ¸Ð¼ÐµÑ ÑеÑез опÑÐ¸Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð½Ð¾Ð¹ ÑÑÑоки `--workers`. ÐÑжен **один пÑоÑеÑÑ Uvicorn** на конÑÐµÐ¹Ð½ÐµÑ (но, возможно, неÑколÑко конÑейнеÑов).
-ÐÑполÑзование менеджеÑа пÑоÑеÑÑов (Gunicorn или Uvicorn) внÑÑÑи конÑейнеÑа ÑолÑко добавлÑÐµÑ **излиÑнее ÑÑложнение**, Ñак как ÑпÑавление ÑледÑÐµÑ Ð¾ÑÑÑеÑÑвлÑÑÑ ÑиÑÑемой оÑкеÑÑÑаÑии.
+ÐалиÑие оÑделÑного менеджеÑа пÑоÑеÑÑов внÑÑÑи конÑейнеÑа (как пÑи неÑколÑкиÑ
воÑкеÑаÑ
) ÑолÑко Ð´Ð¾Ð±Ð°Ð²Ð¸Ñ **лиÑнÑÑ ÑложноÑÑÑ**, коÑоÑÑÑ, веÑоÑÑно, Ñже беÑÑÑ Ð½Ð° ÑÐµÐ±Ñ Ð²Ð°Ñа клаÑÑеÑÐ½Ð°Ñ ÑиÑÑема.
-### ÐножеÑÑво пÑоÑеÑÑов внÑÑÑи конÑейнеÑа Ð´Ð»Ñ Ð¾ÑобÑÑ
ÑлÑÑаев
+### ÐонÑейнеÑÑ Ñ Ð½ÐµÑколÑкими пÑоÑеÑÑами и оÑобÑе ÑлÑÑаи { #containers-with-multiple-processes-and-special-cases }
-ÐезÑÑловно, бÑваÑÑ **оÑобÑе ÑлÑÑаи**, когда Ð¼Ð¾Ð¶ÐµÑ Ð¿Ð¾Ð½Ð°Ð´Ð¾Ð±Ð¸ÑÑÑÑ Ð²Ð½ÑÑÑи конÑейнеÑа запÑÑкаÑÑ **Ð¼ÐµÐ½ÐµÐ´Ð¶ÐµÑ Ð¿ÑоÑеÑÑов Gunicorn**, ÑпÑавлÑÑÑий неÑколÑкими **пÑоÑеÑÑами Uvicorn**.
+ÐонеÑно, еÑÑÑ **оÑобÑе ÑлÑÑаи**, когда Ð¼Ð¾Ð¶ÐµÑ Ð¿Ð¾Ð½Ð°Ð´Ð¾Ð±Ð¸ÑÑÑÑ **конÑейнеÑ** Ñ Ð½ÐµÑколÑкими **воÑкеÑами Uvicorn** внÑÑÑи.
-ÐÐ»Ñ ÑакиÑ
ÑлÑÑаев Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе иÑполÑзоваÑÑ **оÑиÑиалÑнÑй Docker-обÑаз** (пÑим. пеÑ: - *здеÑÑ Ð¸ далее на ÑÑой ÑÑÑаниÑе, еÑли Ð²Ñ Ð²ÑÑÑеÑиÑе ÑоÑеÑание "оÑиÑиалÑнÑй Docker-обÑаз" без ÑÑоÑнений, Ñо авÑÐ¾Ñ Ð¸Ð¼ÐµÐµÑ Ð² Ð²Ð¸Ð´Ñ Ð¸Ð¼ÐµÐ½Ð½Ð¾ пÑедоÑÑавлÑемÑй им обÑаз*), где в каÑеÑÑве менеджеÑа пÑоÑеÑÑов иÑполÑзÑеÑÑÑ **Gunicorn**, запÑÑкаÑÑий неÑколÑко **пÑоÑеÑÑов Uvicorn** и некоÑоÑÑе наÑÑÑойки по ÑмолÑаниÑ, авÑомаÑиÑеÑки ÑÑÑанавливаÑÑие колиÑеÑÑво запÑÑеннÑÑ
пÑоÑеÑÑов в завиÑимоÑÑи Ð¾Ñ ÐºÐ¾Ð»Ð¸ÑеÑÑва ÑÐ´ÐµÑ Ð²Ð°Ñего пÑоÑеÑÑоÑа. Я ÑаÑÑÐºÐ°Ð¶Ñ Ð²Ð°Ð¼ об ÑÑом подÑобнее ÑÑÑ: [ÐÑиÑиалÑнÑй Docker-обÑаз Ñо вÑÑÑоеннÑми Gunicorn и Uvicorn](#docker-gunicorn-uvicorn).
+Ð ÑакиÑ
ÑлÑÑаÑÑ
Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе иÑполÑзоваÑÑ Ð¾Ð¿ÑÐ¸Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð½Ð¾Ð¹ ÑÑÑоки `--workers`, ÑÑÐ¾Ð±Ñ ÑказаÑÑ Ð½Ñжное колиÑеÑÑво воÑкеÑов:
-ÐекоÑоÑÑе пÑимеÑÑ Ð¿Ð¾Ð´Ð¾Ð±Ð½ÑÑ
ÑлÑÑаев:
+```{ .dockerfile .annotate }
+FROM python:3.9
-#### ÐÑоÑÑое пÑиложение
+WORKDIR /code
-ÐÑ Ð¼Ð¾Ð¶ÐµÑе иÑполÑзоваÑÑ Ð¼ÐµÐ½ÐµÐ´Ð¶ÐµÑ Ð¿ÑоÑеÑÑов внÑÑÑи конÑейнеÑа, еÑли ваÑе пÑиложение **наÑÑолÑко пÑоÑÑое**, ÑÑо Ñ Ð²Ð°Ñ Ð½ÐµÑ Ð½ÐµÐ¾Ð±Ñ
одимоÑÑи (по кÑайней меÑе, пока неÑ) в ÑÑаÑелÑнÑÑ
наÑÑÑойкаÑ
колиÑеÑÑва пÑоÑеÑÑов и вам доÑÑаÑоÑно имеÑÑиÑ
ÑÑ Ð½Ð°ÑÑÑоек по ÑмолÑÐ°Ð½Ð¸Ñ (еÑли иÑполÑзÑеÑÑÑ Ð¾ÑиÑиалÑнÑй Docker-обÑаз) Ð´Ð»Ñ Ð·Ð°Ð¿ÑÑка пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ **ÑолÑко на одном ÑеÑвеÑе**, а не в клаÑÑеÑе.
+COPY ./requirements.txt /code/requirements.txt
-#### Docker Compose
+RUN pip install --no-cache-dir --upgrade -r /code/requirements.txt
-С помоÑÑÑ **Docker Compose** можно ÑазвоÑаÑиваÑÑ Ð½ÐµÑколÑко конÑейнеÑов на **одном ÑеÑвеÑе** (не клаÑÑеÑе), но пÑи ÑÑо Ñ Ð²Ð°Ñ Ð½Ðµ бÑÐ´ÐµÑ Ð¿ÑоÑÑого ÑпоÑоба ÑпÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ ÐºÐ¾Ð»Ð¸ÑеÑÑвом запÑÑеннÑÑ
конÑейнеÑов Ñ Ð¾Ð´Ð½Ð¾Ð²ÑеменнÑм ÑоÑ
Ñанением обÑей ÑеÑи и **баланÑиÑовки нагÑÑзки**.
+COPY ./app /code/app
-Ð ÑÑом ÑлÑÑае можно иÑполÑзоваÑÑ **Ð¼ÐµÐ½ÐµÐ´Ð¶ÐµÑ Ð¿ÑоÑеÑÑов**, ÑпÑавлÑÑÑий **неÑколÑкими пÑоÑеÑÑами**, внÑÑÑи **одного конÑейнеÑа**.
+# (1)!
+CMD ["fastapi", "run", "app/main.py", "--port", "80", "--workers", "4"]
+```
-#### Prometheus и пÑоÑие пÑиÑинÑ
+1. ÐдеÑÑ Ð¼Ñ Ð¸ÑполÑзÑем опÑÐ¸Ñ `--workers`, ÑÑÐ¾Ð±Ñ ÑÑÑановиÑÑ ÑиÑло воÑкеÑов ÑавнÑм 4.
-У Ð²Ð°Ñ Ð¼Ð¾Ð³ÑÑ Ð±ÑÑÑ Ð¸ **дÑÑгие пÑиÑинÑ**, когда иÑполÑзование **множеÑÑва пÑоÑеÑÑов** внÑÑÑи **одного конÑейнеÑа** бÑÐ´ÐµÑ Ð¿ÑоÑе, нежели запÑÑк **неÑколÑкиÑ
конÑейнеÑов** Ñ **единÑÑвеннÑм пÑоÑеÑÑом** в каждом из ниÑ
.
+ÐÑимеÑÑ, когда ÑÑо Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ ÑмеÑÑно:
-ÐапÑÐ¸Ð¼ÐµÑ (в завиÑимоÑÑи Ð¾Ñ ÐºÐ¾Ð½ÑигÑÑаÑии), Ñ Ð²Ð°Ñ Ð¼Ð¾Ð³ÑÑ Ð±ÑÑÑ Ð¸Ð½ÑÑÑÑменÑÑ Ð¿Ð¾Ð´Ð¾Ð±Ð½Ñе ÑкÑпоÑÑÑÑÑ Prometheus, коÑоÑÑе Ð´Ð¾Ð»Ð¶Ð½Ñ Ð¸Ð¼ÐµÑÑ Ð´Ð¾ÑÑÑп к **ÐºÐ°Ð¶Ð´Ð¾Ð¼Ñ Ð·Ð°Ð¿ÑоÑÑ** пÑиÑ
одÑÑÐµÐ¼Ñ Ð² конÑейнеÑ.
+#### ÐÑоÑÑое пÑиложение { #a-simple-app }
-ÐÑли Ñ Ð²Ð°Ñ Ð±ÑÐ´ÐµÑ **неÑколÑко конÑейнеÑов**, Ñо Prometheus, по ÑмолÑаниÑ, **пÑи ÑбоÑе меÑÑик** полÑÑÐ¸Ñ Ð¸Ñ
**ÑолÑко Ñ Ð¾Ð´Ð½Ð¾Ð³Ð¾ конÑейнеÑа**, коÑоÑÑй обÑабаÑÑÐ²Ð°ÐµÑ ÐºÐ¾Ð½ÐºÑеÑнÑй запÑоÑ, вмеÑÑо **ÑбоÑа меÑÑик** Ñо вÑеÑ
ÑабоÑаÑÑиÑ
конÑейнеÑов.
+Ðам Ð¼Ð¾Ð¶ÐµÑ Ð¿Ð¾Ð½Ð°Ð´Ð¾Ð±Ð¸ÑÑÑÑ Ð¼ÐµÐ½ÐµÐ´Ð¶ÐµÑ Ð¿ÑоÑеÑÑов в конÑейнеÑе, еÑли пÑиложение **доÑÑаÑоÑно пÑоÑÑое**, ÑÑÐ¾Ð±Ñ Ð·Ð°Ð¿ÑÑкаÑÑÑÑ Ð½Ð° **одном ÑеÑвеÑе**, а не в клаÑÑеÑе.
-Ð Ñаком ÑлÑÑае Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿ÑоÑе имеÑÑ **один конÑейнеÑ** Ñо **множеÑÑвом пÑоÑеÑÑов**, Ñ Ð½ÑжнÑм инÑÑÑÑменÑом (Ñаким как ÑкÑпоÑÑÑÑ Prometheus) в ÑÑом же конÑейнеÑе и ÑобиÑаÑÑем меÑÑики Ñо вÑеÑ
внÑÑÑенниÑ
пÑоÑеÑÑов ÑÑого конÑейнеÑа.
+#### Docker Compose { #docker-compose }
+
+ÐÑ Ð¼Ð¾Ð¶ÐµÑе ÑазвÑÑÑÑваÑÑ Ð½Ð° **одном ÑеÑвеÑе** (не клаÑÑеÑе) Ñ **Docker Compose**, и Ñ Ð²Ð°Ñ Ð½Ðµ бÑÐ´ÐµÑ Ð¿ÑоÑÑого ÑпоÑоба ÑпÑавлÑÑÑ ÑепликаÑией конÑейнеÑов (в Docker Compose), ÑоÑ
ÑанÑÑ Ð¾Ð±ÑÑÑ ÑеÑÑ Ð¸ **баланÑиÑÐ¾Ð²ÐºÑ Ð½Ð°Ð³ÑÑзки**.
+
+Тогда Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе заÑ
оÑеÑÑ **один конÑейнеÑ** Ñ **менеджеÑом пÑоÑеÑÑов**, коÑоÑÑй запÑÑÐºÐ°ÐµÑ **неÑколÑко воÑкеÑов** внÑÑÑи.
---
-Самое главное - **ни одно** из пеÑеÑиÑленнÑÑ
пÑавил не ÑвлÑеÑÑÑ **вÑÑеÑеннÑм на камне** и Ð²Ñ Ð½Ðµ обÑÐ·Ð°Ð½Ñ Ñлепо иÑ
повÑоÑÑÑÑ. Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе иÑполÑзоваÑÑ ÑÑи идеи пÑи **ÑаÑÑмоÑÑении ваÑего конкÑеÑного ÑлÑÑаÑ** и ÑамоÑÑоÑÑелÑно ÑеÑаÑÑ, ÐºÐ°ÐºÐ°Ñ Ð¸Ð· конÑепÑии подÑ
Ð¾Ð´Ð¸Ñ Ð»ÑÑÑе:
+Ðлавное â **ни одно** из ÑÑиÑ
пÑавил не ÑвлÑеÑÑÑ **ÑÑÑого обÑзаÑелÑнÑм**. ÐÑполÑзÑйÑе ÑÑи идеи, ÑÑÐ¾Ð±Ñ **оÑениÑÑ Ñвой конкÑеÑнÑй ÑлÑÑай** и ÑеÑиÑÑ, какой подÑ
од лÑÑÑе Ð´Ð»Ñ Ð²Ð°Ñей ÑиÑÑемÑ, ÑÑиÑÑваÑ:
-* ÐÑполÑзование более безопаÑного пÑоÑокола HTTPS
-* ÐаÑÑÑойки запÑÑка пÑиложениÑ
-* ÐеÑезагÑÑзка пÑиложениÑ
-* ÐапÑÑк неÑколÑкиÑ
ÑкземплÑÑов пÑиложениÑ
-* УпÑавление памÑÑÑÑ
-* ÐÑполÑзование пеÑеÑиÑленнÑÑ
ÑÑнкÑий пеÑед запÑÑком пÑиложениÑ
+* ÐезопаÑноÑÑÑ â HTTPS
+* ÐапÑÑк пÑи ÑÑаÑÑе
+* ÐеÑезапÑÑки
+* РепликаÑÐ¸Ñ (колиÑеÑÑво запÑÑеннÑÑ
пÑоÑеÑÑов)
+* ÐамÑÑÑ
+* ÐÑедваÑиÑелÑнÑе Ñаги пеÑед запÑÑком
-## УпÑавление памÑÑÑÑ
+## ÐамÑÑÑ { #memory }
-ÐÑи **запÑÑке одного пÑоÑеÑÑа на конÑейнеÑ** Ð²Ñ Ð¿Ð¾Ð»ÑÑаеÑе оÑноÑиÑелÑно понÑÑнÑй, ÑÑабилÑнÑй и огÑаниÑеннÑй обÑÑм памÑÑи, поÑÑеблÑемÑй одним конÑейнеÑом.
+ÐÑли Ð²Ñ Ð·Ð°Ð¿ÑÑкаеÑе **один пÑоÑеÑÑ Ð½Ð° конÑейнеÑ**, Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ конÑейнеÑа бÑÐ´ÐµÑ Ð±Ð¾Ð»ÐµÐµ-менее ÑÑÑко опÑеделÑннÑй, ÑÑабилÑнÑй и огÑаниÑеннÑй обÑÑм поÑÑеблÑемой памÑÑи (конÑейнеÑов Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð½ÐµÑколÑко пÑи ÑепликаÑии).
-ÐÑ Ð¼Ð¾Ð¶ÐµÑе ÑÑÑановиÑÑ Ð°Ð½Ð°Ð»Ð¾Ð³Ð¸ÑнÑе огÑаниÑÐµÐ½Ð¸Ñ Ð¿Ð¾ памÑÑи пÑи конÑигÑÑиÑовании Ñвоей ÑиÑÑÐµÐ¼Ñ ÑпÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ ÐºÐ¾Ð½ÑейнеÑами (напÑимеÑ, **Kubernetes**). Таким обÑазом ÑиÑÑема ÑÐ¼Ð¾Ð¶ÐµÑ **изменÑÑÑ ÐºÐ¾Ð»Ð¸ÑеÑÑво конÑейнеÑов** на **доÑÑÑпнÑÑ
ей маÑинаÑ
** пÑÐ¸Ð²Ð¾Ð´Ñ Ð² ÑооÑвеÑÑÑвие колиÑеÑÑво памÑÑи нÑжной конÑейнеÑам Ñ ÐºÐ¾Ð»Ð¸ÑеÑÑвом памÑÑи доÑÑÑпной в клаÑÑеÑе (набоÑе доÑÑÑпнÑÑ
маÑин).
+ÐаÑем Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе задаÑÑ Ñакие же лимиÑÑ Ð¸ ÑÑÐµÐ±Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ð¾ памÑÑи в конÑигÑÑаÑии ваÑей ÑиÑÑÐµÐ¼Ñ ÑпÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ ÐºÐ¾Ð½ÑейнеÑами (напÑимеÑ, в **Kubernetes**). Так ÑиÑÑема ÑÐ¼Ð¾Ð¶ÐµÑ **ÑеплиÑиÑоваÑÑ ÐºÐ¾Ð½ÑейнеÑÑ** на **доÑÑÑпнÑÑ
маÑинаÑ
**, ÑÑиÑÑÐ²Ð°Ñ Ð¾Ð±ÑÑм необÑ
одимой памÑÑи и доÑÑÑпной памÑÑи в маÑинаÑ
клаÑÑеÑа.
-ÐÑли Ñ Ð²Ð°Ñ **пÑоÑÑенÑкое** пÑиложение, веÑоÑÑно Ñ Ð²Ð°Ñ Ð½Ðµ бÑÐ´ÐµÑ **необÑ
одимоÑÑи** ÑÑÑанавливаÑÑ Ð¶ÑÑÑкие огÑаниÑÐµÐ½Ð¸Ñ Ð½Ð° вÑделÑемÑÑ ÐµÐ¼Ñ Ð¿Ð°Ð¼ÑÑÑ. Ðо еÑли пÑиложение **иÑполÑзÑÐµÑ Ð¼Ð½Ð¾Ð³Ð¾ памÑÑи** (напÑимеÑ, оно иÑполÑзÑÐµÑ Ð¼Ð¾Ð´ÐµÐ»Ð¸ **маÑинного обÑÑениÑ**), вам ÑледÑÐµÑ Ð¿ÑовеÑиÑÑ, как много памÑÑи ÐµÐ¼Ñ ÑÑебÑеÑÑÑ Ð¸ оÑÑегÑлиÑоваÑÑ **колиÑеÑÑво конÑейнеÑов** запÑÑеннÑÑ
на **каждой маÑине** (Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð´Ð°Ð¶Ðµ добавиÑÑ Ð¼Ð°Ñин в клаÑÑеÑ).
+ÐÑли пÑиложение **пÑоÑÑое**, ÑÑо, веÑоÑÑно, **не бÑÐ´ÐµÑ Ð¿Ñоблемой**, и жÑÑÑкие лимиÑÑ Ð¿Ð°Ð¼ÑÑи можно не ÑказÑваÑÑ. Ðо еÑли Ð²Ñ **иÑполÑзÑеÑе много памÑÑи** (напÑимеÑ, Ñ Ð¼Ð¾Ð´ÐµÐ»Ñми **ÐаÑинного обÑÑениÑ**), пÑовеÑÑÑе, ÑколÑко памÑÑи поÑÑеблÑеÑÑÑ, и оÑÑегÑлиÑÑйÑе **ÑиÑло конÑейнеÑов** на **каждой маÑине** (и, возможно, добавÑÑе маÑÐ¸Ð½Ñ Ð² клаÑÑеÑ).
-ÐÑли Ð²Ñ Ð·Ð°Ð¿ÑÑкаеÑе **неÑколÑко пÑоÑеÑÑов в конÑейнеÑе**, Ñо Ð´Ð¾Ð»Ð¶Ð½Ñ Ð±ÑÑÑ ÑвеÑенÑ, ÑÑо ÑÑи пÑоÑеÑÑÑ Ð½Ðµ **займÑÑ Ð¿Ð°Ð¼ÑÑи болÑÑе**, Ñем доÑÑÑпно Ð´Ð»Ñ ÐºÐ¾Ð½ÑейнеÑа.
+ÐÑли Ð²Ñ Ð·Ð°Ð¿ÑÑкаеÑе **неÑколÑко пÑоÑеÑÑов в конÑейнеÑе**, нÑжно ÑбедиÑÑÑÑ, ÑÑо иÑ
ÑÑммаÑное поÑÑебление **не пÑевÑÑÐ¸Ñ Ð´Ð¾ÑÑÑпнÑÑ Ð¿Ð°Ð¼ÑÑÑ**.
-## ÐодгоÑовиÑелÑнÑе Ñаги пÑи запÑÑке конÑейнеÑов
+## ÐÑедваÑиÑелÑнÑе Ñаги пеÑед запÑÑком и конÑейнеÑÑ { #previous-steps-before-starting-and-containers }
-ÐÑÑÑ Ð´Ð²Ð° оÑновнÑÑ
подÑ
ода, коÑоÑÑе Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе иÑполÑзоваÑÑ Ð¿Ñи запÑÑке конÑейнеÑов (Docker, Kubernetes и Ñ.п.).
+ÐÑли Ð²Ñ Ð¸ÑполÑзÑеÑе конÑейнеÑÑ (напÑимеÑ, Docker, Kubernetes), еÑÑÑ Ð´Ð²Ð° оÑновнÑÑ
подÑ
ода.
-### ÐножеÑÑво конÑейнеÑов
+### ÐеÑколÑко конÑейнеÑов { #multiple-containers }
-Ðогда Ð²Ñ Ð·Ð°Ð¿ÑÑкаеÑе **множеÑÑво конÑейнеÑов**, в каждом из коÑоÑÑÑ
ÑабоÑÐ°ÐµÑ **ÑолÑко один пÑоÑеÑÑ** (напÑимеÑ, в клаÑÑеÑе **Kubernetes**), Ð¼Ð¾Ð¶ÐµÑ Ð²Ð¾Ð·Ð½Ð¸ÐºÐ½ÑÑÑ Ð½ÐµÐ¾Ð±Ñ
одимоÑÑÑ Ð¸Ð¼ÐµÑÑ **оÑделÑнÑй конÑейнеÑ**, коÑоÑÑй оÑÑÑеÑÑÐ²Ð¸Ñ **пÑедваÑиÑелÑнÑе Ñаги пеÑед запÑÑком** оÑÑалÑнÑÑ
конÑейнеÑов (напÑимеÑ, пÑименÑÐµÑ Ð¼Ð¸Ð³ÑаÑии к базе даннÑÑ
).
+ÐÑли Ñ Ð²Ð°Ñ **неÑколÑко конÑейнеÑов**, и, веÑоÑÑно, каждÑй запÑÑÐºÐ°ÐµÑ **один пÑоÑеÑÑ** (напÑимеÑ, в клаÑÑеÑе **Kubernetes**), Ñо вÑ, ÑкоÑее вÑего, заÑ
оÑиÑе имеÑÑ **оÑделÑнÑй конÑейнеÑ**, вÑполнÑÑÑий **пÑедваÑиÑелÑнÑе Ñаги** в одном конÑейнеÑе и одном пÑоÑеÑÑе **до** запÑÑка ÑеплиÑиÑованнÑÑ
конÑейнеÑов-воÑкеÑов.
/// info | ÐнÑоÑмаÑиÑ
-ÐÑи иÑполÑзовании Kubernetes, ÑÑо Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ
ÐниÑиализиÑÑÑÑий конÑейнеÑ.
+ÐÑли Ð²Ñ Ð¸ÑполÑзÑеÑе Kubernetes, ÑÑо, веÑоÑÑно, бÑдеÑ
Init Container.
///
-ÐÑи оÑÑÑÑÑÑвии Ñакой необÑ
одимоÑÑи (допÑÑÑим, не нÑжно пÑименÑÑÑ Ð¼Ð¸Ð³ÑаÑии к базе даннÑÑ
, а ÑолÑко пÑовеÑиÑÑ, ÑÑо она гоÑова пÑинимаÑÑ ÑоединениÑ), Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе пÑоводиÑÑ ÑакÑÑ Ð¿ÑовеÑÐºÑ Ð² каждом конÑейнеÑе пеÑед запÑÑком его оÑновного пÑоÑеÑÑа и запÑÑкаÑÑ Ð²Ñе конÑейнеÑÑ **одновÑеменно**.
-
-### ТолÑко один конÑейнеÑ
-
-ÐÑли Ñ Ð²Ð°Ñ Ð½ÐµÑложное пÑиложение Ð´Ð»Ñ ÑабоÑÑ ÐºÐ¾ÑоÑого доÑÑаÑоÑно **одного конÑейнеÑа**, но в коÑоÑом ÑабоÑÐ°ÐµÑ **неÑколÑко пÑоÑеÑÑов** (или один пÑоÑеÑÑ), Ñо пÑоÑ
ождение пÑедваÑиÑелÑнÑÑ
Ñагов можно оÑÑÑеÑÑвиÑÑ Ð² ÑÑом же конÑейнеÑе до запÑÑка оÑновного пÑоÑеÑÑа. ÐÑиÑиалÑнÑй Docker-обÑаз поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ Ñакие дейÑÑвиÑ.
+ÐÑли в ваÑем ÑлÑÑае Ð½ÐµÑ Ð¿ÑÐ¾Ð±Ð»ÐµÐ¼Ñ Ñ Ñем, ÑÑÐ¾Ð±Ñ Ð²ÑполнÑÑÑ ÑÑи пÑедваÑиÑелÑнÑе Ñаги **многокÑаÑно и паÑаллелÑно** (напÑимеÑ, Ð²Ñ Ð½Ðµ запÑÑкаеÑе мигÑаÑии ÐÐ, а ÑолÑко пÑовеÑÑеÑе гоÑовноÑÑÑ ÐÐ), Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе пÑоÑÑо вÑполниÑÑ Ð¸Ñ
в каждом конÑейнеÑе пÑÑмо пеÑед ÑÑаÑÑом оÑновного пÑоÑеÑÑа.
-## ÐÑиÑиалÑнÑй Docker-обÑаз Ñ Gunicorn и Uvicorn
+### Ðдин конÑÐµÐ¹Ð½ÐµÑ { #single-container }
-Я подгоÑовил Ð´Ð»Ñ Ð²Ð°Ñ Docker-обÑаз, в коÑоÑÑй вклÑÑÑн Gunicorn ÑпÑавлÑÑÑий пÑоÑеÑÑами (воÑкеÑами) Uvicorn, в ÑооÑвеÑÑÑвии Ñ ÐºÐ¾Ð½ÑепÑиÑми ÑаÑÑмоÑÑеннÑми в пÑедÑдÑÑей главе: [РабоÑие пÑоÑеÑÑÑ ÑеÑвеÑа (воÑкеÑÑ) - Gunicorn ÑовмеÑÑно Ñ Uvicorn](server-workers.md){.internal-link target=_blank}.
+ÐÑли Ñ Ð²Ð°Ñ Ð¿ÑоÑÑÐ°Ñ ÑÑ
ема Ñ **одним конÑейнеÑом**, коÑоÑÑй заÑем запÑÑÐºÐ°ÐµÑ Ð½ÐµÑколÑко **воÑкеÑов** (или один пÑоÑеÑÑ), можно вÑполниÑÑ Ð¿Ð¾Ð´Ð³Ð¾ÑовиÑелÑнÑе Ñаги в ÑÑом же конÑейнеÑе непоÑÑедÑÑвенно пеÑед запÑÑком пÑоÑеÑÑа Ñ Ð¿Ñиложением.
-ÐÑÐ¾Ñ Ð¾Ð±Ñаз Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿Ð¾Ð»ÐµÐ·ÐµÐ½ Ð´Ð»Ñ ÑиÑÑаÑий опиÑаннÑÑ
ÑÑÑ: [ÐножеÑÑво пÑоÑеÑÑов внÑÑÑи конÑейнеÑа Ð´Ð»Ñ Ð¾ÑобÑÑ
ÑлÑÑаев](#_11).
-
-*
tiangolo/uvicorn-gunicorn-fastapi.
-
-/// warning | ÐÑедÑпÑеждение
+### ÐазовÑй Docker-обÑаз { #base-docker-image }
-СкоÑее вÑего Ñ Ð²Ð°Ñ **Ð½ÐµÑ Ð½ÐµÐ¾Ð±Ñ
одимоÑÑи** в иÑполÑзовании ÑÑого обÑаза или подобного ÐµÐ¼Ñ Ð¸ лÑÑÑе ÑоздаÑÑ Ñвой обÑаз Ñ Ð½ÑÐ»Ñ ÐºÐ°Ðº опиÑано ÑÑÑ: [СоздаÑÑ Docker-обÑаз Ð´Ð»Ñ FastAPI](#docker-fastapi).
+Ранее ÑÑÑеÑÑвовал оÑиÑиалÑнÑй Docker-обÑаз FastAPI:
tiangolo/uvicorn-gunicorn-fastapi. СейÑÐ°Ñ Ð¾Ð½ помеÑен как ÑÑÑаÑевÑий. âï¸
-///
+СкоÑее вÑего, вам **не ÑÑоиÑ** иÑполÑзоваÑÑ ÑÑÐ¾Ñ Ð±Ð°Ð·Ð¾Ð²Ñй обÑаз (или какой-либо аналогиÑнÑй).
-Ð ÑÑом обÑазе еÑÑÑ **авÑомаÑиÑеÑкий** меÑ
анизм подÑÑÑойки Ð´Ð»Ñ Ð·Ð°Ð¿ÑÑка **необÑ
одимого колиÑеÑÑва пÑоÑеÑÑов** в ÑооÑвеÑÑÑвии Ñ Ð´Ð¾ÑÑÑпнÑм колиÑеÑÑвом ÑÐ´ÐµÑ Ð¿ÑоÑеÑÑоÑа.
+ÐÑли Ð²Ñ Ð¸ÑполÑзÑеÑе **Kubernetes** (или дÑÑгое) и Ñже наÑÑÑаиваеÑе **ÑепликаÑиÑ** на ÑÑовне клаÑÑеÑа ÑеÑез неÑколÑко **конÑейнеÑов**, в ÑÑиÑ
ÑлÑÑаÑÑ
лÑÑÑе **ÑобÑаÑÑ Ð¾Ð±Ñаз Ñ Ð½ÑлÑ**, как опиÑано вÑÑе: [СоздаÑÑ Docker-обÑаз Ð´Ð»Ñ FastAPI](#build-a-docker-image-for-fastapi).
-РнÑм ÑÑÑÐ°Ð½Ð¾Ð²Ð»ÐµÐ½Ñ **ÑазÑмнÑе знаÑÐµÐ½Ð¸Ñ Ð¿Ð¾ ÑмолÑаниÑ**, но можно изменÑÑÑ Ð¸ обновлÑÑÑ ÐºÐ¾Ð½ÑигÑÑаÑÐ¸Ñ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ **пеÑеменнÑÑ
окÑÑжениÑ** или конÑигÑÑаÑионнÑÑ
Ñайлов.
+РеÑли вам нÑÐ¶Ð½Ñ Ð½ÐµÑколÑко воÑкеÑов, пÑоÑÑо иÑполÑзÑйÑе опÑÐ¸Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð½Ð¾Ð¹ ÑÑÑоки `--workers`.
-Ðн Ñакже поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ Ð¿ÑоÑ
ождение
**ÐодгоÑовиÑелÑнÑÑ
Ñагов пÑи запÑÑке конÑейнеÑов** пÑи помоÑи ÑкÑипÑа.
+/// note | ТеÑ
ниÑеÑкие подÑобноÑÑи
-/// tip | ÐодÑказка
+ÐÑÐ¾Ñ Docker-обÑаз бÑл Ñоздан в Ñо вÑемÑ, когда Uvicorn не Ñмел ÑпÑавлÑÑÑ Ð¸ пеÑезапÑÑкаÑÑ Â«ÑпавÑиÑ
» воÑкеÑов, и пÑиÑ
одилоÑÑ Ð¸ÑполÑзоваÑÑ Gunicorn вмеÑÑе Ñ Uvicorn, ÑÑо добавлÑло замеÑнÑÑ ÑложноÑÑÑ, лиÑÑ Ð±Ñ Gunicorn ÑпÑавлÑл и пеÑезапÑÑкал воÑкеÑов Uvicorn.
-ÐÐ»Ñ Ð¿ÑоÑмоÑÑа вÑеÑ
возможнÑÑ
наÑÑÑоек пеÑейдиÑе на ÑÑÑаниÑÑ ÑÑого Docker-обÑаза:
tiangolo/uvicorn-gunicorn-fastapi.
+Ðо ÑепеÑÑ, когда Uvicorn (и команда `fastapi`) поддеÑживаÑÑ `--workers`, Ð½ÐµÑ Ð¿ÑиÑин иÑполÑзоваÑÑ Ð±Ð°Ð·Ð¾Ð²Ñй Docker-обÑаз вмеÑÑо ÑбоÑки Ñвоего (кода полÑÑаеÑÑÑ Ð¿ÑимеÑно ÑÑолÑко же ð
).
///
-### ÐолиÑеÑÑво пÑоÑеÑÑов в оÑиÑиалÑном Docker-обÑазе
-
-**ÐолиÑеÑÑво пÑоÑеÑÑов** в ÑÑом обÑазе **вÑÑиÑлÑеÑÑÑ Ð°Ð²ÑомаÑиÑеÑки** и завиÑÐ¸Ñ Ð¾Ñ Ð´Ð¾ÑÑÑпного колиÑеÑÑва **ÑдеÑ** ÑенÑÑалÑного пÑоÑеÑÑоÑа.
-
-ÐÑо ознаÑаеÑ, ÑÑо он бÑÐ´ÐµÑ Ð¿ÑÑаÑÑÑÑ **вÑжаÑÑ** из пÑоÑеÑÑоÑа как можно болÑÑе **пÑоизводиÑелÑноÑÑи**.
-
-Ðо Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе изменÑÑÑ Ð¸ обновлÑÑÑ ÐºÐ¾Ð½ÑигÑÑаÑÐ¸Ñ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ **пеÑеменнÑÑ
окÑÑжениÑ** и Ñ.п.
-
-ÐоÑколÑÐºÑ ÐºÐ¾Ð»Ð¸ÑеÑÑво пÑоÑеÑÑов завиÑÐ¸Ñ Ð¾Ñ Ð¿ÑоÑеÑÑоÑа, на коÑоÑом ÑабоÑÐ°ÐµÑ ÐºÐ¾Ð½ÑейнеÑ, **обÑÑм поÑÑеблÑемой памÑÑи** Ñакже бÑÐ´ÐµÑ Ð·Ð°Ð²Ð¸ÑеÑÑ Ð¾Ñ ÑÑого.
-
-РзнаÑиÑ, еÑли ваÑÐµÐ¼Ñ Ð¿ÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ ÑÑебÑеÑÑÑ Ð¼Ð½Ð¾Ð³Ð¾ опеÑаÑивной памÑÑи (напÑимеÑ, оно иÑполÑзÑÐµÑ Ð¼Ð¾Ð´ÐµÐ»Ð¸ маÑинного обÑÑениÑ) и ÐÐ°Ñ ÑеÑÐ²ÐµÑ Ð¸Ð¼ÐµÐµÑ ÑенÑÑалÑнÑй пÑоÑеÑÑÐ¾Ñ Ñ Ð±Ð¾Ð»ÑÑим колиÑеÑÑвом ÑдеÑ, но **не ÑлиÑком болÑÑим обÑÑмом опеÑаÑивной памÑÑи**, Ñо Ð¼Ð¾Ð¶ÐµÑ Ð´Ð¾Ð¹Ñи до Ñого, ÑÑо конÑÐµÐ¹Ð½ÐµÑ Ð¿Ð¾Ð¿ÑÑаеÑÑÑ Ð·Ð°Ð½ÑÑÑ Ð¿Ð°Ð¼ÑÑи болÑÑе, Ñем доÑÑÑпно, из-за Ñего бÑÐ´ÐµÑ Ð¿Ð°Ð´ÐµÐ½Ð¸Ðµ пÑоизводиÑелÑноÑÑи (или ÑеÑÐ²ÐµÑ Ð²Ð¾Ð²Ñе ÑпадÑÑ). ð¨
-
-
-### ÐапиÑание `Dockerfile`
-
-ÐÑак, ÑепеÑÑ Ð¼Ñ Ð¼Ð¾Ð¶ÐµÐ¼ напиÑаÑÑ `Dockerfile` оÑнованнÑй на ÑÑом оÑиÑиалÑном Docker-обÑазе:
-
-```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
-```
-
-### ÐолÑÑие пÑиложениÑ
-
-ÐÑли Ð²Ñ ÑÑпели ознакомиÑÑÑÑ Ñ Ñазделом [ÐÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ ÑодеÑжаÑие много Ñайлов](../tutorial/bigger-applications.md){.internal-link target=_blank}, ÑоÑÑоÑÑие из множеÑÑва Ñайлов, ÐÐ°Ñ Dockerfile Ð¼Ð¾Ð¶ÐµÑ Ð²ÑглÑдеÑÑ Ñак:
-
-```Dockerfile hl_lines="7"
-FROM tiangolo/uvicorn-gunicorn-fastapi:python3.9
-
-COPY ./requirements.txt /app/requirements.txt
+## РазвÑÑÑÑвание обÑаза конÑейнеÑа { #deploy-the-container-image }
-RUN pip install --no-cache-dir --upgrade -r /app/requirements.txt
-
-COPY ./app /app/app
-```
-
-### Ðак им полÑзоваÑÑÑÑ
-
-ÐÑли Ð²Ñ Ð¸ÑполÑзÑеÑе **Kubernetes** (или ÑÑо-Ñо вÑоде Ñого), ÑкоÑее вÑего вам **не нÑжно** иÑполÑзоваÑÑ Ð¾ÑиÑиалÑнÑй Docker-обÑаз (или дÑÑгой поÑ
ожий) в каÑеÑÑве оÑновÑ, Ñак как ÑпÑавление **колиÑеÑÑвом запÑÑеннÑÑ
конÑейнеÑов** должно бÑÑÑ Ð½Ð°ÑÑÑоено на ÑÑовне клаÑÑеÑа. Ð Ñаком ÑлÑÑае лÑÑÑе **ÑоздаÑÑ Ð¾Ð±Ñаз Ñ Ð½ÑлÑ**, как опиÑано в Ñазделе СоздаÑÑ [Docker-обÑаз Ð´Ð»Ñ FastAPI](#docker-fastapi).
-
-ÐÑиÑиалÑнÑй обÑаз Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿Ð¾Ð»ÐµÐ·ÐµÐ½ в оÑделÑнÑÑ
ÑлÑÑаÑÑ
, опиÑаннÑÑ
вÑÑе в Ñазделе [ÐножеÑÑво пÑоÑеÑÑов внÑÑÑи конÑейнеÑа Ð´Ð»Ñ Ð¾ÑобÑÑ
ÑлÑÑаев](#_11). ÐапÑимеÑ, еÑли ваÑе пÑиложение **доÑÑаÑоÑно пÑоÑÑое**, не ÑÑебÑÐµÑ Ð·Ð°Ð¿ÑÑка в клаÑÑеÑе и ÑпоÑобно ÑмеÑÑиÑÑÑÑ Ð² один конÑейнеÑ, Ñо его наÑÑÑойки по ÑмолÑÐ°Ð½Ð¸Ñ Ð±ÑдÑÑ ÑабоÑаÑÑ Ð´Ð¾Ð²Ð¾Ð»Ñно Ñ
оÑоÑо. Ðли же Ð²Ñ ÑазвеÑÑÑваеÑе его Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ **Docker Compose**, ÑабоÑаеÑе на одном ÑеÑвеÑе и Ñ. д
-
-## РазвÑÑÑÑвание обÑаза конÑейнеÑа
-
-ÐоÑле ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¾Ð±Ñаза конÑейнеÑа ÑÑÑеÑÑвÑÐµÑ Ð½ÐµÑколÑко ÑпоÑобов его ÑазвÑÑÑÑваниÑ.
+ÐоÑле Ñого как Ñ Ð²Ð°Ñ ÐµÑÑÑ Ð¾Ð±Ñаз конÑейнеÑа (Docker), его можно ÑазвÑÑÑÑваÑÑ Ð½ÐµÑколÑкими ÑпоÑобами.
ÐапÑимеÑ:
-* С иÑполÑзованием **Docker Compose** пÑи ÑазвÑÑÑÑвании на одном ÑеÑвеÑе
-* С иÑполÑзованием **Kubernetes** в клаÑÑеÑе
-* С иÑполÑзованием Ñежима Docker Swarm в клаÑÑеÑе
-* С иÑполÑзованием дÑÑгиÑ
инÑÑÑÑменÑов, ÑакиÑ
как Nomad
-* С иÑполÑзованием облаÑного ÑеÑвиÑа, коÑоÑÑй бÑÐ´ÐµÑ ÑпÑавлÑÑÑ ÑазвоÑаÑиванием ваÑего конÑейнеÑа
-
-## Docker-обÑаз и Poetry
-
-ÐÑли Ð²Ñ Ð¿Ð¾Ð»ÑзÑеÑеÑÑ
Poetry Ð´Ð»Ñ ÑпÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð·Ð°Ð²Ð¸ÑимоÑÑÑми ваÑего пÑоекÑа, Ñо можеÑе иÑполÑзоваÑÑ Ð¼Ð½Ð¾Ð³Ð¾ÑÑапнÑÑ ÑбоÑÐºÑ Ð¾Ð±Ñаза:
-
-```{ .dockerfile .annotate }
-# (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` в каÑеÑÑве ÑабоÑей диÑекÑоÑии.
+* С **Docker Compose** на одном ÑеÑвеÑе
+* РклаÑÑеÑе **Kubernetes**
+* РклаÑÑеÑе Docker Swarm Mode
+* С дÑÑгим инÑÑÑÑменÑом, напÑÐ¸Ð¼ÐµÑ Nomad
+* С облаÑнÑм ÑеÑвиÑом, коÑоÑÑй пÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ Ð²Ð°Ñ Ð¾Ð±Ñаз конÑейнеÑа и ÑазвоÑаÑÐ¸Ð²Ð°ÐµÑ ÐµÐ³Ð¾
- Рней бÑÐ´ÐµÑ Ñоздан Ñайл `requirements.txt`
-
-3. Ðа ÑÑом Ñаге ÑÑÑановиÑе Poetry.
-
-4. СкопиÑÑйÑе ÑÐ°Ð¹Ð»Ñ `pyproject.toml` и `poetry.lock` в диÑекÑоÑÐ¸Ñ `/tmp`.
-
- ÐоÑколÑÐºÑ Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ðµ Ñайла напиÑано как `./poetry.lock*` (Ñ `*` в конÑе), Ñо ниÑего не ÑломаеÑÑÑ, еÑли Ñакой Ñайл не бÑÐ´ÐµÑ Ð½Ð°Ð¹Ð´ÐµÐ½.
-
-5. СоздайÑе Ñайл `requirements.txt`.
-
-6. ÐÑо вÑоÑой (и поÑледний) ÑÑап ÑбоÑки, коÑоÑÑй и ÑоздаÑÑ Ð¾ÐºÐ¾Ð½ÑаÑелÑнÑй обÑаз конÑейнеÑа.
-
-7. УÑÑановиÑе диÑекÑоÑÐ¸Ñ `/code` в каÑеÑÑве ÑабоÑей.
-
-8. СкопиÑÑйÑе Ñайл `requirements.txt` в диÑекÑоÑÐ¸Ñ `/code`.
-
- ÐÑÐ¾Ñ Ñайл наÑ
одиÑÑÑ Ð² обÑазе, Ñозданном на пÑедÑдÑÑем ÑÑапе, коÑоÑÐ¾Ð¼Ñ Ð¼Ñ Ð´Ð°Ð»Ð¸ Ð¸Ð¼Ñ requirements-stage, поÑÐ¾Ð¼Ñ Ð¿Ñи копиÑовании нÑжно напиÑаÑÑ `--from-requirements-stage`.
-
-9. УÑÑановиÑе завиÑимоÑÑи, ÑказаннÑе в Ñайле `requirements.txt`.
-
-10. СкопиÑÑйÑе Ð¿Ð°Ð¿ÐºÑ `app` в Ð¿Ð°Ð¿ÐºÑ `/code`.
-
-11. ÐапÑÑÑиÑе `uvicorn`, Ñказав ÐµÐ¼Ñ Ð¸ÑполÑзоваÑÑ Ð¾Ð±ÑÐµÐºÑ `app`, ÑаÑположеннÑй в `app.main`.
-
-/// tip | ÐодÑказка
-
-ÐÑли ÑкнÑÑе на кÑÑжок Ñ Ð¿Ð»ÑÑом, Ñо ÑвидиÑе обÑÑÑнениÑ, ÑÑо пÑоиÑÑ
Ð¾Ð´Ð¸Ñ Ð² ÑÑой ÑÑÑоке.
-
-///
-
-**ÐÑÐ°Ð¿Ñ ÑбоÑки Docker-обÑаза** ÑвлÑÑÑÑÑ ÑаÑÑÑÑ `Dockerfile` и ÑабоÑаÑÑ ÐºÐ°Ðº **вÑеменнÑе обÑÐ°Ð·Ñ ÐºÐ¾Ð½ÑейнеÑов**. Ðни нÑÐ¶Ð½Ñ ÑолÑко Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ñайлов, иÑполÑзÑемÑÑ
в далÑнейÑиÑ
ÑÑапаÑ
.
-
-ÐеÑвÑй ÑÑап бÑл нÑжен ÑолÑко Ð´Ð»Ñ **ÑÑÑановки Poetry** и **ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ñайла `requirements.txt`**, в коÑоÑÑм пÑопиÑÐ°Ð½Ñ Ð·Ð°Ð²Ð¸ÑимоÑÑи ваÑего пÑоекÑа, взÑÑÑе из Ñайла `pyproject.toml`.
-
-Ðа **ÑледÑÑÑем ÑÑапе** `pip` бÑÐ´ÐµÑ Ð¸ÑполÑзоваÑÑ Ñайл `requirements.txt`.
-
-РиÑоговом обÑазе бÑÐ´ÐµÑ ÑодеÑжаÑÑÑÑ **ÑолÑко поÑледний ÑÑап ÑбоÑки**, пÑедÑдÑÑие ÑÑÐ°Ð¿Ñ Ð±ÑдÑÑ Ð¾ÑбÑоÑенÑ.
-
-ÐÑи иÑполÑзовании Poetry, Ð¸Ð¼ÐµÐµÑ ÑмÑÑл иÑполÑзоваÑÑ **многоÑÑапнÑÑ ÑбоÑÐºÑ Docker-обÑаза**, поÑÐ¾Ð¼Ñ ÑÑо на Ñамом деле вам не нÑжен Poetry и его завиÑимоÑÑи в оконÑаÑелÑном обÑазе конÑейнеÑа, вам **нÑжен ÑолÑко** ÑгенеÑиÑованнÑй Ñайл `requirements.txt` Ð´Ð»Ñ ÑÑÑановки завиÑимоÑÑей ваÑего пÑоекÑа.
-
-Рна поÑледнем ÑÑапе, пÑидеÑживаÑÑÑ Ð¾Ð¿Ð¸ÑаннÑÑ
Ñанее пÑавил, ÑоздаÑÑÑÑ Ð¸ÑоговÑй обÑаз
-
-### ÐÑполÑзование пÑокÑи-ÑеÑвеÑа завеÑÑÐµÐ½Ð¸Ñ TLS и Poetry
-
-Ð Ñнова повÑоÑÑÑÑ, еÑли иÑполÑзÑеÑе пÑокÑи-ÑеÑÐ²ÐµÑ (баланÑиÑовÑик нагÑÑзки), Ñакой как Nginx или Traefik, добавÑÑе в ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ Ð·Ð°Ð¿ÑÑка опÑÐ¸Ñ `--proxy-headers`:
-
-```Dockerfile
-CMD ["uvicorn", "app.main:app", "--proxy-headers", "--host", "0.0.0.0", "--port", "80"]
-```
+## Docker-обÑаз Ñ `uv` { #docker-image-with-uv }
-## РезÑме
+ÐÑли Ð²Ñ Ð¸ÑполÑзÑеÑе
uv Ð´Ð»Ñ ÑÑÑановки и ÑпÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿ÑоекÑом, ÑледÑйÑе иÑ
ÑÑководÑÑÐ²Ñ Ð¿Ð¾ Docker Ð´Ð»Ñ uv.
-ÐÑи помоÑи ÑиÑÑем конÑейнеÑизаÑии (ÑакиÑ
, как **Docker** и **Kubernetes**), ÑÑановиÑÑÑ Ð´Ð¾Ð²Ð¾Ð»Ñно пÑоÑÑо обÑабаÑÑваÑÑ Ð²Ñе **конÑепÑии ÑазвеÑÑÑваниÑ**:
+## РезÑме { #recap }
-* ÐÑполÑзование более безопаÑного пÑоÑокола HTTPS
-* ÐаÑÑÑойки запÑÑка пÑиложениÑ
-* ÐеÑезагÑÑзка пÑиложениÑ
-* ÐапÑÑк неÑколÑкиÑ
ÑкземплÑÑов пÑиложениÑ
-* УпÑавление памÑÑÑÑ
-* ÐÑполÑзование пеÑеÑиÑленнÑÑ
ÑÑнкÑий пеÑед запÑÑком пÑиложениÑ
+ÐÑполÑзÑÑ ÑиÑÑÐµÐ¼Ñ ÐºÐ¾Ð½ÑейнеÑизаÑии (напÑимеÑ, **Docker** и **Kubernetes**), доволÑно пÑоÑÑо закÑÑÑÑ Ð²Ñе **конÑепÑии ÑазвеÑÑÑваниÑ**:
-РболÑÑинÑÑве ÑлÑÑаев Ðам, веÑоÑÑно, не нÑжно иÑполÑзоваÑÑ ÐºÐ°ÐºÐ¾Ð¹-либо базовÑй обÑаз, **лÑÑÑе ÑоздаÑÑ Ð¾Ð±Ñаз конÑейнеÑа Ñ Ð½ÑлÑ** на оÑнове оÑиÑиалÑного Docker-обÑаза Python.
+* HTTPS
+* ÐапÑÑк пÑи ÑÑаÑÑе
+* ÐеÑезапÑÑки
+* РепликаÑÐ¸Ñ (колиÑеÑÑво запÑÑеннÑÑ
пÑоÑеÑÑов)
+* ÐамÑÑÑ
+* ÐÑедваÑиÑелÑнÑе Ñаги пеÑед запÑÑком
-ÐозабоÑивÑиÑÑ Ð¾ **поÑÑдке напиÑаниÑ** инÑÑÑÑкÑий в `Dockerfile`, Ð²Ñ ÑможеÑе иÑполÑзоваÑÑ **кÑÑ Docker'а**, **минимизиÑовав вÑÐµÐ¼Ñ ÑбоÑки**, макÑималÑно повÑÑив ÑÐ²Ð¾Ñ Ð¿ÑоизводиÑелÑноÑÑÑ (и не заÑкÑÑаÑÑ). ð
+РболÑÑинÑÑве ÑлÑÑаев вÑ, веÑоÑÑно, не заÑ
оÑиÑе иÑполÑзоваÑÑ ÐºÐ°ÐºÐ¾Ð¹-либо базовÑй обÑаз, а вмеÑÑо ÑÑого **ÑобеÑÑÑе обÑаз конÑейнеÑа Ñ Ð½ÑлÑ** на оÑнове оÑиÑиалÑного Docker-обÑаза Python.
-РнекоÑоÑÑÑ
оÑобÑÑ
ÑлÑÑаÑÑ
Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе иÑполÑзоваÑÑ Ð¾ÑиÑиалÑнÑй обÑаз Docker Ð´Ð»Ñ FastAPI. ð¤
+ÐабоÑÑÑÑ Ð¾ **поÑÑдке** инÑÑÑÑкÑий в `Dockerfile`и иÑполÑзÑÑ **кÑÑ Docker**, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе **минимизиÑоваÑÑ Ð²ÑÐµÐ¼Ñ ÑбоÑки**, ÑÑÐ¾Ð±Ñ Ð¿Ð¾Ð²ÑÑиÑÑ Ð¿ÑодÑкÑивноÑÑÑ (и не ÑкÑÑаÑÑ). ð
diff --git a/docs/ru/docs/deployment/https.md b/docs/ru/docs/deployment/https.md
index d8877a9a12..05a03255e8 100644
--- a/docs/ru/docs/deployment/https.md
+++ b/docs/ru/docs/deployment/https.md
@@ -1,207 +1,231 @@
-# Ðб HTTPS
+# Ðб HTTPS { #about-https }
-ÐбÑÑно пÑедÑÑавлÑеÑÑÑ, ÑÑо HTTPS ÑÑо Ð½ÐµÐºÐ°Ñ Ð¾Ð¿ÑиÑ, коÑоÑÐ°Ñ Ð»Ð¸Ð±Ð¾ "вклÑÑена", либо неÑ.
+Ðегко пÑедположиÑÑ, ÑÑо HTTPS â ÑÑо ÑÑо-Ñо, ÑÑо пÑоÑÑо «вклÑÑено» или неÑ.
-Ðо вÑÑ Ð½ÐµÑколÑко Ñложнее.
+Ðо на Ñамом деле вÑÑ Ð³Ð¾Ñаздо Ñложнее.
-/// tip | ÐамеÑка
+/// tip | СовеÑ
-ÐÑли Ð²Ñ ÑоÑопиÑеÑÑ Ð¸Ð»Ð¸ вам не инÑеÑеÑно, можеÑе пеÑейÑи на ÑледÑÑÑÑÑ ÑÑÑаниÑÑ ÑÑого поÑагового ÑÑководÑÑва по ÑазмеÑÐµÐ½Ð¸Ñ Ð¿Ñиложений на ÑеÑвеÑаÑ
Ñ Ð¸ÑполÑзованием ÑазлиÑнÑÑ
ÑеÑ
нологий.
+ÐÑли Ð²Ñ ÑоÑопиÑеÑÑ Ð¸Ð»Ð¸ вам ÑÑо не важно, пеÑеÑ
одиÑе к ÑледÑÑÑим Ñазделам Ñ Ð¿Ð¾ÑаговÑми инÑÑÑÑкÑиÑми по наÑÑÑойке вÑего ÑазнÑми ÑпоÑобами.
///
-ЧÑÐ¾Ð±Ñ **изÑÑиÑÑ Ð¾ÑÐ½Ð¾Ð²Ñ HTTPS** Ð´Ð»Ñ ÐºÐ»Ð¸ÐµÐ½Ñа, пеÑейдиÑе по ÑÑÑлке
https://howhttps.works/.
-
-ÐдеÑÑ Ð¶Ðµ пÑедÑÑÐ°Ð²Ð»ÐµÐ½Ñ Ð½ÐµÐºÐ¾ÑоÑÑе конÑепÑии, коÑоÑÑе **ÑазÑабоÑÑик** должен имеÑÑ Ð² Ð²Ð¸Ð´Ñ Ð¿Ñи ÑазмÑÑлениÑÑ
об HTTPS:
-
-* ÐÑоÑокол HTTPS пÑедполагаеÑ, ÑÑо **ÑеÑвеÑÑ** нÑжно **ÑаÑполагаÑÑ "ÑеÑÑиÑикаÑами"** ÑгенеÑиÑованнÑми **ÑÑеÑÑей ÑÑоÑоной**.
- * Ðа Ñамом деле ÑÑи ÑеÑÑиÑикаÑÑ **пÑиобÑеÑенÑ** Ñ ÑÑеÑÑей ÑÑоÑонÑ, а не "ÑгенеÑиÑованÑ".
-* У ÑеÑÑиÑикаÑов еÑÑÑ **ÑÑок годноÑÑи**.
- * СÑок годноÑÑи **иÑÑекаеÑ**.
- * Ðо иÑÑеÑении ÑÑока годноÑÑи иÑ
нÑжно **обновиÑÑ**, Ñо еÑÑÑ **Ñнова полÑÑиÑÑ** Ñ ÑÑеÑÑей ÑÑоÑонÑ.
-* ШиÑÑование ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ð¿ÑоиÑÑ
Ð¾Ð´Ð¸Ñ **на ÑÑовне пÑоÑокола TCP**.
- * ÐÑоÑокол TCP наÑ
одиÑÑÑ Ð½Ð° один ÑÑÐ¾Ð²ÐµÐ½Ñ **ниже пÑоÑокола HTTP**.
- * ÐоÑÑÐ¾Ð¼Ñ **пÑовеÑка ÑеÑÑиÑикаÑов и ÑиÑÑование** пÑоиÑÑ
Ð¾Ð´Ð¸Ñ **до HTTP**.
-* **TCP не Ð·Ð½Ð°ÐµÑ Ð¾ "доменаÑ
"**, но Ð·Ð½Ð°ÐµÑ Ð¾Ð± IP-адÑеÑаÑ
.
- * ÐнÑоÑмаÑÐ¸Ñ Ð¾ **запÑаÑиваемом домене** извлекаеÑÑÑ Ð¸Ð· запÑоÑа **на ÑÑовне HTTP**.
-* **СеÑÑиÑикаÑÑ HTTPS** "ÑеÑÑиÑиÑиÑÑÑÑ" **конкÑеÑнÑй домен**, но пÑовеÑка ÑеÑÑиÑикаÑов и ÑиÑÑование даннÑÑ
пÑоиÑÑ
Ð¾Ð´Ð¸Ñ Ð½Ð° ÑÑовне пÑоÑокола TCP, Ñо еÑÑÑ **до Ñого**, как ÑÑÐ°Ð½ÐµÑ Ð¸Ð·Ð²ÐµÑÑен домен-полÑÑаÑÐµÐ»Ñ Ð´Ð°Ð½Ð½ÑÑ
.
-* **Ðо ÑмолÑаниÑ** ÑÑо ознаÑаеÑ, ÑÑо Ñ Ð²Ð°Ñ Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ **ÑолÑко один ÑеÑÑиÑÐ¸ÐºÐ°Ñ HTTPS на один IP-адÑеÑ**.
- * Ðе важно, наÑколÑко болÑÑой Ñ Ð²Ð°Ñ ÑеÑÐ²ÐµÑ Ð¸ наÑколÑко маленÑкие пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð½Ð° нÑм могÑÑ Ð±ÑÑÑ.
- * Ðднако, Ñ ÑÑой пÑÐ¾Ð±Ð»ÐµÐ¼Ñ ÐµÑÑÑ **ÑеÑение**.
-* СÑÑеÑÑвÑÐµÑ **ÑаÑÑиÑение** пÑоÑокола **TLS** (коÑоÑÑй ÑабоÑÐ°ÐµÑ Ð½Ð° ÑÑовне TCP, Ñо еÑÑÑ Ð´Ð¾ HTTP) назÑваемое **
SNI**.
- * РаÑÑиÑение SNI позволÑÐµÑ Ð¾Ð´Ð½Ð¾Ð¼Ñ ÑеÑвеÑÑ (Ñ **одним IP-адÑеÑом**) имеÑÑ **неÑколÑко ÑеÑÑиÑикаÑов HTTPS** и обÑлÑживаÑÑ **множеÑÑво HTTPS-доменов/пÑиложений**.
- * ЧÑÐ¾Ð±Ñ ÑÑа конÑÑÑÑкÑÐ¸Ñ ÑабоÑала, **один** ÐµÑ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½Ñ (пÑогÑамма) запÑÑеннÑй на ÑеÑвеÑе и ÑлÑÑаÑÑий **пÑблиÑнÑй IP-адÑеÑ**, должен имеÑÑ **вÑе ÑеÑÑиÑикаÑÑ HTTPS** Ð´Ð»Ñ ÑÑого ÑеÑвеÑа.
-* **ÐоÑле** ÑÑÑÐ°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð·Ð°ÑиÑÑнного ÑоединениÑ, пÑоÑоколом пеÑедаÑи даннÑÑ
**оÑÑаÑÑÑÑ HTTP**.
- * Ðо даннÑе ÑепеÑÑ **заÑиÑÑованÑ**, неÑмоÑÑÑ Ð½Ð° Ñо, ÑÑо они пеÑедаÑÑÑÑ Ð¿Ð¾ **пÑоÑÐ¾ÐºÐ¾Ð»Ñ HTTP**.
-
-ÐбÑÑной пÑакÑикой ÑвлÑеÑÑÑ Ð¸Ð¼ÐµÑÑ **Ð¾Ð´Ð½Ñ Ð¿ÑогÑаммÑ/HTTP-ÑеÑвеÑ** запÑÑеннÑÑ Ð½Ð° ÑеÑвеÑе (маÑине, Ñ
оÑÑе и Ñ.д.) и **оÑвеÑÑÑвеннÑÑ Ð·Ð° вÑÑ ÑабоÑÑ Ñ HTTPS**:
-
-* полÑÑение **заÑиÑÑованнÑÑ
HTTPS-запÑоÑов**
-* оÑпÑавка **ÑаÑÑиÑÑованнÑÑ
HTTP запÑоÑов** в ÑооÑвеÑÑÑвÑÑÑее HTTP-пÑиложение, ÑабоÑаÑÑее на Ñом же ÑеÑвеÑе (в наÑем ÑлÑÑае, ÑÑо пÑиложение **FastAPI**)
-* полÑÑение **HTTP-оÑвеÑа** Ð¾Ñ Ð¿ÑиложениÑ
-* **ÑиÑÑование оÑвеÑа** иÑполÑзÑÑ Ð¿Ð¾Ð´Ñ
одÑÑий **ÑеÑÑиÑÐ¸ÐºÐ°Ñ HTTPS**
-* оÑпÑавка заÑиÑÑованного **HTTPS-оÑвеÑа клиенÑÑ**.
-Такой ÑеÑÐ²ÐµÑ ÑаÑÑо назÑваÑÑ **
ÐÑокÑи-ÑеÑÐ²ÐµÑ Ð·Ð°Ð²ÐµÑÑÐµÐ½Ð¸Ñ ÑабоÑÑ TLS** или пÑоÑÑо "пÑокÑи-ÑеÑвеÑ".
-
-ÐÐ¾Ñ Ð½ÐµÐºÐ¾ÑоÑÑе ваÑианÑÑ, коÑоÑÑе Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе иÑполÑзоваÑÑ Ð² каÑеÑÑве Ñакого пÑокÑи-ÑеÑвеÑа:
-
-* Traefik (Ð¼Ð¾Ð¶ÐµÑ Ð¾Ð±Ð½Ð¾Ð²Ð»ÑÑÑ ÑеÑÑиÑикаÑÑ)
-* Caddy (Ð¼Ð¾Ð¶ÐµÑ Ð¾Ð±Ð½Ð¾Ð²Ð»ÑÑÑ ÑеÑÑиÑикаÑÑ)
+ЧÑÐ¾Ð±Ñ **изÑÑиÑÑ Ð¾ÑÐ½Ð¾Ð²Ñ HTTPS** Ñ ÑоÑки зÑÐµÐ½Ð¸Ñ Ð¿Ð¾Ð»ÑзоваÑелÑ, заглÑниÑе на
https://howhttps.works/.
+
+ТепеÑÑ, Ñо ÑÑоÑÐ¾Ð½Ñ **ÑазÑабоÑÑика**, Ð²Ð¾Ñ Ð½ÐµÑколÑко веÑей, коÑоÑÑе ÑÑÐ¾Ð¸Ñ Ð´ÐµÑжаÑÑ Ð² голове, ÑазмÑÑлÑÑ Ð¾Ð± HTTPS:
+
+* ÐÐ»Ñ HTTPS **ÑеÑвеÑÑ** нÑжно **имеÑÑ Â«ÑеÑÑиÑикаÑÑ»**, ÑгенеÑиÑованнÑе **ÑÑеÑÑей ÑÑоÑоной**.
+ * ÐÑи ÑеÑÑиÑикаÑÑ Ð½Ð° Ñамом деле **пÑиобÑеÑаÑÑÑÑ** Ñ ÑÑеÑÑей ÑÑоÑонÑ, а не «генеÑиÑÑÑÑÑÑ».
+* У ÑеÑÑиÑикаÑов еÑÑÑ **ÑÑок дейÑÑвиÑ**.
+ * Ðни **иÑÑекаÑÑ**.
+ * ÐоÑле ÑÑого иÑ
нÑжно **обновлÑÑÑ**, Ñо еÑÑÑ **полÑÑаÑÑ Ð·Ð°Ð½Ð¾Ð²Ð¾** Ñ ÑÑеÑÑей ÑÑоÑонÑ.
+* ШиÑÑование ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ð¿ÑоиÑÑ
Ð¾Ð´Ð¸Ñ Ð½Ð° **ÑÑовне TCP**.
+ * ÐÑо на один ÑÑÐ¾Ð²ÐµÐ½Ñ **ниже HTTP**.
+ * ÐоÑÑÐ¾Ð¼Ñ **ÑеÑÑиÑикаÑÑ Ð¸ ÑиÑÑование** обÑабаÑÑваÑÑÑÑ **до HTTP**.
+* **TCP не Ð·Ð½Ð°ÐµÑ Ð¾ «доменаÑ
»**. ТолÑко об IP-адÑеÑаÑ
.
+ * ÐнÑоÑмаÑÐ¸Ñ Ð¾ **конкÑеÑном домене** пеÑедаÑÑÑÑ Ð² **даннÑÑ
HTTP**.
+* **HTTPS-ÑеÑÑиÑикаÑÑ** «ÑеÑÑиÑиÑиÑÑÑÑ» **опÑеделÑннÑй домен**, но пÑоÑокол и ÑиÑÑование пÑоиÑÑ
одÑÑ Ð½Ð° ÑÑовне TCP, **до Ñого как** ÑÑановиÑÑÑ Ð¸Ð·Ð²ÐµÑÑен домен, Ñ ÐºÐ¾ÑоÑÑм идÑÑ ÑабоÑа.
+* **Ðо ÑмолÑаниÑ** ÑÑо ознаÑаеÑ, ÑÑо Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе имеÑÑ **лиÑÑ Ð¾Ð´Ð¸Ð½ HTTPS-ÑеÑÑиÑÐ¸ÐºÐ°Ñ Ð½Ð° один IP-адÑеÑ**.
+ * Ðеважно, наÑколÑко моÑнÑй Ñ Ð²Ð°Ñ ÑеÑÐ²ÐµÑ Ð¸Ð»Ð¸ наÑколÑко маленÑкие пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð½Ð° нÑм ÑабоÑаÑÑ.
+ * Ðднако Ñ ÑÑого еÑÑÑ **ÑеÑение**.
+* ÐÑÑÑ **ÑаÑÑиÑение** пÑоÑокола **TLS** (Ñого Ñамого, ÑÑо занимаеÑÑÑ ÑиÑÑованием на ÑÑовне TCP, до HTTP) под названием **
SNI**.
+ * ÐÑо ÑаÑÑиÑение SNI позволÑÐµÑ Ð¾Ð´Ð½Ð¾Ð¼Ñ ÑеÑвеÑÑ (Ñ **одним IP-адÑеÑом**) имеÑÑ **неÑколÑко HTTPS-ÑеÑÑиÑикаÑов** и обÑлÑживаÑÑ **неÑколÑко HTTPS-доменов/пÑиложений**.
+ * ЧÑÐ¾Ð±Ñ ÑÑо ÑабоÑало, **один** ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½Ñ (пÑогÑамма), запÑÑеннÑй на ÑеÑвеÑе и ÑлÑÑаÑÑий **пÑблиÑнÑй IP-адÑеÑ**, должен имеÑÑ **вÑе HTTPS-ÑеÑÑиÑикаÑÑ** на ÑÑом ÑеÑвеÑе.
+* **ÐоÑле** ÑÑÑÐ°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð·Ð°ÑиÑÑнного ÑоединениÑ, пÑоÑокол обмена даннÑми â **вÑÑ ÐµÑÑ HTTP**.
+ * СодеÑжимое **заÑиÑÑовано**, неÑмоÑÑÑ Ð½Ð° Ñо, ÑÑо оно оÑпÑавлÑеÑÑÑ Ð¿Ð¾ **пÑоÑÐ¾ÐºÐ¾Ð»Ñ HTTP**.
+
+ÐбÑÑно на ÑеÑвеÑе (маÑине, Ñ
оÑÑе и Ñ.п.) запÑÑкаÑÑ **Ð¾Ð´Ð½Ñ Ð¿ÑогÑаммÑ/HTTPâÑеÑвеÑ**, коÑоÑÐ°Ñ **ÑпÑавлÑÐµÑ Ð²Ñей ÑаÑÑÑÑ, ÑвÑзанной Ñ HTTPS**: пÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ **заÑиÑÑованнÑе HTTPS-запÑоÑÑ**, оÑпÑавлÑÐµÑ **ÑаÑÑиÑÑованнÑе HTTP-запÑоÑÑ** в Ñамо HTTPâпÑиложение, ÑабоÑаÑÑее на Ñом же ÑеÑвеÑе (в наÑем ÑлÑÑае ÑÑо пÑиложение **FastAPI**), полÑÑÐ°ÐµÑ **HTTP-оÑвеÑ** Ð¾Ñ Ð¿ÑиложениÑ, **ÑиÑÑÑÐµÑ ÐµÐ³Ð¾** Ñ Ð¸ÑполÑзованием подÑ
одÑÑего **HTTPSâÑеÑÑиÑикаÑа** и оÑпÑавлÑÐµÑ ÐºÐ»Ð¸ÐµÐ½ÑÑ Ð¿Ð¾ **HTTPS**. Такой ÑеÑÐ²ÐµÑ ÑаÑÑо назÑваÑÑ **
пÑокÑиâÑеÑвеÑом TLS-ÑеÑминаÑии**.
+
+ÐекоÑоÑÑе ваÑианÑÑ, коÑоÑÑе Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе иÑполÑзоваÑÑ ÐºÐ°Ðº пÑокÑиâÑеÑÐ²ÐµÑ TLS-ÑеÑминаÑии:
+
+* Traefik (ÑÐ¼ÐµÐµÑ Ð¾Ð±Ð½Ð¾Ð²Ð»ÑÑÑ ÑеÑÑиÑикаÑÑ)
+* Caddy (ÑÐ¼ÐµÐµÑ Ð¾Ð±Ð½Ð¾Ð²Ð»ÑÑÑ ÑеÑÑиÑикаÑÑ)
* Nginx
* HAProxy
-## Let's Encrypt (ÑенÑÑ ÑеÑÑиÑикаÑии)
+## Let's Encrypt { #lets-encrypt }
-Ðо поÑÐ²Ð»ÐµÐ½Ð¸Ñ Let's Encrypt **ÑеÑÑиÑикаÑÑ HTTPS** пÑиÑ
одилоÑÑ Ð¿Ð¾ÐºÑпаÑÑ Ñ ÑÑеÑÑиÑ
ÑÑоÑон.
+Ðо поÑÐ²Ð»ÐµÐ½Ð¸Ñ Let's Encrypt ÑÑи **HTTPS-ÑеÑÑиÑикаÑÑ** пÑодавалиÑÑ Ð´Ð¾Ð²ÐµÑеннÑми ÑÑеÑÑими ÑÑоÑонами.
-ÐÑоÑеÑÑ Ð¿Ð¾Ð»ÑÑÐµÐ½Ð¸Ñ Ñакого ÑеÑÑиÑикаÑа бÑл ÑÑÑдоÑмким, ÑÑебовал пÑедоÑÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð´ÑвеÑждаÑÑиÑ
докÑменÑов и ÑеÑÑиÑикаÑÑ ÑÑоили доÑого.
+ÐÑоÑеÑÑ Ð¿Ð¾Ð»ÑÑÐµÐ½Ð¸Ñ ÑакиÑ
ÑеÑÑиÑикаÑов бÑл неÑдобнÑм, ÑÑебовал бÑмажной волокиÑÑ, а Ñами ÑеÑÑиÑикаÑÑ Ð±Ñли доволÑно доÑогими.
-Ðо заÑем конÑоÑÑиÑмом Linux Foundation бÑл Ñоздан пÑÐ¾ÐµÐºÑ **
Let's Encrypt**.
+ÐаÑем поÑвилÑÑ **
Let's Encrypt**.
-Ðн авÑомаÑиÑеÑки пÑедоÑÑавлÑÐµÑ **беÑплаÑнÑе ÑеÑÑиÑикаÑÑ HTTPS**. ÐÑи ÑеÑÑиÑикаÑÑ Ð¸ÑполÑзÑÑÑ Ð²Ñе ÑÑандаÑÑнÑе кÑипÑогÑаÑиÑеÑкие ÑпоÑÐ¾Ð±Ñ ÑиÑÑованиÑ. Ðни имеÑÑ Ð½ÐµÐ±Ð¾Ð»ÑÑой ÑÑок годноÑÑи (около 3 меÑÑÑев), благодаÑÑ ÑÐµÐ¼Ñ Ð¾Ð½Ð¸ даже **более безопаÑнÑ**.
+ÐÑо пÑÐ¾ÐµÐºÑ Linux Foundation. Ðн пÑедоÑÑавлÑÐµÑ **HTTPSâÑеÑÑиÑикаÑÑ Ð±ÐµÑплаÑно**, в авÑомаÑиÑеÑком Ñежиме. ÐÑи ÑеÑÑиÑикаÑÑ Ð¸ÑполÑзÑÑÑ ÑÑандаÑÑнÑе кÑипÑогÑаÑиÑеÑкие меÑ
Ð°Ð½Ð¸Ð·Ð¼Ñ Ð¸ имеÑÑ ÐºÐ¾ÑоÑкий ÑÑок дейÑÑÐ²Ð¸Ñ (около 3 меÑÑÑев), поÑÑÐ¾Ð¼Ñ **безопаÑноÑÑÑ ÑакÑиÑеÑки вÑÑе** благодаÑÑ ÑменÑÑÐµÐ½Ð½Ð¾Ð¼Ñ ÑÑÐ¾ÐºÑ Ð¶Ð¸Ð·Ð½Ð¸.
-ÐÑи запÑоÑе на полÑÑение ÑеÑÑиÑикаÑа, он авÑомаÑиÑеÑки генеÑиÑÑеÑÑÑ Ð¸ домен пÑовеÑÑеÑÑÑ Ð½Ð° безопаÑноÑÑÑ. ÐÑо позволÑÐµÑ Ð¾Ð±Ð½Ð¾Ð²Ð»ÑÑÑ ÑеÑÑиÑикаÑÑ Ð°Ð²ÑомаÑиÑеÑки.
+ÐÐ¾Ð¼ÐµÐ½Ñ Ð±ÐµÐ·Ð¾Ð¿Ð°Ñно пÑовеÑÑÑÑÑÑ, а ÑеÑÑиÑикаÑÑ Ð²ÑдаÑÑÑÑ Ð°Ð²ÑомаÑиÑеÑки. ÐÑо Ñакже позволÑÐµÑ Ð°Ð²ÑомаÑизиÑоваÑÑ Ð¿ÑоÑеÑÑ Ð¸Ñ
пÑодлениÑ.
-СÑÑÑ Ð¸Ð´ÐµÐ¸ в авÑомаÑиÑеÑком полÑÑении и обновлении ÑÑиÑ
ÑеÑÑиÑикаÑов, ÑÑÐ¾Ð±Ñ Ð²Ñе могли полÑзоваÑÑÑÑ **безопаÑнÑм HTTPS. ÐеÑплаÑно. РлÑбое вÑемÑ.**
+ÐÐ´ÐµÑ â авÑомаÑизиÑоваÑÑ Ð¿Ð¾Ð»ÑÑение и пÑодление ÑеÑÑиÑикаÑов, ÑÑÐ¾Ð±Ñ Ñ Ð²Ð°Ñ Ð±Ñл **безопаÑнÑй HTTPS, беÑплаÑно и навÑегда**.
-## HTTPS Ð´Ð»Ñ ÑазÑабоÑÑиков
+## HTTPS Ð´Ð»Ñ ÑазÑабоÑÑиков { #https-for-developers }
-Ðиже, Ñаг за Ñагом, Ñ Ð·Ð°Ð¾ÑÑÑением Ð²Ð½Ð¸Ð¼Ð°Ð½Ð¸Ñ Ð½Ð° идеÑÑ
, важнÑÑ
Ð´Ð»Ñ ÑазÑабоÑÑика, опиÑано, как Ð¼Ð¾Ð¶ÐµÑ Ð²ÑглÑдеÑÑ HTTPS API.
+Ðиже пÑиведÑн пÑÐ¸Ð¼ÐµÑ Ñого, как Ð¼Ð¾Ð¶ÐµÑ Ð²ÑглÑдеÑÑ HTTPSâAPI, Ñаг за Ñагом, Ñ Ð°ÐºÑенÑом на идеÑÑ
, важнÑÑ
Ð´Ð»Ñ ÑазÑабоÑÑиков.
-### ÐÐ¼Ñ Ð´Ð¾Ð¼ÐµÐ½Ð°
+### ÐÐ¼Ñ Ð´Ð¾Ð¼ÐµÐ½Ð° { #domain-name }
-ЧаÑе вÑего, вÑÑ Ð½Ð°ÑинаеÑÑÑ Ñ **пÑиобÑеÑÐµÐ½Ð¸Ñ Ð¸Ð¼ÐµÐ½Ð¸ домена**. ÐаÑем нÑжно наÑÑÑоиÑÑ DNS-ÑеÑÐ²ÐµÑ (веÑоÑÑно Ñ Ñого же пÑовайдеÑа, коÑоÑÑй вÑдал вам домен).
+ЧаÑе вÑего вÑÑ Ð½Ð°ÑинаеÑÑÑ Ñ **пÑиобÑеÑениÑ** **имени домена**. ÐаÑем Ð²Ñ Ð½Ð°ÑÑÑаиваеÑе его на DNSâÑеÑвеÑе (возможно, Ñ Ñого же облаÑного пÑовайдеÑа).
-Ðалее, возможно, Ð²Ñ Ð¿Ð¾Ð»ÑÑаеÑе "облаÑнÑй" ÑеÑÐ²ÐµÑ (виÑÑÑалÑнÑÑ Ð¼Ð°ÑинÑ) или ÑÑо-Ñо Ñипа ÑÑого, Ñ ÐºÐ¾ÑоÑого еÑÑÑ
поÑÑоÑннÑй **пÑблиÑнÑй IP-адÑеÑ**.
+СкоÑее вÑего, Ð²Ñ Ð¿Ð¾Ð»ÑÑиÑе облаÑнÑй ÑеÑÐ²ÐµÑ (виÑÑÑалÑнÑÑ Ð¼Ð°ÑинÑ) или ÑÑо-Ñо подобное, и Ñ Ð½ÐµÐ³Ð¾ бÑдеÑ
поÑÑоÑннÑй **пÑблиÑнÑй IP-адÑеÑ**.
-Ðа DNS-ÑеÑвеÑе (ÑеÑвеÑаÑ
) вам ÑледÑÐµÑ Ð½Ð°ÑÑÑоиÑÑ ÑооÑвеÑÑÑвÑÑÑÑÑ ÑеÑÑÑÑнÑÑ Ð·Ð°Ð¿Ð¸ÑÑ ("`запиÑÑ A`"), Ñказав, ÑÑо **ÐÐ°Ñ Ð´Ð¾Ð¼ÐµÐ½** ÑвÑзан Ñ Ð¿ÑблиÑнÑм **IP-адÑеÑом ваÑего ÑеÑвеÑа**.
+Ðа DNSâÑеÑвеÑе(аÑ
) Ð²Ñ Ð½Ð°ÑÑÑоиÑе запиÑÑ («`A record`» - запиÑÑ Ñипа A), ÑказÑваÑÑÑÑ, ÑÑо **Ð²Ð°Ñ Ð´Ð¾Ð¼ÐµÐ½** должен ÑказÑваÑÑ Ð½Ð° пÑблиÑнÑй **IPâадÑÐµÑ Ð²Ð°Ñего ÑеÑвеÑа**.
-ÐбÑÑно ÑÑÑ Ð·Ð°Ð¿Ð¸ÑÑ Ð´Ð¾ÑÑаÑоÑно ÑказаÑÑ Ð¾Ð´Ð¸Ð½ Ñаз, пÑи пеÑвонаÑалÑной наÑÑÑойке вÑего ÑеÑвеÑа.
+ÐбÑÑно ÑÑо делаеÑÑÑ Ð¾Ð´Ð¸Ð½ Ñаз â пÑи пеÑвонаÑалÑной наÑÑÑойке вÑего.
-/// tip | ÐамеÑка
+/// tip | СовеÑ
-УÑовни пÑоÑоколов, ÑабоÑаÑÑиÑ
Ñ Ð¸Ð¼ÐµÐ½Ð°Ð¼Ð¸ доменов, намного ниже HTTPS, но об ÑÑом ÑледÑÐµÑ ÑпомÑнÑÑÑ Ð·Ð´ÐµÑÑ, Ñак как вÑÑ Ð·Ð°Ð²Ð¸ÑÐ¸Ñ Ð¾Ñ Ð´Ð¾Ð¼ÐµÐ½Ð¾Ð² и IP-адÑеÑов.
+ЧаÑÑÑ Ð¿Ñо доменное Ð¸Ð¼Ñ Ð¾ÑноÑиÑÑÑ Ðº ÑÑапам задолго до HTTPS, но Ñак как вÑÑ Ð·Ð°Ð²Ð¸ÑÐ¸Ñ Ð¾Ñ Ð´Ð¾Ð¼ÐµÐ½Ð° и IPâадÑеÑа, здеÑÑ ÑÑÐ¾Ð¸Ñ ÑÑо ÑпомÑнÑÑÑ.
///
-### DNS
+### DNS { #dns }
-ТепеÑÑ Ð´Ð°Ð²Ð°Ð¹Ñе ÑÑокÑÑиÑÑемÑÑ Ð½Ð° ÑабоÑе Ñ HTTPS.
+ТепеÑÑ ÑÑокÑÑиÑÑемÑÑ Ð½Ð° ÑобÑÑвенно ÑаÑÑÑÑ
, ÑвÑзаннÑÑ
Ñ HTTPS.
-ÐÑÑ Ð½Ð°ÑинаеÑÑÑ Ñ Ñого, ÑÑо бÑаÑÐ·ÐµÑ ÑпÑаÑÐ¸Ð²Ð°ÐµÑ Ñ **DNS-ÑеÑвеÑов**, какой **IP-адÑÐµÑ ÑвÑзан Ñ Ð´Ð¾Ð¼ÐµÐ½Ð¾Ð¼**, Ð´Ð»Ñ Ð¿ÑимеÑа возÑмÑм домен `someapp.example.com`.
+СнаÑала бÑаÑÐ·ÐµÑ ÑпÑоÑÐ¸Ñ Ñ **DNSâÑеÑвеÑов**, какой **IP ÑооÑвеÑÑÑвÑÐµÑ Ð´Ð¾Ð¼ÐµÐ½Ñ**, в наÑем пÑимеÑе `someapp.example.com`.
-DNS-ÑеÑвеÑа пÑиÑÑлаÑÑ Ð±ÑаÑзеÑÑ Ð¾Ð¿ÑеделÑннÑй **IP-адÑеÑ**, ÑÐ¾Ñ ÑамÑй пÑблиÑнÑй IP-адÑÐµÑ Ð²Ð°Ñего ÑеÑвеÑа, коÑоÑÑй Ð²Ñ Ñказали в ÑеÑÑÑÑной "запиÑи Ð" пÑи наÑÑÑойке.
+DNSâÑеÑвеÑÑ Ð¾ÑвеÑÑÑ Ð±ÑаÑзеÑÑ, какой **конкÑеÑнÑй IPâадÑеÑ** иÑполÑзоваÑÑ. ÐÑо бÑÐ´ÐµÑ Ð¿ÑблиÑнÑй IPâадÑÐµÑ Ð²Ð°Ñего ÑеÑвеÑа, коÑоÑÑй Ð²Ñ Ñказали в наÑÑÑойкаÑ
DNS.

-### Ð ÑкопожаÑие TLS
+### ÐаÑало TLS-ÑÑкопожаÑÐ¸Ñ { #tls-handshake-start }
-РдалÑнейÑем бÑаÑÐ·ÐµÑ Ð±ÑÐ´ÐµÑ Ð²Ð·Ð°Ð¸Ð¼Ð¾Ð´ÐµÐ¹ÑÑвоваÑÑ Ñ ÑÑим IP-адÑеÑом ÑеÑез **port 443** (обÑепÑинÑÑÑй Ð½Ð¾Ð¼ÐµÑ Ð¿Ð¾ÑÑа Ð´Ð»Ñ HTTPS).
+Ðалее бÑаÑÐ·ÐµÑ Ð±ÑÐ´ÐµÑ Ð¾Ð±ÑаÑÑÑÑ Ñ ÑÑим IPâадÑеÑом на **поÑÑÑ 443** (поÑÑ HTTPS).
-ÐеÑвÑм Ñагом бÑÐ´ÐµÑ ÑÑÑановление ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ð¼ÐµÐ¶Ð´Ñ ÐºÐ»Ð¸ÐµÐ½Ñом (бÑаÑзеÑом) и ÑеÑвеÑом и вÑÐ±Ð¾Ñ ÐºÑипÑогÑаÑиÑеÑкого клÑÑа (Ð´Ð»Ñ ÑиÑÑованиÑ).
+ÐеÑÐ²Ð°Ñ ÑаÑÑÑ Ð²Ð·Ð°Ð¸Ð¼Ð¾Ð´ÐµÐ¹ÑÑÐ²Ð¸Ñ â ÑÑÑановиÑÑ Ñоединение Ð¼ÐµÐ¶Ð´Ñ ÐºÐ»Ð¸ÐµÐ½Ñом и ÑеÑвеÑом и договоÑиÑÑÑÑ Ð¾ кÑипÑогÑаÑиÑеÑкиÑ
клÑÑаÑ
и Ñ.п.

-ÐÑа ÑаÑÑÑ ÐºÐ»Ð¸ÐµÐ½Ñ-ÑеÑвеÑного взаимодейÑÑÐ²Ð¸Ñ ÑÑÑÐ°Ð½Ð°Ð²Ð»Ð¸Ð²Ð°ÐµÑ TLS-Ñоединение и назÑваеÑÑÑ **TLS-ÑÑкопожаÑием**.
+ÐÑо взаимодейÑÑвие клиенÑа и ÑеÑвеÑа Ð´Ð»Ñ ÑÑÑÐ°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ TLSâÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ð½Ð°Ð·ÑваеÑÑÑ **TLSâÑÑкопожаÑием**.
-### TLS Ñ ÑаÑÑиÑением SNI
+### TLS Ñ ÑаÑÑиÑением SNI { #tls-with-sni-extension }
-Ðа ÑеÑвеÑе **ÑолÑко один пÑоÑеÑÑ** Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑоÑлÑÑиваÑÑ Ð¾Ð¿ÑеделÑннÑй **поÑÑ** опÑеделÑнного **IP-адÑеÑа**. Ðа ÑеÑвеÑе могÑÑ Ð±ÑÑÑ Ð¸ дÑÑгие пÑоÑеÑÑÑ, ÑлÑÑаÑÑие дÑÑгие поÑÑÑ ÑÑого же IP-адÑеÑа, но никакой пÑоÑеÑÑ Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿ÑивÑзан к Ñже занÑÑой комбинаÑии IP-адÑеÑ:поÑÑ. ÐÑа комбинаÑÐ¸Ñ Ð½Ð°Ð·ÑваеÑÑÑ "ÑокеÑ".
+Ðа ÑеÑвеÑе **ÑолÑко один пÑоÑеÑÑ** Ð¼Ð¾Ð¶ÐµÑ ÑлÑÑаÑÑ ÐºÐ¾Ð½ÐºÑеÑнÑй **поÑÑ** на конкÑеÑном **IPâадÑеÑе**. ÐогÑÑ Ð±ÑÑÑ Ð´ÑÑгие пÑоÑеÑÑÑ, ÑлÑÑаÑÑие дÑÑгие поÑÑÑ Ð½Ð° Ñом же IPâадÑеÑе, но не более одного пÑоÑеÑÑа на каждÑÑ ÐºÐ¾Ð¼Ð±Ð¸Ð½Ð°ÑÐ¸Ñ IPâадÑеÑа и поÑÑа.
-Ðо ÑмолÑÐ°Ð½Ð¸Ñ TLS (HTTPS) иÑполÑзÑÐµÑ Ð¿Ð¾ÑÑ `443`. ÐоÑÐ¾Ð¼Ñ ÑÑÐ¾Ñ Ð¶Ðµ поÑÑ Ð±Ñдем иÑполÑзоваÑÑ Ð¸ мÑ.
+Ðо ÑмолÑÐ°Ð½Ð¸Ñ TLS (HTTPS) иÑполÑзÑÐµÑ Ð¿Ð¾ÑÑ `443`. ÐнаÑиÑ, он нам и нÑжен.
-Ð Ñаз Ñж ÑолÑко один пÑоÑеÑÑ Ð¼Ð¾Ð¶ÐµÑ ÑлÑÑаÑÑ ÑÑÐ¾Ñ Ð¿Ð¾ÑÑ, Ñо ÑÑо бÑÐ´ÐµÑ Ð¿ÑоÑеÑÑ **пÑокÑи-ÑеÑвеÑа завеÑÑÐµÐ½Ð¸Ñ ÑабоÑÑ TLS**.
+Так как ÑолÑко один пÑоÑеÑÑ Ð¼Ð¾Ð¶ÐµÑ ÑлÑÑаÑÑ ÑÑÐ¾Ñ Ð¿Ð¾ÑÑ, делаÑÑ ÑÑо бÑÐ´ÐµÑ **пÑокÑиâÑеÑÐ²ÐµÑ TLS-ÑеÑминаÑии**.
-ÐÑокÑи-ÑеÑÐ²ÐµÑ Ð·Ð°Ð²ÐµÑÑÐµÐ½Ð¸Ñ ÑабоÑÑ TLS бÑÐ´ÐµÑ Ð¸Ð¼ÐµÑÑ Ð´Ð¾ÑÑÑп к Ð¾Ð´Ð½Ð¾Ð¼Ñ Ð¸Ð»Ð¸ неÑколÑким **TLS-ÑеÑÑиÑикаÑам** (ÑеÑÑиÑикаÑÑ HTTPS).
+У пÑокÑиâÑеÑвеÑа TLS-ÑеÑминаÑии бÑÐ´ÐµÑ Ð´Ð¾ÑÑÑп к Ð¾Ð´Ð½Ð¾Ð¼Ñ Ð¸Ð»Ð¸ неÑколÑким **TLSâÑеÑÑиÑикаÑам** (HTTPSâÑеÑÑиÑикаÑам).
-ÐÑполÑзÑÑ **ÑаÑÑиÑение SNI** ÑпомÑнÑÑое вÑÑе, пÑокÑи-ÑеÑÐ²ÐµÑ Ð¸Ð· имеÑÑиÑ
ÑÑ ÑеÑÑиÑикаÑов TLS (HTTPS) вÑбеÑÐµÑ ÑоÑ, коÑоÑÑй ÑооÑвеÑÑÑвÑÐµÑ Ð¸Ð¼ÐµÐ½Ð¸ домена, ÑÐºÐ°Ð·Ð°Ð½Ð½Ð¾Ð¼Ñ Ð² запÑоÑе Ð¾Ñ ÐºÐ»Ð¸ÐµÐ½Ñа.
+ÐÑполÑзÑÑ **ÑаÑÑиÑение SNI**, ÑпомÑнÑÑое вÑÑе, пÑокÑиâÑеÑÐ²ÐµÑ TLS-ÑеÑминаÑии опÑеделиÑ, какой из доÑÑÑпнÑÑ
TLS (HTTPS)âÑеÑÑиÑикаÑов нÑжно иÑполÑзоваÑÑ Ð´Ð»Ñ ÑÑого ÑоединениÑ, вÑбÑав ÑоÑ, коÑоÑÑй ÑооÑвеÑÑÑвÑÐµÑ Ð´Ð¾Ð¼ÐµÐ½Ñ, Ð¾Ð¶Ð¸Ð´Ð°ÐµÐ¼Ð¾Ð¼Ñ ÐºÐ»Ð¸ÐµÐ½Ñом.
-То еÑÑÑ Ð±ÑÐ´ÐµÑ Ð²ÑбÑан ÑеÑÑиÑÐ¸ÐºÐ°Ñ Ð´Ð»Ñ Ð´Ð¾Ð¼ÐµÐ½Ð° `someapp.example.com`.
+РнаÑем ÑлÑÑае ÑÑо бÑÐ´ÐµÑ ÑеÑÑиÑÐ¸ÐºÐ°Ñ Ð´Ð»Ñ `someapp.example.com`.

-ÐÐ»Ð¸ÐµÐ½Ñ Ñже **довеÑÑеÑ** ÑомÑ, кÑо вÑдал ÑÑÐ¾Ñ TLS-ÑеÑÑиÑÐ¸ÐºÐ°Ñ (в наÑем ÑлÑÑае - Let's Encrypt, но Ð¼Ñ ÐµÑÑ Ð¾Ð±ÑÑдим ÑÑо), поÑÐ¾Ð¼Ñ Ð¼Ð¾Ð¶ÐµÑ **пÑовеÑиÑÑ**, дейÑÑвиÑелен ли полÑÑеннÑй Ð¾Ñ ÑеÑвеÑа ÑеÑÑиÑикаÑ.
+ÐÐ»Ð¸ÐµÐ½Ñ Ñже **довеÑÑеÑ** оÑганизаÑии, вÑдавÑей ÑÑÐ¾Ñ TLSâÑеÑÑиÑÐ¸ÐºÐ°Ñ (в наÑем ÑлÑÑае â Let's Encrypt, но об ÑÑом позже), поÑÑÐ¾Ð¼Ñ Ð¼Ð¾Ð¶ÐµÑ **пÑовеÑиÑÑ**, ÑÑо ÑеÑÑиÑÐ¸ÐºÐ°Ñ Ð´ÐµÐ¹ÑÑвиÑелен.
-ÐаÑем, иÑполÑзÑÑ ÑÑÐ¾Ñ ÑеÑÑиÑикаÑ, ÐºÐ»Ð¸ÐµÐ½Ñ Ð¸ пÑокÑи-ÑеÑÐ²ÐµÑ **вÑбиÑаÑÑ ÑпоÑоб ÑиÑÑованиÑ** даннÑÑ
Ð´Ð»Ñ ÑÑÑанавливаемого **TCP-ÑоединениÑ**. Ðа ÑÑом опеÑаÑÐ¸Ñ **TLS-ÑÑкопожаÑиÑ** завеÑÑена.
+ÐаÑем, иÑполÑзÑÑ ÑеÑÑиÑикаÑ, ÐºÐ»Ð¸ÐµÐ½Ñ Ð¸ пÑокÑиâÑеÑÐ²ÐµÑ TLS-ÑеÑминаÑии **договаÑиваÑÑÑÑ Ð¾ ÑпоÑобе ÑиÑÑованиÑ** оÑÑалÑной **TCPâкоммÑникаÑии**. Ðа ÑÑом **TLSâÑÑкопожаÑие** завеÑÑено.
-РдалÑнейÑем ÐºÐ»Ð¸ÐµÐ½Ñ Ð¸ ÑеÑÐ²ÐµÑ Ð±ÑдÑÑ Ð²Ð·Ð°Ð¸Ð¼Ð¾Ð´ÐµÐ¹ÑÑвоваÑÑ Ð¿Ð¾ **заÑиÑÑÐ¾Ð²Ð°Ð½Ð½Ð¾Ð¼Ñ TCP-ÑоединениÑ**, как пÑедлагаеÑÑÑ Ð² пÑоÑоколе TLS. Рна оÑнове ÑÑого TCP-ÑÐ¾ÐµÐ´ÐµÐ½Ð¸Ð½Ð¸Ñ Ð±ÑÐ´ÐµÑ Ñоздано **HTTP-Ñоединение**.
+ÐоÑле ÑÑого Ñ ÐºÐ»Ð¸ÐµÐ½Ñа и ÑеÑвеÑа еÑÑÑ **заÑиÑÑованное TCPâÑоединение** â ÑÑо и пÑедоÑÑавлÑÐµÑ TLS. Рони могÑÑ Ð¸ÑполÑзоваÑÑ ÑÑо Ñоединение, ÑÑÐ¾Ð±Ñ Ð½Ð°ÑаÑÑ ÑобÑÑвенно **HTTPâобмен**.
-Таким обÑазом, **HTTPS** ÑÑо ÑÐ¾Ñ Ð¶Ðµ **HTTP**, но внÑÑÑи **безопаÑного TLS-ÑоединениÑ** вмеÑÑо ÑиÑÑого (незаÑиÑÑованного) TCP-ÑоединениÑ.
+СобÑÑвенно, **HTTPS** â ÑÑо обÑÑнÑй **HTTP** внÑÑÑи **заÑиÑÑнного TLSâÑоединениÑ**, вмеÑÑо ÑиÑÑого (незаÑиÑÑованного) TCPâÑоединениÑ.
-/// tip | ÐамеÑка
+/// tip | СовеÑ
-ÐбÑаÑиÑе внимание, ÑÑо ÑиÑÑование пÑоиÑÑ
Ð¾Ð´Ð¸Ñ Ð½Ð° **ÑÑовне TCP**, а не на более вÑÑоком ÑÑовне HTTP.
+ÐбÑаÑиÑе внимание, ÑÑо ÑиÑÑование обмена пÑоиÑÑ
Ð¾Ð´Ð¸Ñ Ð½Ð° **ÑÑовне TCP**, а не на ÑÑовне HTTP.
///
-### HTTPS-запÑоÑ
+### HTTPSâзапÑÐ¾Ñ { #https-request }
-ТепеÑÑ, когда Ð¼ÐµÐ¶Ð´Ñ ÐºÐ»Ð¸ÐµÐ½Ñом и ÑеÑвеÑом (в наÑем ÑлÑÑае, бÑаÑзеÑом и пÑокÑи-ÑеÑвеÑом) Ñоздано **заÑиÑÑованное TCP-Ñоединение**, они могÑÑ Ð½Ð°ÑаÑÑ **обмен даннÑми по пÑоÑÐ¾ÐºÐ¾Ð»Ñ HTTP**.
+ТепеÑÑ, когда Ñ ÐºÐ»Ð¸ÐµÐ½Ñа и ÑеÑвеÑа (конкÑеÑно Ñ Ð±ÑаÑзеÑа и пÑокÑиâÑеÑвеÑа TLS-ÑеÑминаÑии) еÑÑÑ **заÑиÑÑованное TCPâÑоединение**, они могÑÑ Ð½Ð°ÑаÑÑ **HTTPâобмен**.
-Так ÐºÐ»Ð¸ÐµÐ½Ñ Ð¾ÑпÑавлÑÐµÑ **HTTPS-запÑоÑ**. То еÑÑÑ Ð¾Ð±ÑÑнÑй HTTP-запÑоÑ, но ÑеÑез заÑиÑÑованное TLS-Ñодинение.
+ÐÐ»Ð¸ÐµÐ½Ñ Ð¾ÑпÑавлÑÐµÑ **HTTPSâзапÑоÑ**. ÐÑо обÑÑнÑй HTTPâзапÑÐ¾Ñ ÑеÑез заÑиÑÑованное TLSâÑоединение.

-### РаÑÑиÑÑовка запÑоÑа
+### РаÑÑиÑÑовка запÑоÑа { #decrypt-the-request }
-ÐÑокÑи-ÑеÑвеÑ, иÑполÑзÑÑ ÑоглаÑованнÑй Ñ ÐºÐ»Ð¸ÐµÐ½Ñом клÑÑ, ÑаÑÑиÑÑÑÐµÑ Ð¿Ð¾Ð»ÑÑеннÑй **заÑиÑÑованнÑй запÑоÑ** и пеÑедаÑÑ **обÑÑнÑй (незаÑиÑÑованнÑй) HTTP-запÑоÑ** пÑоÑеÑÑÑ, запÑÑкаÑÑÐµÐ¼Ñ Ð¿Ñиложение (напÑимеÑ, пÑоÑеÑÑÑ Uvicorn запÑÑкаÑÑÐµÐ¼Ñ Ð¿Ñиложение FastAPI).
+ÐÑокÑиâÑеÑÐ²ÐµÑ TLS-ÑеÑминаÑии иÑполÑзÑÐµÑ ÑоглаÑованное ÑиÑÑование, ÑÑÐ¾Ð±Ñ **ÑаÑÑиÑÑоваÑÑ Ð·Ð°Ð¿ÑоÑ**, и пеÑедаÑÑ **обÑÑнÑй (ÑаÑÑиÑÑованнÑй) HTTPâзапÑоÑ** пÑоÑеÑÑÑ, запÑÑкаÑÑÐµÐ¼Ñ Ð¿Ñиложение (напÑимеÑ, пÑоÑеÑÑÑ Ñ Uvicorn, коÑоÑÑй запÑÑÐºÐ°ÐµÑ Ð¿Ñиложение FastAPI).

-### HTTP-оÑвеÑ
+### HTTPâоÑÐ²ÐµÑ { #http-response }
-ÐÑиложение обÑабоÑÐ°ÐµÑ Ð·Ð°Ð¿ÑÐ¾Ñ Ð¸ веÑнÑÑ **обÑÑнÑй (незаÑиÑÑованнÑй) HTTP-оÑвеÑ** пÑокÑи-ÑеÑвеÑÑ.
+ÐÑиложение обÑабоÑÐ°ÐµÑ Ð·Ð°Ð¿ÑÐ¾Ñ Ð¸ оÑпÑÐ°Ð²Ð¸Ñ **обÑÑнÑй (незаÑиÑÑованнÑй) HTTPâоÑвеÑ** пÑокÑиâÑеÑвеÑÑ TLS-ÑеÑминаÑии.

-### HTTPS-оÑвеÑ
+### HTTPSâоÑÐ²ÐµÑ { #https-response }
-ÐÑкоÑи-ÑеÑÐ²ÐµÑ **заÑиÑÑÑÐµÑ Ð¾ÑвеÑ** иÑполÑзÑÑ Ñанее ÑоглаÑованнÑй Ñ ÐºÐ»Ð¸ÐµÐ½Ñом ÑпоÑоб ÑиÑÑÐ¾Ð²Ð°Ð½Ð¸Ñ (коÑоÑÑе ÑодеÑжаÑÑÑ Ð² ÑеÑÑиÑикаÑе Ð´Ð»Ñ Ð´Ð¾Ð¼ÐµÐ½Ð° `someapp.example.com`) и оÑпÑÐ°Ð²Ð¸Ñ ÐµÐ³Ð¾ бÑаÑзеÑÑ.
+ÐаÑем пÑокÑиâÑеÑÐ²ÐµÑ TLS-ÑеÑминаÑии **заÑиÑÑÑÐµÑ Ð¾ÑвеÑ** Ñ Ð¸ÑполÑзованием Ñанее ÑоглаÑованного ÑпоÑоба ÑиÑÑÐ¾Ð²Ð°Ð½Ð¸Ñ (коÑоÑÑй наÑали иÑполÑзоваÑÑ Ð´Ð»Ñ ÑеÑÑиÑикаÑа Ð´Ð»Ñ `someapp.example.com`) и оÑпÑÐ°Ð²Ð¸Ñ ÐµÐ³Ð¾ обÑаÑно в бÑаÑзеÑ.
-ÐаконеÑ, бÑаÑÐ·ÐµÑ Ð¿ÑовеÑÐ¸Ñ Ð¾ÑвеÑ, в Ñом ÑиÑле, ÑÑо ÑÐ¾Ñ Ð·Ð°ÑиÑÑован Ñ Ð½ÑжнÑм клÑÑом, **ÑаÑÑиÑÑÑÐµÑ ÐµÐ³Ð¾** и обÑабоÑаеÑ.
+Ðалее бÑаÑÐ·ÐµÑ Ð¿ÑовеÑиÑ, ÑÑо оÑÐ²ÐµÑ ÐºÐ¾ÑÑекÑен и заÑиÑÑован пÑавилÑнÑм кÑипÑогÑаÑиÑеÑким клÑÑом и Ñ.п., заÑем **ÑаÑÑиÑÑÑÐµÑ Ð¾ÑвеÑ** и обÑабоÑÐ°ÐµÑ ÐµÐ³Ð¾.

-ÐÐ»Ð¸ÐµÐ½Ñ (бÑаÑзеÑ) знаеÑ, ÑÑо оÑÐ²ÐµÑ Ð¿ÑиÑÑл Ð¾Ñ Ð¿ÑавилÑного ÑеÑвеÑа, Ñак как иÑполÑзÑÐµÑ Ð¼ÐµÑÐ¾Ð´Ñ ÑиÑÑованиÑ, ÑоглаÑованнÑе ими Ñаннее ÑеÑез **HTTPS-ÑеÑÑиÑикаÑ**.
+ÐÐ»Ð¸ÐµÐ½Ñ (бÑаÑзеÑ) ÑзнаеÑ, ÑÑо оÑÐ²ÐµÑ Ð¿ÑиÑÑл Ð¾Ñ Ð¿ÑавилÑного ÑеÑвеÑа, поÑÐ¾Ð¼Ñ ÑÑо иÑполÑзÑеÑÑÑ ÑпоÑоб ÑиÑÑованиÑ, о коÑоÑом они договоÑилиÑÑ Ñанее Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ **HTTPSâÑеÑÑиÑикаÑа**.
-### ÐножеÑÑво пÑиложений
+### ÐеÑколÑко пÑиложений { #multiple-applications }
-Ðа одном и Ñом же ÑеÑвеÑе (или ÑеÑвеÑаÑ
) можно ÑазмеÑÑиÑÑ **множеÑÑво пÑиложений**, напÑимеÑ, дÑÑгие пÑогÑÐ°Ð¼Ð¼Ñ Ñ API или Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
.
+Ðа одном и Ñом же ÑеÑвеÑе (или ÑеÑвеÑаÑ
) могÑÑ ÑабоÑаÑÑ **неÑколÑко пÑиложений**, напÑÐ¸Ð¼ÐµÑ Ð´ÑÑгие пÑогÑÐ°Ð¼Ð¼Ñ Ñ API или база даннÑÑ
.
-ÐапомнÑ, ÑÑо ÑолÑко один пÑоÑеÑÑ (напÑимеÑ, пÑокÑи-ÑеÑвеÑ) Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑоÑлÑÑиваÑÑ Ð¾Ð¿ÑеделÑннÑй поÑÑ Ð¾Ð¿ÑеделÑнного IP-адÑеÑа.
-Ðо дÑÑгие пÑоÑеÑÑÑ Ð¸ пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ñоже могÑÑ ÑабоÑаÑÑ Ð½Ð° ÑÑом же ÑеÑвеÑе (ÑеÑвеÑаÑ
), еÑли они не пÑÑаÑÑÑÑ Ð¸ÑполÑзоваÑÑ Ñже занÑÑÑÑ **комбинаÑÐ¸Ñ IP-адÑеÑа и поÑÑа** (ÑокеÑ).
+ТолÑко один пÑоÑеÑÑ Ð¼Ð¾Ð¶ÐµÑ Ð¾Ð±ÑабаÑÑваÑÑ ÐºÐ¾Ð½ÐºÑеÑнÑÑ ÐºÐ¾Ð¼Ð±Ð¸Ð½Ð°ÑÐ¸Ñ IP и поÑÑа (в наÑем пÑимеÑе â пÑокÑиâÑеÑÐ²ÐµÑ TLS-ÑеÑминаÑии), но оÑÑалÑнÑе пÑиложениÑ/пÑоÑеÑÑÑ Ñоже могÑÑ ÑабоÑаÑÑ Ð½Ð° ÑеÑвеÑе(аÑ
), пока они не пÑÑаÑÑÑÑ Ð¸ÑполÑзоваÑÑ ÑÑ Ð¶Ðµ **комбинаÑÐ¸Ñ Ð¿ÑблиÑного IP и поÑÑа**.

-Таким обÑазом, ÑеÑÐ²ÐµÑ Ð·Ð°Ð²ÐµÑÑÐµÐ½Ð¸Ñ TLS Ð¼Ð¾Ð¶ÐµÑ Ð¾Ð±ÑабаÑÑваÑÑ HTTPS-запÑоÑÑ Ð¸ иÑполÑзоваÑÑ ÑеÑÑиÑикаÑÑ Ð´Ð»Ñ **множеÑÑва доменов** или пÑиложений и пеÑедаваÑÑ Ð·Ð°Ð¿ÑоÑÑ Ð¿ÑавилÑнÑм адÑеÑаÑам (дÑÑгим пÑиложениÑм).
+Таким обÑазом, пÑокÑиâÑеÑÐ²ÐµÑ TLS-ÑеÑминаÑии Ð¼Ð¾Ð¶ÐµÑ Ð¾Ð±ÑабаÑÑваÑÑ HTTPS и ÑеÑÑиÑикаÑÑ Ð´Ð»Ñ **неÑколÑкиÑ
доменов** (Ð´Ð»Ñ Ð½ÐµÑколÑкиÑ
пÑиложений), а заÑем пеÑедаваÑÑ Ð·Ð°Ð¿ÑоÑÑ Ð½ÑÐ¶Ð½Ð¾Ð¼Ñ Ð¿ÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð² каждом ÑлÑÑае.
-### Ðбновление ÑеÑÑиÑикаÑа
+### ÐÑодление ÑеÑÑиÑикаÑа { #certificate-renewal }
-РнедалÑком бÑдÑÑем лÑбой ÑеÑÑиÑÐ¸ÐºÐ°Ñ ÑÑÐ°Ð½ÐµÑ **пÑоÑÑоÑеннÑм** (пÑимеÑно ÑеÑез ÑÑи меÑÑÑа поÑле полÑÑениÑ).
+Со вÑеменем каждÑй ÑеÑÑиÑÐ¸ÐºÐ°Ñ **иÑÑеÑÑÑ** (пÑимеÑно ÑеÑез 3 меÑÑÑа поÑле полÑÑениÑ).
-Ðогда ÑÑо пÑоизойдÑÑ, можно запÑÑÑиÑÑ Ð´ÑÑгÑÑ Ð¿ÑогÑаммÑ, коÑоÑÐ°Ñ Ð¿Ð¾Ð´ÐºÐ»ÑÑиÑÑÑ Ðº Let's Encrypt и Ð¾Ð±Ð½Ð¾Ð²Ð¸Ñ ÑеÑÑиÑикаÑ(Ñ). СÑÑеÑÑвÑÑÑ Ð¿ÑокÑи-ÑеÑвеÑÑ, коÑоÑÑе могÑÑ ÑделаÑÑ ÑÑо дейÑÑвие ÑамоÑÑоÑÑелÑно.
+ÐаÑем бÑÐ´ÐµÑ Ð´ÑÑÐ³Ð°Ñ Ð¿ÑогÑамма (иногда ÑÑо оÑделÑÐ½Ð°Ñ Ð¿ÑогÑамма, иногда â ÑÐ¾Ñ Ð¶Ðµ пÑокÑиâÑеÑÐ²ÐµÑ TLS-ÑеÑминаÑии), коÑоÑÐ°Ñ ÑвÑжеÑÑÑ Ñ Let's Encrypt и пÑÐ¾Ð´Ð»Ð¸Ñ ÑеÑÑиÑикаÑ(Ñ).

-**TLS-ÑеÑÑиÑикаÑÑ** не пÑивÑÐ·Ð°Ð½Ñ Ðº IP-адÑеÑÑ, но **ÑвÑÐ·Ð°Ð½Ñ Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼ домена**.
+**TLSâÑеÑÑиÑикаÑÑ** **ÑвÑÐ·Ð°Ð½Ñ Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼ домена**, а не Ñ IPâадÑеÑом.
-Так ÑÑо пÑи обновлении ÑеÑÑиÑикаÑов пÑогÑамма должна **подÑвеÑдиÑÑ** ÑенÑÑÑ ÑеÑÑиÑикаÑии (Let's Encrypt), ÑÑо обновление запÑоÑил **"владелеÑ", коÑоÑÑй конÑÑолиÑÑÐµÑ ÑÑÐ¾Ñ Ð´Ð¾Ð¼ÐµÐ½**.
+ÐоÑÑомÑ, ÑÑÐ¾Ð±Ñ Ð¿ÑодлиÑÑ ÑеÑÑиÑикаÑÑ, пÑогÑамма пÑÐ¾Ð´Ð»ÐµÐ½Ð¸Ñ Ð´Ð¾Ð»Ð¶Ð½Ð° **доказаÑÑ** ÑдоÑÑовеÑÑÑÑÐµÐ¼Ñ ÑенÑÑÑ (Let's Encrypt), ÑÑо она дейÑÑвиÑелÑно **«владееÑ» и конÑÑолиÑÑÐµÑ ÑÑÐ¾Ñ Ð´Ð¾Ð¼ÐµÐ½**.
-ÐÑÑÑ Ð½ÐµÑколÑко пÑÑей оÑÑÑеÑÑÐ²Ð»ÐµÐ½Ð¸Ñ ÑÑого. СамÑе попÑлÑÑнÑе из ниÑ
:
+ÐÐ»Ñ ÑÑого, ÑÑиÑÑÐ²Ð°Ñ ÑазнÑе поÑÑебноÑÑи пÑиложений, еÑÑÑ Ð½ÐµÑколÑко ÑпоÑобов. ÐопÑлÑÑнÑе из ниÑ
:
-* **Ðзменение запиÑей DNS**.
- * ÐÐ»Ñ Ñакого ваÑианÑа ÐаÑа пÑогÑамма Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð´Ð¾Ð»Ð¶Ð½Ð° ÑмеÑÑ ÑабоÑаÑÑ Ñ API DNS-пÑовайдеÑа, обÑлÑживаÑÑего ÐаÑи DNS-запиÑи. Ðе Ñ Ð²ÑеÑ
пÑовайдеÑов еÑÑÑ Ñакой API, Ñак ÑÑо ÑÑÐ¾Ñ ÑпоÑоб не вÑегда пÑименим.
-* **ÐапÑÑк в каÑеÑÑве пÑогÑаммÑ-ÑеÑвеÑа** (как минимÑм, на вÑÐµÐ¼Ñ Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ ÑеÑÑиÑикаÑов) на пÑблиÑном IP-адÑеÑе домена.
- * Ðак Ñже не Ñаз ÑпоминалоÑÑ, ÑолÑко один пÑоÑеÑÑ Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑоÑлÑÑиваÑÑ Ð¾Ð¿ÑеделÑннÑй поÑÑ Ð¾Ð¿ÑеделÑнного IP-адÑеÑа.
- * ÐÑо одна из пÑиÑин иÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¿ÑокÑи-ÑеÑвеÑа еÑÑ Ð¸ в каÑеÑÑве пÑогÑÐ°Ð¼Ð¼Ñ Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ ÑеÑÑиÑикаÑов.
- * Ð ÑлÑÑае, еÑли обновлением ÑеÑÑиÑикаÑов занимаеÑÑÑ Ð´ÑÑÐ³Ð°Ñ Ð¿ÑогÑамма, вам понадобиÑÑÑ Ð¾ÑÑановиÑÑ Ð¿ÑокÑи-ÑеÑвеÑ, запÑÑÑиÑÑ Ð¿ÑогÑÐ°Ð¼Ð¼Ñ Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ ÑеÑÑиÑикаÑов на ÑокеÑе, пÑедназнаÑенном Ð´Ð»Ñ Ð¿ÑокÑи-ÑеÑвеÑа, наÑÑÑоиÑÑ Ð¿ÑокÑи-ÑеÑÐ²ÐµÑ Ð½Ð° ÑабоÑÑ Ñ Ð½Ð¾Ð²Ñми ÑеÑÑиÑикаÑами и пеÑезапÑÑÑиÑÑ ÐµÐ³Ð¾. ÐÑа ÑÑ
ема далека Ð¾Ñ Ð¸Ð´ÐµÐ°Ð»Ñной, Ñак как ÐаÑи пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð±ÑдÑÑ Ð½ÐµÐ´Ð¾ÑÑÑÐ¿Ð½Ñ Ð½Ð° вÑÐµÐ¼Ñ Ð¾ÑклÑÑÐµÐ½Ð¸Ñ Ð¿ÑокÑи-ÑеÑвеÑа.
+* **ÐзмениÑÑ Ð½ÐµÐºÐ¾ÑоÑÑе DNSâзапиÑи**.
+ * ÐÐ»Ñ ÑÑого пÑогÑамма пÑÐ¾Ð´Ð»ÐµÐ½Ð¸Ñ Ð´Ð¾Ð»Ð¶Ð½Ð° поддеÑживаÑÑ API DNSâпÑовайдеÑа, поÑÑомÑ, в завиÑимоÑÑи Ð¾Ñ Ð¸ÑполÑзÑемого пÑовайдеÑа DNS, ÑÑÐ¾Ñ Ð²Ð°ÑÐ¸Ð°Ð½Ñ Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð´Ð¾ÑÑÑпен или неÑ.
+* **ÐапÑÑÑиÑÑÑÑ ÐºÐ°Ðº ÑеÑвеÑ** (как минимÑм на вÑÐµÐ¼Ñ Ð¿Ð¾Ð»ÑÑÐµÐ½Ð¸Ñ ÑеÑÑиÑикаÑов) на пÑблиÑном IPâадÑеÑе, ÑвÑзанном Ñ Ð´Ð¾Ð¼ÐµÐ½Ð¾Ð¼.
+ * Ðак Ñказано вÑÑе, ÑолÑко один пÑоÑеÑÑ Ð¼Ð¾Ð¶ÐµÑ ÑлÑÑаÑÑ ÐºÐ¾Ð½ÐºÑеÑнÑй IP и поÑÑ.
+ * ÐÑо одна из пÑиÑин, поÑÐµÐ¼Ñ Ð¾ÑÐµÐ½Ñ Ñдобно, когда ÑÐ¾Ñ Ð¶Ðµ пÑокÑиâÑеÑÐ²ÐµÑ TLS-ÑеÑминаÑии Ñакже занимаеÑÑÑ Ð¿ÑоÑеÑÑом пÑÐ¾Ð´Ð»ÐµÐ½Ð¸Ñ ÑеÑÑиÑикаÑов.
+ * РпÑоÑивном ÑлÑÑае вам, возможно, пÑидÑÑÑÑ Ð²Ñеменно оÑÑановиÑÑ Ð¿ÑокÑиâÑеÑÐ²ÐµÑ TLS-ÑеÑминаÑии, запÑÑÑиÑÑ Ð¿ÑогÑÐ°Ð¼Ð¼Ñ Ð¿ÑÐ¾Ð´Ð»ÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ð¿Ð¾Ð»ÑÑÐµÐ½Ð¸Ñ ÑеÑÑиÑикаÑов, заÑем наÑÑÑоиÑÑ Ð¸Ñ
в пÑокÑиâÑеÑвеÑе TLS-ÑеÑминаÑии и пеÑезапÑÑÑиÑÑ ÐµÐ³Ð¾. ÐÑо не идеалÑно, Ñак как ваÑе пÑиложение(Ñ) бÑдÑÑ Ð½ÐµÐ´Ð¾ÑÑÑпнÑ, пока пÑокÑиâÑеÑÐ²ÐµÑ TLS-ÑеÑминаÑии оÑÑановлен.
-ÐеÑÑ ÑÑÐ¾Ñ Ð¿ÑоÑеÑÑ Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ, одновÑеменнÑй Ñ Ð¾Ð±ÑлÑживанием запÑоÑов, ÑвлÑеÑÑÑ Ð¾Ð´Ð½Ð¾Ð¹ из оÑновнÑÑ
пÑиÑин, по коÑоÑой желаÑелÑно имеÑÑ **оÑделÑнÑÑ ÑиÑÑÐµÐ¼Ñ Ð´Ð»Ñ ÑабоÑÑ Ñ HTTPS** в виде пÑокÑи-ÑеÑвеÑа завеÑÑÐµÐ½Ð¸Ñ TLS, а не пÑоÑÑо иÑполÑзоваÑÑ ÑеÑÑиÑикаÑÑ TLS непоÑÑедÑÑвенно Ñ ÑеÑвеÑом пÑиложений (напÑимеÑ, Uvicorn).
+ÐеÑÑ ÑÑÐ¾Ñ Ð¿ÑоÑеÑÑ Ð¿ÑодлениÑ, ÑовмеÑÑннÑй Ñ Ð¾Ð±ÑлÑживанием пÑиложениÑ, â одна из главнÑÑ
пÑиÑин имеÑÑ **оÑделÑнÑÑ ÑиÑÑÐµÐ¼Ñ Ð´Ð»Ñ ÑабоÑÑ Ñ HTTPS** в виде пÑокÑиâÑеÑвеÑа TLS-ÑеÑминаÑии, вмеÑÑо иÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ TLSâÑеÑÑиÑикаÑов напÑÑмÑÑ Ð² ÑеÑвеÑе пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ (напÑимеÑ, Uvicorn).
-## РезÑме
+## ÐеÑеÑÑлаемÑе HTTP-заголовки пÑокÑи { #proxy-forwarded-headers }
-ÐалиÑие **HTTPS** оÑÐµÐ½Ñ Ð²Ð°Ð¶Ð½Ð¾ и доволÑно **кÑиÑиÑно** в болÑÑинÑÑве ÑлÑÑаев. Ðднако, Ðам, как ÑазÑабоÑÑикÑ, не нÑжно ÑÑаÑиÑÑ Ð¼Ð½Ð¾Ð³Ð¾ Ñил на ÑÑо, доÑÑаÑоÑно **понимаÑÑ ÑÑи конÑепÑии** и пÑинÑÐ¸Ð¿Ñ Ð¸Ñ
ÑабоÑÑ.
+Ðогда Ð²Ñ Ð¸ÑполÑзÑеÑе пÑокÑи Ð´Ð»Ñ Ð¾Ð±ÑабоÑки HTTPS, Ð²Ð°Ñ **ÑеÑÐ²ÐµÑ Ð¿ÑиложениÑ** (напÑимеÑ, Uvicorn ÑеÑез FastAPI CLI) ниÑего не Ð·Ð½Ð°ÐµÑ Ð¾ пÑоÑеÑÑе HTTPS, он обÑаеÑÑÑ Ð¾Ð±ÑÑнÑм HTTP Ñ **пÑокÑиâÑеÑвеÑом TLS-ÑеÑминаÑии**.
-Ðо Ñзнав базовÑе оÑÐ½Ð¾Ð²Ñ **HTTPS** Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе легко ÑовмеÑаÑÑ ÑазнÑе инÑÑÑÑменÑÑ, коÑоÑÑе помогÑÑ Ð²Ð°Ð¼ в далÑнейÑей ÑазÑабоÑке.
+ÐбÑÑно ÑÑÐ¾Ñ **пÑокÑи** на леÑÑ Ð´Ð¾Ð±Ð°Ð²Ð»ÑÐµÑ Ð½ÐµÐºÐ¾ÑоÑÑе HTTPâзаголовки пеÑед Ñем, как пеÑеÑлаÑÑ Ð·Ð°Ð¿ÑÐ¾Ñ Ð½Ð° **ÑеÑÐ²ÐµÑ Ð¿ÑиложениÑ**, ÑÑÐ¾Ð±Ñ ÑÐ¾Ñ Ð·Ð½Ð°Ð», ÑÑо запÑÐ¾Ñ Ð±Ñл **пÑокÑиÑован**.
-Ð ÑледÑÑÑиÑ
главаÑ
Ñ Ð¿Ð¾ÐºÐ°Ð¶Ñ Ð²Ð°Ð¼ неÑколÑко пÑимеÑов, как наÑÑÑаиваÑÑ **HTTPS** Ð´Ð»Ñ Ð¿Ñиложений **FastAPI**. ð
+/// note | ТеÑ
ниÑеÑкие деÑали
+
+Ðаголовки пÑокÑи:
+
+*
X-Forwarded-For
+*
X-Forwarded-Proto
+*
X-Forwarded-Host
+
+///
+
+Тем не менее, Ñак как **ÑеÑÐ²ÐµÑ Ð¿ÑиложениÑ** не знаеÑ, ÑÑо он наÑ
одиÑÑÑ Ð·Ð° довеÑеннÑм **пÑокÑи**, по ÑмолÑÐ°Ð½Ð¸Ñ Ð¾Ð½ не бÑÐ´ÐµÑ Ð´Ð¾Ð²ÐµÑÑÑÑ ÑÑим заголовкам.
+
+Ðо Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе наÑÑÑоиÑÑ **ÑеÑÐ²ÐµÑ Ð¿ÑиложениÑ**, ÑÑÐ¾Ð±Ñ Ð¾Ð½ довеÑÑл *пеÑеÑÑлаемÑм* заголовкам, оÑпÑавленнÑм **пÑокÑи**. ÐÑли Ð²Ñ Ð¸ÑполÑзÑеÑе FastAPI CLI, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе иÑполÑзоваÑÑ *опÑÐ¸Ñ CLI* `--forwarded-allow-ips`, ÑÑÐ¾Ð±Ñ ÑказаÑÑ, Ñ ÐºÐ°ÐºÐ¸Ñ
IPâадÑеÑов ÑледÑÐµÑ Ð´Ð¾Ð²ÐµÑÑÑÑ ÑÑим *пеÑеÑÑлаемÑм* заголовкам.
+
+ÐапÑимеÑ, еÑли **ÑеÑÐ²ÐµÑ Ð¿ÑиложениÑ** полÑÑÐ°ÐµÑ Ð·Ð°Ð¿ÑоÑÑ ÑолÑко Ð¾Ñ Ð´Ð¾Ð²ÐµÑенного **пÑокÑи**, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе ÑÑÑановиÑÑ `--forwarded-allow-ips="*"`, ÑÑÐ¾Ð±Ñ Ð´Ð¾Ð²ÐµÑÑÑÑ Ð²Ñем вÑ
одÑÑим IP, Ñак как он вÑÑ Ñавно бÑÐ´ÐµÑ Ð¿Ð¾Ð»ÑÑаÑÑ Ð·Ð°Ð¿ÑоÑÑ ÑолÑко Ñ IPâадÑеÑа, иÑполÑзÑемого **пÑокÑи**.
+
+Таким обÑазом, пÑиложение ÑÐ¼Ð¾Ð¶ÐµÑ Ð·Ð½Ð°ÑÑ Ñвой пÑблиÑнÑй URL, иÑполÑзÑÐµÑ Ð»Ð¸ оно HTTPS, какой домен и Ñ.п.
+
+ÐÑо бÑÐ´ÐµÑ Ð¿Ð¾Ð»ÐµÐ·Ð½Ð¾, напÑимеÑ, Ð´Ð»Ñ ÐºÐ¾ÑÑекÑной обÑабоÑки ÑедиÑекÑов.
+
+/// tip | СовеÑ
+
+ÐодÑобнее об ÑÑом Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе ÑзнаÑÑ Ð² докÑменÑаÑии: [Ðа пÑокÑи â ÐклÑÑиÑÑ Ð¿ÐµÑеÑÑлаемÑе заголовки пÑокÑи](../advanced/behind-a-proxy.md#enable-proxy-forwarded-headers){.internal-link target=_blank}
+
+///
+
+## РезÑме { #recap }
+
+ÐалиÑие **HTTPS** оÑÐµÐ½Ñ Ð²Ð°Ð¶Ð½Ð¾ и во многиÑ
ÑлÑÑаÑÑ
доволÑно **кÑиÑиÑно**. ÐолÑÑÐ°Ñ ÑаÑÑÑ ÑÑилий, коÑоÑÑе вам, как ÑазÑабоÑÑикÑ, нÑжно пÑиложиÑÑ Ð²Ð¾ÐºÑÑг HTTPS, â ÑÑо пÑоÑÑо **понимание ÑÑиÑ
конÑепÑий** и Ñого, как они ÑабоÑаÑÑ.
+
+ÐÐ½Ð°Ñ Ð±Ð°Ð·Ð¾Ð²ÑÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¾ **HTTPS Ð´Ð»Ñ ÑазÑабоÑÑиков**, Ð²Ñ ÑможеÑе легко комбиниÑоваÑÑ Ð¸ наÑÑÑаиваÑÑ ÑазнÑе инÑÑÑÑменÑÑ, ÑÑÐ¾Ð±Ñ ÑпÑавлÑÑÑ Ð²Ñем ÑÑим пÑоÑÑÑм ÑпоÑобом.
+
+РнекоÑоÑÑÑ
из ÑледÑÑÑиÑ
глав Ñ Ð¿Ð¾ÐºÐ°Ð¶Ñ Ð²Ð°Ð¼ неÑколÑко конкÑеÑнÑÑ
пÑимеÑов наÑÑÑойки **HTTPS** Ð´Ð»Ñ Ð¿Ñиложений **FastAPI**. ð
diff --git a/docs/ru/docs/deployment/index.md b/docs/ru/docs/deployment/index.md
index e88ddc3e2c..c85fa0d529 100644
--- a/docs/ru/docs/deployment/index.md
+++ b/docs/ru/docs/deployment/index.md
@@ -1,16 +1,16 @@
-# РазвÑÑÑÑвание
+# РазвÑÑÑÑвание { #deployment }
РазвеÑнÑÑÑ Ð¿Ñиложение **FastAPI** доволÑно пÑоÑÑо.
-## Ðа ÑÑо Ñакое ÑÑо ваÑе - "ÑазвÑÑÑÑвание"?!
+## ЧÑо ознаÑÐ°ÐµÑ ÑазвÑÑÑÑвание { #what-does-deployment-mean }
ТеÑмин **ÑазвÑÑÑÑвание** (пÑиложениÑ) ознаÑÐ°ÐµÑ Ð²Ñполнение необÑ
одимÑÑ
Ñагов, ÑÑÐ¾Ð±Ñ ÑделаÑÑ Ð¿Ñиложение **доÑÑÑпнÑм Ð´Ð»Ñ Ð¿Ð¾Ð»ÑзоваÑелей**.
-ÐбÑÑно **веб-пÑиложениÑ** ÑазмеÑаÑÑ Ð½Ð° ÑдалÑнном компÑÑÑеÑе Ñ ÑеÑвеÑной пÑогÑаммой, коÑоÑÐ°Ñ Ð¾Ð±ÐµÑпеÑÐ¸Ð²Ð°ÐµÑ Ñ
оÑоÑÑÑ Ð¿ÑоизводиÑелÑноÑÑÑ, ÑÑабилÑноÑÑÑ Ð¸ Ñ. д., ЧÑÐ¾Ð±Ñ Ð²Ð°Ñи полÑзоваÑели могли ÑÑÑекÑивно, беÑпÑеÑÑвно и беÑпÑоблемно обÑаÑаÑÑÑÑ Ðº пÑиложениÑ.
+ÐÐ»Ñ **веб-API** ÑÑо обÑÑно ознаÑÐ°ÐµÑ ÑазмеÑение его на **ÑдалÑнной маÑине** Ñ **ÑеÑвеÑной пÑогÑаммой**, обеÑпеÑиваÑÑей Ñ
оÑоÑÑÑ Ð¿ÑоизводиÑелÑноÑÑÑ, ÑÑабилÑноÑÑÑ Ð¸ Ñ.д., ÑÑÐ¾Ð±Ñ Ð²Ð°Ñи **полÑзоваÑели** могли **полÑÑаÑÑ Ð´Ð¾ÑÑÑп** к пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ ÑÑÑекÑивно и без пеÑебоев или пÑоблем.
-ÐÑо оÑлиÑаеÑÑÑ Ð¾Ñ **ÑазÑабоÑки**, когда Ð²Ñ Ð¿Ð¾ÑÑоÑнно менÑеÑе код, делаеÑе в нÑм намеÑеннÑе оÑибки и иÑпÑавлÑеÑе иÑ
, оÑÑанавливаеÑе и пеÑезапÑÑкаеÑе ÑеÑÐ²ÐµÑ ÑазÑабоÑки и Ñ. д.
+ÐÑо оÑлиÑаеÑÑÑ Ð¾Ñ ÑÑапов **ÑазÑабоÑки**, когда Ð²Ñ Ð¿Ð¾ÑÑоÑнно менÑеÑе код, ломаеÑе его и иÑпÑавлÑеÑе, оÑÑанавливаеÑе и пеÑезапÑÑкаеÑе ÑеÑÐ²ÐµÑ ÑазÑабоÑки и Ñ.д.
-## СÑÑаÑегии ÑазвÑÑÑÑваниÑ
+## СÑÑаÑегии ÑазвÑÑÑÑÐ²Ð°Ð½Ð¸Ñ { #deployment-strategies }
РзавиÑимоÑÑи Ð¾Ñ Ð²Ð°Ñего конкÑеÑного ÑлÑÑаÑ, еÑÑÑ Ð½ÐµÑколÑко ÑпоÑобов ÑделаÑÑ ÑÑо.
diff --git a/docs/ru/docs/deployment/manually.md b/docs/ru/docs/deployment/manually.md
index 9b1d32be80..37fed5780e 100644
--- a/docs/ru/docs/deployment/manually.md
+++ b/docs/ru/docs/deployment/manually.md
@@ -1,163 +1,157 @@
-# ÐапÑÑк ÑеÑвеÑа вÑÑÑнÑÑ - Uvicorn
+# ÐапÑÑк ÑеÑвеÑа вÑÑÑнÑÑ { #run-a-server-manually }
-ÐÐ»Ñ Ð·Ð°Ð¿ÑÑка пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ **FastAPI** на ÑдалÑнной ÑеÑвеÑной маÑине вам необÑ
одим пÑогÑаммнÑй ÑеÑвеÑ, поддеÑживаÑÑий пÑоÑокол ASGI, Ñакой как **Uvicorn**.
+## ÐÑполÑзÑйÑе ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ `fastapi run` { #use-the-fastapi-run-command }
-СÑÑеÑÑвÑÐµÑ ÑÑи наиболее ÑаÑпÑоÑÑÑанÑннÑе алÑÑеÑнаÑивÑ:
+ÐоÑоÑко: иÑполÑзÑйÑе `fastapi run`, ÑÑÐ¾Ð±Ñ Ð·Ð°Ð¿ÑÑÑиÑÑ Ð²Ð°Ñе пÑиложение FastAPI:
-*
Uvicorn: вÑÑокопÑоизводиÑелÑнÑй ASGI ÑеÑвеÑ.
-*
Hypercorn: ASGI ÑеÑвеÑ, помимо пÑоÑего поддеÑживаÑÑий HTTP/2 и Trio.
-*
Daphne: ASGI ÑеÑвеÑ, ÑозданнÑй Ð´Ð»Ñ Django Channels.
-
-## СеÑÐ²ÐµÑ ÐºÐ°Ðº маÑина и ÑеÑÐ²ÐµÑ ÐºÐ°Ðº пÑогÑамма
-
-Ð ÑÑиÑ
ÑеÑминаÑ
еÑÑÑ Ð½ÐµÐºÐ¾ÑоÑÑе ÑазлиÑÐ¸Ñ Ð¸ вам ÑледÑÐµÑ Ð·Ð°Ð¿Ð¾Ð¼Ð½Ð¸ÑÑ Ð¸Ñ
. ð¡
-
-Слово "**ÑеÑвеÑ**" ÑаÑе вÑего иÑполÑзÑеÑÑÑ Ð² двÑÑ
конÑекÑÑаÑ
:
+
-- ÑдалÑннÑй или ÑаÑположеннÑй в "облаке" компÑÑÑÐµÑ (ÑизиÑеÑÐºÐ°Ñ Ð¸Ð»Ð¸ виÑÑÑалÑÐ½Ð°Ñ Ð¼Ð°Ñина).
-- пÑогÑамма, запÑÑÐµÐ½Ð½Ð°Ñ Ð½Ð° Ñаком компÑÑÑеÑе (напÑимеÑ, Uvicorn).
+```console
+$
fastapi run
main.py
-ÐÑоÑÑо запомниÑе, еÑли вам вÑÑÑеÑилÑÑ ÑеÑмин "ÑеÑвеÑ", Ñо обÑÑно он подÑазÑÐ¼ÐµÐ²Ð°ÐµÑ ÑÑо-Ñо из ÑÑиÑ
двÑÑ
ÑмÑÑлов.
+
FastAPI Starting production server ð
-Ðогда имеÑÑ Ð² Ð²Ð¸Ð´Ñ Ð¸Ð¼ÐµÐ½Ð½Ð¾ ÑдалÑннÑй компÑÑÑеÑ, ÑаÑÑо говоÑÑÑ Ð¿ÑоÑÑо **ÑеÑвеÑ**, но еÑÑ ÐµÐ³Ð¾ назÑваÑÑ **маÑина**, **ÐÐ** (виÑÑÑалÑÐ½Ð°Ñ Ð¼Ð°Ñина), **нода**. ÐÑе ÑÑи ÑеÑÐ¼Ð¸Ð½Ñ Ð¾Ð±Ð¾Ð·Ð½Ð°ÑаÑÑ Ð¾Ð´Ð½Ð¾ и Ñо же - ÑдалÑннÑй компÑÑÑеÑ, обÑÑно под ÑпÑавлением Linux, на коÑоÑом Ð²Ñ Ð·Ð°Ð¿ÑÑкаеÑе пÑогÑаммÑ.
+ Searching for package file structure from directories
+ with
__init__.py files
+ Importing from
/home/user/code/awesomeapp
-## УÑÑановка пÑогÑаммного ÑеÑвеÑа
+
module ð main.py
-ÐÑ Ð¼Ð¾Ð¶ÐµÑе ÑÑÑановиÑÑ ÑеÑвеÑ, ÑовмеÑÑимÑй Ñ Ð¿ÑоÑоколом ASGI, Ñак:
+
code Importing the FastAPI app object from the module with
+ the following code:
-//// tab | Uvicorn
+
from main import app
-*
Uvicorn, оÑÐµÐ½Ñ Ð±ÑÑÑÑÑй ASGI ÑеÑвеÑ, оÑнованнÑй на библиоÑекаÑ
uvloop и httptools.
+
app Using import string:
main:app
-
+ server Server started at http://0.0.0.0:8000
+ server Documentation at http://0.0.0.0:8000/docs
-```console
-$ pip install "uvicorn[standard]"
+ Logs:
----> 100%
+ INFO Started server process [2306215]
+ INFO Waiting for application startup.
+ INFO Application startup complete.
+ INFO Uvicorn running on http://0.0.0.0:8000 (Press CTRL+C
+ to quit)
```
-/// tip | ÐодÑказка
-
-С опÑией `standard`, Uvicorn бÑÐ´ÐµÑ ÑÑÑанавливаÑÑÑÑ Ð¸ иÑполÑзоваÑÑÑÑ Ñ Ð½ÐµÐºÐ¾ÑоÑÑми дополниÑелÑнÑми ÑекомендованнÑми завиÑимоÑÑÑми.
-
-РниÑ
вÑ
Ð¾Ð´Ð¸Ñ `uvloop`, вÑÑокопÑоизводиÑелÑÐ½Ð°Ñ Ð·Ð°Ð¼ÐµÐ½Ð° `asyncio`, коÑоÑÐ°Ñ Ð·Ð½Ð°ÑиÑелÑно ÑÑкоÑÑÐµÑ ÑабоÑÑ Ð°ÑинÑ
ÑоннÑÑ
пÑогÑамм.
-
-///
-
-////
+РболÑÑинÑÑве ÑлÑÑаев ÑÑого доÑÑаÑоÑно. ð
-//// tab | Hypercorn
+ÐÑой командой, напÑимеÑ, можно запÑÑкаÑÑ Ð¿Ñиложение **FastAPI** в конÑейнеÑе, на ÑеÑвеÑе и Ñ.д.
-*
Hypercorn, ASGI ÑеÑвеÑ, поддеÑживаÑÑий пÑоÑокол HTTP/2.
+## ASGIâÑеÑвеÑÑ { #asgi-servers }
-
+ÐавайÑе немного ÑглÑбимÑÑ Ð² деÑали.
-```console
-$ pip install hypercorn
+FastAPI иÑполÑзÑÐµÑ ÑÑандаÑÑ Ð´Ð»Ñ Ð¿Ð¾ÑÑÑÐ¾ÐµÐ½Ð¸Ñ PythonâвебâÑÑеймвоÑков и ÑеÑвеÑов под названием
ASGI. FastAPI â ASGI-вебâÑÑеймвоÑк.
----> 100%
-```
+Ðлавное, ÑÑо вам нÑжно, ÑÑÐ¾Ð±Ñ Ð·Ð°Ð¿ÑÑÑиÑÑ Ð¿Ñиложение **FastAPI** (или лÑбое дÑÑгое ASGIâпÑиложение) на ÑдалÑнной ÑеÑвеÑной маÑине, â ÑÑо пÑогÑамма ASGIâÑеÑвеÑа, ÑÐ°ÐºÐ°Ñ ÐºÐ°Ðº **Uvicorn**; именно он иÑполÑзÑеÑÑÑ Ð¿Ð¾ ÑмолÑÐ°Ð½Ð¸Ñ Ð² команде `fastapi`.
-
+ÐÑÑÑ Ð½ÐµÑколÑко алÑÑеÑнаÑив, напÑимеÑ:
-...или какой-либо дÑÑгой ASGI ÑеÑвеÑ.
+*
Uvicorn: вÑÑокопÑоизводиÑелÑнÑй ASGIâÑеÑвеÑ.
+*
Hypercorn: ASGIâÑеÑвеÑ, ÑÑеди пÑоÑего ÑовмеÑÑимÑй Ñ HTTP/2 и Trio.
+*
Daphne: ASGIâÑеÑвеÑ, ÑозданнÑй Ð´Ð»Ñ Django Channels.
+*
Granian: HTTPâÑеÑÐ²ÐµÑ Ð½Ð° Rust Ð´Ð»Ñ PythonâпÑиложений.
+*
NGINX Unit: NGINX Unit â лÑÐ³ÐºÐ°Ñ Ð¸ многоÑÑнкÑионалÑÐ½Ð°Ñ ÑÑеда вÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð²ÐµÐ±âпÑиложений.
-////
+## СеÑÐ²ÐµÑ ÐºÐ°Ðº маÑина и ÑеÑÐ²ÐµÑ ÐºÐ°Ðº пÑогÑамма { #server-machine-and-server-program }
-## ÐапÑÑк ÑеÑвеÑной пÑогÑаммÑ
+ÐÑÑÑ Ð½ÐµÐ±Ð¾Ð»ÑÑой нÑÐ°Ð½Ñ Ð² ÑеÑминологии, о коÑоÑом ÑÑÐ¾Ð¸Ñ Ð¿Ð¾Ð¼Ð½Ð¸ÑÑ. ð¡
-ÐаÑем запÑÑÑиÑе ваÑе пÑиложение Ñак же, как бÑло Ñказано в ÑÑководÑÑве Ñанее, но без опÑии `--reload`:
+Слово «ÑеÑвеÑ» обÑÑно иÑполÑзÑÑÑ Ð¸ Ð´Ð»Ñ Ð¾Ð±Ð¾Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ ÑдалÑнного/облаÑного компÑÑÑеÑа (ÑизиÑеÑкой или виÑÑÑалÑной маÑинÑ), и Ð´Ð»Ñ Ð¿ÑогÑаммÑ, ÑабоÑаÑÑей на ÑÑой маÑине (напÑимеÑ, Uvicorn).
-//// tab | Uvicorn
+ÐмейÑе в видÑ, ÑÑо Ñлово «ÑеÑвеÑ» в Ñелом Ð¼Ð¾Ð¶ÐµÑ Ð¾Ð·Ð½Ð°ÑаÑÑ Ð»Ñбое из ÑÑиÑ
двÑÑ
.
-
+Ðогда ÑеÑÑ Ð¸Ð´ÑÑ Ð¾Ð± ÑдалÑнной маÑине, ÐµÑ Ð·Ð°ÑаÑÑÑÑ Ð½Ð°Ð·ÑваÑÑ **ÑеÑвеÑ**, а Ñакже **маÑина**, **VM** (виÑÑÑалÑÐ½Ð°Ñ Ð¼Ð°Ñина), **нода**. ÐÑÑ ÑÑо â ваÑианÑÑ Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ñ ÑдалÑнной маÑинÑ, обÑÑно под ÑпÑавлением Linux, на коÑоÑой Ð²Ñ Ð·Ð°Ð¿ÑÑкаеÑе пÑогÑаммÑ.
-```console
-$ uvicorn main:app --host 0.0.0.0 --port 80
+## УÑÑановка ÑеÑвеÑной пÑогÑÐ°Ð¼Ð¼Ñ { #install-the-server-program }
-INFO: Uvicorn running on http://0.0.0.0:80 (Press CTRL+C to quit)
-```
+ÐÑи ÑÑÑановке FastAPI он поÑÑавлÑеÑÑÑ Ñ Ð¿ÑодакÑнâÑеÑвеÑом Uvicorn, и Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе запÑÑÑиÑÑ ÐµÐ³Ð¾ командой `fastapi run`.
-
+Ðо Ð²Ñ Ñакже можеÑе ÑÑÑановиÑÑ ASGIâÑеÑÐ²ÐµÑ Ð²ÑÑÑнÑÑ.
-////
+СоздайÑе [виÑÑÑалÑное окÑÑжение](../virtual-environments.md){.internal-link target=_blank}, акÑивиÑÑйÑе его и заÑем ÑÑÑановиÑе ÑеÑвеÑное пÑиложение.
-//// tab | Hypercorn
+ÐапÑимеÑ, ÑÑÐ¾Ð±Ñ ÑÑÑановиÑÑ Uvicorn:
```console
-$ hypercorn main:app --bind 0.0.0.0:80
+$ pip install "uvicorn[standard]"
-Running on 0.0.0.0:8080 over http (CTRL + C to quit)
+---> 100%
```
-////
+ÐналогиÑно ÑÑÑанавливаÑÑÑÑ Ð¸ дÑÑгие ASGIâÑеÑвеÑÑ.
-/// warning | ÐÑедÑпÑеждение
+/// tip | СовеÑ
-Ðе забÑдÑÑе ÑдалиÑÑ Ð¾Ð¿ÑÐ¸Ñ `--reload`, еÑли Ñанее полÑзовалиÑÑ ÐµÑ.
+С добавлением `standard` Uvicorn ÑÑÑÐ°Ð½Ð¾Ð²Ð¸Ñ Ð¸ бÑÐ´ÐµÑ Ð¸ÑполÑзоваÑÑ ÑÑд ÑекомендованнÑÑ
дополниÑелÑнÑÑ
завиÑимоÑÑей.
-ÐклÑÑение опÑии `--reload` ÑÑебÑÐµÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑÑ
ÑеÑÑÑÑов, влиÑÐµÑ Ð½Ð° ÑÑабилÑноÑÑÑ ÑабоÑÑ Ð¿ÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¸ Ð¼Ð¾Ð¶ÐµÑ Ð¿Ð¾Ð²Ð»ÐµÑÑ Ð¿ÑоÑие непÑиÑÑноÑÑи.
+РиÑ
ÑиÑле `uvloop` â вÑÑокопÑоизводиÑелÑÐ½Ð°Ñ Ð·Ð°Ð¼ÐµÐ½Ð° `asyncio`, даÑÑÐ°Ñ ÑеÑÑÑзнÑй пÑиÑоÑÑ Ð¿ÑоизводиÑелÑноÑÑи пÑи паÑаллелÑной ÑабоÑе.
-Ðна ÑилÑно Ð¿Ð¾Ð¼Ð¾Ð³Ð°ÐµÑ Ð²Ð¾ вÑÐµÐ¼Ñ **ÑазÑабоÑки**, но **не ÑледÑеÑ** иÑполÑзоваÑÑ ÐµÑ Ð¿Ñи **ÑеалÑной ÑабоÑе** пÑиложениÑ.
+ÐÑли Ð²Ñ ÑÑÑанавливаеÑе FastAPI, напÑÐ¸Ð¼ÐµÑ Ñак: `pip install "fastapi[standard]"`, Ð²Ñ Ñже полÑÑаеÑе и `uvicorn[standard]`.
///
-## Hypercorn Ñ Trio
-
-Starlette и **FastAPI** оÑÐ½Ð¾Ð²Ð°Ð½Ñ Ð½Ð°
AnyIO, коÑоÑÐ°Ñ Ð´ÐµÐ»Ð°ÐµÑ Ð¸Ñ
ÑовмеÑÑимÑми как Ñ
asyncio - ÑÑандаÑÑной библиоÑекой Python, Ñак и Ñ
Trio.
-
+## ÐапÑÑк ÑеÑвеÑной пÑогÑÐ°Ð¼Ð¼Ñ { #run-the-server-program }
-Тем не менее Uvicorn ÑовмеÑÑим ÑолÑко Ñ asyncio и обÑÑно иÑполÑзÑеÑÑÑ ÑовмеÑÑно Ñ
`uvloop`, вÑÑокопÑоизводиÑелÑной заменой `asyncio`.
-
-Ðо еÑли Ð²Ñ Ñ
оÑиÑе иÑполÑзоваÑÑ **Trio** напÑÑмÑÑ, Ñо можеÑе воÑполÑзоваÑÑÑÑ **Hypercorn**, Ñак как они ÑовмеÑÑимÑ. â¨
-
-### УÑÑановка Hypercorn Ñ Trio
-
-ÐÐ»Ñ Ð½Ð°Ñала, вам нÑжно ÑÑÑановиÑÑ Hypercorn Ñ Ð¿Ð¾Ð´Ð´ÐµÑжкой Trio:
+ÐÑли Ð²Ñ ÑÑÑановили ASGIâÑеÑÐ²ÐµÑ Ð²ÑÑÑнÑÑ, обÑÑно нÑжно пеÑедаÑÑ ÑÑÑÐ¾ÐºÑ Ð¸Ð¼Ð¿Ð¾ÑÑа в ÑпеÑиалÑном ÑоÑмаÑе, ÑÑÐ¾Ð±Ñ Ð¾Ð½ Ñмог импоÑÑиÑоваÑÑ Ð²Ð°Ñе пÑиложение FastAPI:
```console
-$ pip install "hypercorn[trio]"
----> 100%
+$ uvicorn main:app --host 0.0.0.0 --port 80
+
+INFO: Uvicorn running on http://0.0.0.0:80 (Press CTRL+C to quit)
```
-### ÐапÑÑк Ñ Trio
+/// note | ÐÑимеÑание
-Ðалее запÑÑÑиÑе Hypercorn Ñ Ð¾Ð¿Ñией `--worker-class` и аÑгÑменÑом `trio`:
+Ðоманда `uvicorn main:app` ознаÑаеÑ:
-
+* `main`: Ñайл `main.py` (Pythonâ«модÑлÑ»).
+* `app`: обÑекÑ, ÑозданнÑй в `main.py` ÑÑÑокой `app = FastAPI()`.
-```console
-$ hypercorn main:app --worker-class trio
+ÐквиваленÑно:
+
+```Python
+from main import app
```
-
+///
-Hypercorn, в ÑÐ²Ð¾Ñ Ð¾ÑеÑедÑ, запÑÑÑÐ¸Ñ Ð²Ð°Ñе пÑиложение иÑполÑзÑÑÑее Trio.
+У каждого алÑÑеÑнаÑивного ASGIâÑеÑвеÑа бÑÐ´ÐµÑ Ð¿Ð¾Ñ
Ð¾Ð¶Ð°Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð°; подÑобнее Ñм. в иÑ
докÑменÑаÑии.
-Таким обÑазом, Ð²Ñ ÑможеÑе иÑполÑзоваÑÑ Trio в ÑвоÑм пÑиложении. Ðо лÑÑÑе иÑполÑзоваÑÑ AnyIO, Ð´Ð»Ñ ÑоÑ
ÑÐ°Ð½ÐµÐ½Ð¸Ñ ÑовмеÑÑимоÑÑи и Ñ Trio, и Ñ asyncio. ð
+/// warning | ÐÑедÑпÑеждение
+
+Uvicorn и дÑÑгие ÑеÑвеÑÑ Ð¿Ð¾Ð´Ð´ÐµÑживаÑÑ Ð¾Ð¿ÑÐ¸Ñ `--reload`, полезнÑÑ Ð² пеÑиод ÑазÑабоÑки.
+
+ÐпÑÐ¸Ñ `--reload` поÑÑеблÑÐµÑ Ð·Ð½Ð°ÑиÑелÑно болÑÑе ÑеÑÑÑÑов, менее ÑÑабилÑна и Ñ.п.
+
+Ðна ÑилÑно Ð¿Ð¾Ð¼Ð¾Ð³Ð°ÐµÑ Ð²Ð¾ вÑÐµÐ¼Ñ **ÑазÑабоÑки**, но в **пÑодакÑн** ÐµÑ Ð¸ÑполÑзоваÑÑ **не ÑледÑеÑ**.
+
+///
-## ÐонÑепÑии ÑазвÑÑÑÑваниÑ
+## ÐонÑепÑии ÑазвÑÑÑÑÐ²Ð°Ð½Ð¸Ñ { #deployment-concepts }
-РвÑÑепÑиведÑннÑÑ
пÑимеÑаÑ
ÑеÑвеÑнÑе пÑогÑÐ°Ð¼Ð¼Ñ (напÑÐ¸Ð¼ÐµÑ Uvicorn) запÑÑкали ÑолÑко **один пÑоÑеÑÑ**, пÑинимаÑÑий вÑ
одÑÑие запÑоÑÑ Ñ Ð»Ñбого IP (на ÑÑо ÑказÑвал аÑгÑÐ¼ÐµÐ½Ñ `0.0.0.0`) на опÑеделÑннÑй поÑÑ (в пÑимеÑаÑ
Ð¼Ñ ÑказÑвали поÑÑ `80`).
+Ð ÑÑиÑ
пÑимеÑаÑ
ÑеÑвеÑÐ½Ð°Ñ Ð¿ÑогÑамма (напÑимеÑ, Uvicorn) запÑÑÐºÐ°ÐµÑ **один пÑоÑеÑÑ**, ÑлÑÑаÑÑий вÑе IPâадÑеÑа (`0.0.0.0`) на заÑанее заданном поÑÑÑ (напÑимеÑ, `80`).
-ÐÑо оÑÐ½Ð¾Ð²Ð½Ð°Ñ Ð¸Ð´ÐµÑ. Ðо возможно, Ð²Ñ Ð¾Ð·Ð°Ð±Ð¾ÑиÑеÑÑ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸ÐµÐ¼ дополниÑелÑнÑÑ
возможноÑÑей, ÑакиÑ
как:
+ÐÑо Ð±Ð°Ð·Ð¾Ð²Ð°Ñ Ð¸Ð´ÐµÑ. Ðо, веÑоÑÑно, вам понадобиÑÑÑ Ð¿Ð¾Ð·Ð°Ð±Ð¾ÑиÑÑÑÑ Ð¸ о некоÑоÑÑÑ
дополниÑелÑнÑÑ
веÑаÑ
, напÑимеÑ:
-* ÐÑполÑзование более безопаÑного пÑоÑокола HTTPS
-* ÐаÑÑÑойки запÑÑка пÑиложениÑ
-* ÐеÑезагÑÑзка пÑиложениÑ
-* ÐапÑÑк неÑколÑкиÑ
ÑкземплÑÑов пÑиложениÑ
-* УпÑавление памÑÑÑÑ
-* ÐÑполÑзование пеÑеÑиÑленнÑÑ
ÑÑнкÑий пеÑед запÑÑком пÑиложениÑ.
+* ÐезопаÑноÑÑÑ â HTTPS
+* ÐапÑÑк пÑи ÑÑаÑÑе ÑиÑÑемÑ
+* ÐеÑезапÑÑки
+* РепликаÑÐ¸Ñ (колиÑеÑÑво запÑÑеннÑÑ
пÑоÑеÑÑов)
+* ÐамÑÑÑ
+* ÐÑедваÑиÑелÑнÑе Ñаги пеÑед запÑÑком
-Я ÑаÑÑÐºÐ°Ð¶Ñ Ð²Ð°Ð¼ болÑÑе о каждой из ÑÑиÑ
конÑепÑий в ÑледÑÑÑиÑ
главаÑ
, Ñ ÐºÐ¾Ð½ÐºÑеÑнÑми пÑимеÑами ÑÑÑаÑегий ÑабоÑÑ Ñ Ð½Ð¸Ð¼Ð¸. ð
+Ð ÑледÑÑÑиÑ
главаÑ
Ñ ÑаÑÑÐºÐ°Ð¶Ñ Ð¿Ð¾Ð´Ñобнее пÑо каждÑÑ Ð¸Ð· ÑÑиÑ
конÑепÑий, о Ñом, как о ниÑ
дÑмаÑÑ, и пÑÐ¸Ð²ÐµÐ´Ñ ÐºÐ¾Ð½ÐºÑеÑнÑе пÑимеÑÑ Ñо ÑÑÑаÑегиÑми, как Ñ Ð½Ð¸Ð¼Ð¸ ÑабоÑаÑÑ. ð
diff --git a/docs/ru/docs/deployment/versions.md b/docs/ru/docs/deployment/versions.md
index e8db30ce89..58d5aa110d 100644
--- a/docs/ru/docs/deployment/versions.md
+++ b/docs/ru/docs/deployment/versions.md
@@ -1,42 +1,42 @@
-# РвеÑÑиÑÑ
FastAPI
+# РвеÑÑиÑÑ
FastAPI { #about-fastapi-versions }
-**FastAPI** Ñже иÑполÑзÑеÑÑÑ Ð² пÑодакÑене во многиÑ
пÑиложениÑÑ
и ÑиÑÑемаÑ
. ÐокÑÑÑие ÑеÑÑами поддеÑживаеÑÑÑ Ð½Ð° ÑÑовне 100%. Ðднако его ÑазÑабоÑка вÑе еÑе пÑодолжаеÑÑÑ.
+**FastAPI** Ñже иÑполÑзÑеÑÑÑ Ð² пÑодакÑене во многиÑ
пÑиложениÑÑ
и ÑиÑÑемаÑ
. ÐокÑÑÑие ÑеÑÑами поддеÑживаеÑÑÑ Ð½Ð° ÑÑовне 100%. Ðо его ÑазÑабоÑка вÑÑ ÐµÑÑ Ð´Ð²Ð¸Ð¶ÐµÑÑÑ Ð±ÑÑÑÑÑми Ñемпами.
ЧаÑÑо добавлÑÑÑÑÑ Ð½Ð¾Ð²Ñе ÑÑнкÑии, ÑегÑлÑÑно иÑпÑавлÑÑÑÑÑ Ð±Ð°Ð³Ð¸, код пÑÐ¾Ð´Ð¾Ð»Ð¶Ð°ÐµÑ Ð¿Ð¾ÑÑоÑнно ÑовеÑÑенÑÑвоваÑÑÑÑ.
-Ðо ÑказаннÑм пÑиÑинам ÑекÑÑие веÑÑии до ÑиÑ
Ð¿Ð¾Ñ `0.x.x`. ÐÑо говоÑÐ¸Ñ Ð¾ Ñом, ÑÑо ÐºÐ°Ð¶Ð´Ð°Ñ Ð²ÐµÑÑÐ¸Ñ Ð¼Ð¾Ð¶ÐµÑ ÑодеÑжаÑÑ Ð¾Ð±ÑаÑно неÑовмеÑÑимÑе изменениÑ, ÑледÑÑ
ÑоглаÑÐµÐ½Ð¸Ñ Ð¾ СеманÑиÑеÑком ÐеÑÑиониÑовании.
+Ðо ÑказаннÑм пÑиÑинам ÑекÑÑие веÑÑии до ÑиÑ
Ð¿Ð¾Ñ `0.x.x`. ÐÑо говоÑÐ¸Ñ Ð¾ Ñом, ÑÑо ÐºÐ°Ð¶Ð´Ð°Ñ Ð²ÐµÑÑÐ¸Ñ Ð¼Ð¾Ð¶ÐµÑ ÑодеÑжаÑÑ Ð¾Ð±ÑаÑно неÑовмеÑÑимÑе изменениÑ, ÑледÑÑ
СеманÑиÑеÑÐºÐ¾Ð¼Ñ Ð²ÐµÑÑиониÑованиÑ.
-Уже ÑейÑÐ°Ñ Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе ÑоздаваÑÑ Ð¿ÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð² пÑодакÑене, иÑполÑзÑÑ **FastAPI** (и ÑкоÑее вÑего Ñак и делаеÑе), главное ÑбедиÑÑÑÑ Ð² Ñом, ÑÑо Ð²Ñ Ð¸ÑполÑзÑеÑе веÑÑиÑ, коÑоÑÐ°Ñ ÐºÐ¾ÑÑекÑно ÑабоÑÐ°ÐµÑ Ñ Ð²Ð°Ñим кодом.
+Уже ÑейÑÐ°Ñ Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе ÑоздаваÑÑ Ð¿ÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð² пÑодакÑене, иÑполÑзÑÑ **FastAPI** (и ÑкоÑее вÑего Ñак и делаеÑе), главное ÑбедиÑÑÑÑ Ð² Ñом, ÑÑо Ð²Ñ Ð¸ÑполÑзÑеÑе веÑÑиÑ, коÑоÑÐ°Ñ ÐºÐ¾ÑÑекÑно ÑабоÑÐ°ÐµÑ Ñ Ð²Ð°Ñим кодом.
-## ÐакÑепиÑе ваÑÑ Ð²ÐµÑÑÐ¸Ñ `fastapi`
+## ÐакÑепиÑе ваÑÑ Ð²ÐµÑÑÐ¸Ñ `fastapi` { #pin-your-fastapi-version }
ÐеÑвÑм делом вам ÑледÑÐµÑ "закÑепиÑÑ" конкÑеÑнÑÑ Ð¿Ð¾ÑледнÑÑ Ð¸ÑполÑзÑемÑÑ Ð²ÐµÑÑÐ¸Ñ **FastAPI**, коÑоÑÐ°Ñ ÐºÐ¾ÑÑекÑно ÑабоÑÐ°ÐµÑ Ñ Ð²Ð°Ñим пÑиложением.
-ÐапÑимеÑ, в ÑвоÑм пÑиложении Ð²Ñ Ð¸ÑполÑзÑеÑе веÑÑÐ¸Ñ `0.45.0`.
+ÐапÑимеÑ, в ÑвоÑм пÑиложении Ð²Ñ Ð¸ÑполÑзÑеÑе веÑÑÐ¸Ñ `0.112.0`.
ÐÑли Ð²Ñ Ð¸ÑполÑзÑеÑе Ñайл `requirements.txt`, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе ÑказаÑÑ Ð²ÐµÑÑÐ¸Ñ ÑледÑÑÑим ÑпоÑобом:
```txt
-fastapi==0.45.0
+fastapi[standard]==0.112.0
```
-ÑÑо ознаÑаеÑ, ÑÑо Ð²Ñ Ð±ÑдеÑе иÑполÑзоваÑÑ Ð¸Ð¼ÐµÐ½Ð½Ð¾ веÑÑÐ¸Ñ `0.45.0`.
+ÑÑо ознаÑаеÑ, ÑÑо Ð²Ñ Ð±ÑдеÑе иÑполÑзоваÑÑ Ð¸Ð¼ÐµÐ½Ð½Ð¾ веÑÑÐ¸Ñ `0.112.0`.
Ðли Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе закÑепиÑÑ Ð²ÐµÑÑÐ¸Ñ ÑледÑÑÑим ÑпоÑобом:
```txt
-fastapi>=0.45.0,<0.46.0
+fastapi[standard]>=0.112.0,<0.113.0
```
-ÑÑо знаÑиÑ, ÑÑо Ð²Ñ Ð¸ÑполÑзÑеÑе веÑÑии `0.45.0` или вÑÑе, но менÑÑе Ñем `0.46.0`. ÐапÑимеÑ, веÑÑÐ¸Ñ `0.45.2` вÑе еÑе бÑÐ´ÐµÑ Ð¿Ð¾Ð´Ñ
одиÑÑ.
+ÑÑо знаÑиÑ, ÑÑо Ð²Ñ Ð¸ÑполÑзÑеÑе веÑÑии `0.112.0` или вÑÑе, но менÑÑе Ñем `0.113.0`. ÐапÑимеÑ, веÑÑÐ¸Ñ `0.112.2` вÑÑ ÐµÑÑ Ð±ÑÐ´ÐµÑ Ð¿Ð¾Ð´Ñ
одиÑÑ.
-ÐÑли Ð²Ñ Ð¸ÑполÑзÑеÑе лÑбой дÑÑгой инÑÑÑÑÐ¼ÐµÐ½Ñ Ð´Ð»Ñ ÑпÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð·Ð°Ð²Ð¸ÑимоÑÑÑми, напÑÐ¸Ð¼ÐµÑ Poetry, Pipenv или дÑ., Ñ Ð½Ð¸Ñ
Ñ Ð²ÑеÑ
имееÑÑÑ ÑпоÑоб опÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ ÑпеÑиÑиÑеÑкой веÑÑии Ð´Ð»Ñ Ð²Ð°ÑиÑ
пакеÑов.
+ÐÑли Ð²Ñ Ð¸ÑполÑзÑеÑе лÑбой дÑÑгой инÑÑÑÑÐ¼ÐµÐ½Ñ Ð´Ð»Ñ ÑпÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ ÑÑÑановками/завиÑимоÑÑÑми, напÑÐ¸Ð¼ÐµÑ `uv`, Poetry, Pipenv или дÑ., Ñ Ð½Ð¸Ñ
Ñ Ð²ÑеÑ
имееÑÑÑ ÑпоÑоб опÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ ÑпеÑиÑиÑеÑкой веÑÑии Ð´Ð»Ñ Ð²Ð°ÑиÑ
пакеÑов.
-## ÐоÑÑÑпнÑе веÑÑии
+## ÐоÑÑÑпнÑе веÑÑии { #available-versions }
-ÐÑ Ð¼Ð¾Ð¶ÐµÑе поÑмоÑÑеÑÑ Ð´Ð¾ÑÑÑпнÑе веÑÑии (напÑимеÑ, пÑовеÑиÑÑ Ð¿Ð¾ÑледнÑÑ Ð½Ð° даннÑй моменÑ) в [пÑимеÑаниÑÑ
к вÑпÑÑкÑ](../release-notes.md){.internal-link target=_blank}.
+ÐÑ Ð¼Ð¾Ð¶ÐµÑе поÑмоÑÑеÑÑ Ð´Ð¾ÑÑÑпнÑе веÑÑии (напÑимеÑ, пÑовеÑиÑÑ Ð¿Ð¾ÑледнÑÑ Ð½Ð° даннÑй моменÑ) в [ÐÑимеÑаниÑÑ
к вÑпÑÑкÑ](../release-notes.md){.internal-link target=_blank}.
-## РвеÑÑиÑÑ
+## РвеÑÑиÑÑ
{ #about-versions }
СледÑÑ ÑоглаÑÐµÐ½Ð¸Ñ Ð¾ СеманÑиÑеÑком ÐеÑÑиониÑовании, лÑбÑе веÑÑии ниже `1.0.0` поÑенÑиалÑно могÑÑ Ð´Ð¾Ð±Ð°Ð²Ð¸ÑÑ Ð¾Ð±ÑаÑно неÑовмеÑÑимÑе изменениÑ.
@@ -44,7 +44,7 @@ FastAPI ÑледÑÐµÑ ÑоглаÑÐµÐ½Ð¸Ñ Ð² Ñом, ÑÑо лÑбÑе изм
/// tip | ÐодÑказка
-"ÐÐТЧ" - ÑÑо поÑледнее ÑиÑло. ÐапÑимеÑ, в `0.2.3`, ÐÐТЧ-веÑÑÐ¸Ñ - ÑÑо `3`.
+"ÐÐТЧ" â ÑÑо поÑледнее ÑиÑло. ÐапÑимеÑ, в `0.2.3`, ÐÐТЧ-веÑÑÐ¸Ñ â ÑÑо `3`.
///
@@ -58,11 +58,11 @@ fastapi>=0.45.0,<0.46.0
/// tip | ÐодÑказка
-"ÐÐÐÐÐ ÐÐЯ" веÑÑÐ¸Ñ - ÑÑо ÑиÑло в ÑеÑедине. ÐапÑимеÑ, в `0.2.3` ÐÐÐÐÐ ÐÐЯ веÑÑÐ¸Ñ - ÑÑо `2`.
+"ÐÐÐÐÐ ÐÐЯ" веÑÑÐ¸Ñ â ÑÑо ÑиÑло в ÑеÑедине. ÐапÑимеÑ, в `0.2.3` ÐÐÐÐÐ ÐÐЯ веÑÑÐ¸Ñ â ÑÑо `2`.
///
-## Ðбновление веÑÑий FastAPI
+## Ðбновление веÑÑий FastAPI { #upgrading-the-fastapi-versions }
Ðам ÑледÑÐµÑ Ð´Ð¾Ð±Ð°Ð²Ð¸ÑÑ ÑеÑÑÑ Ð´Ð»Ñ Ð²Ð°Ñего пÑиложениÑ.
@@ -70,9 +70,9 @@ fastapi>=0.45.0,<0.46.0
ÐоÑле ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ ÑеÑÑов Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе обновиÑÑ ÑÐ²Ð¾Ñ Ð²ÐµÑÑÐ¸Ñ **FastAPI** до более новой. ÐоÑле ÑÑого ÑледÑÐµÑ ÑбедиÑÑÑÑ, ÑÑо Ð²Ð°Ñ ÐºÐ¾Ð´ ÑабоÑÐ°ÐµÑ ÐºÐ¾ÑÑекÑно, запÑÑÑив ÑеÑÑÑ.
-ÐÑли вÑе ÑабоÑÐ°ÐµÑ ÐºÐ¾ÑÑекÑно, или поÑле внеÑÐµÐ½Ð¸Ñ Ð½ÐµÐ¾Ð±Ñ
одимÑÑ
изменений вÑе ваÑи ÑеÑÑÑ Ð¿ÑоÑ
одÑÑ, ÑолÑко Ñогда Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе закÑепиÑÑ Ð²Ð°ÑÑ Ð½Ð¾Ð²ÑÑ Ð²ÐµÑÑÐ¸Ñ `fastapi`.
+ÐÑли вÑÑ ÑабоÑÐ°ÐµÑ ÐºÐ¾ÑÑекÑно, или поÑле внеÑÐµÐ½Ð¸Ñ Ð½ÐµÐ¾Ð±Ñ
одимÑÑ
изменений вÑе ваÑи ÑеÑÑÑ Ð¿ÑоÑ
одÑÑ, ÑолÑко Ñогда Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе закÑепиÑÑ Ð²Ð°ÑÑ Ð½Ð¾Ð²ÑÑ Ð²ÐµÑÑÐ¸Ñ `fastapi`.
-## Ð Starlette
+## Ð Starlette { #about-starlette }
Ðе ÑледÑÐµÑ Ð·Ð°ÐºÑеплÑÑÑ Ð²ÐµÑÑÐ¸Ñ `starlette`.
@@ -80,14 +80,14 @@ fastapi>=0.45.0,<0.46.0
Так ÑÑо ÑеÑение об иÑполÑзÑемой веÑÑии Starlette, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе оÑÑавиÑÑ **FastAPI**.
-## Ð Pydantic
+## Ð Pydantic { #about-pydantic }
Pydantic вклÑÑÐ°ÐµÑ Ñвои ÑобÑÑвеннÑе ÑеÑÑÑ Ð´Ð»Ñ **FastAPI**, Ñак ÑÑо новÑе веÑÑии Pydantic (вÑÑе `1.0.0`) вÑегда ÑовмеÑÑÐ¸Ð¼Ñ Ñ FastAPI.
-ÐÑ Ð¼Ð¾Ð¶ÐµÑе закÑепиÑÑ Ð»ÑбÑÑ Ð²ÐµÑÑÐ¸Ñ Pydantic, коÑоÑÐ°Ñ Ð²Ð°Ð¼ подÑ
одиÑ, вÑÑе `1.0.0` и ниже `2.0.0`.
+ÐÑ Ð¼Ð¾Ð¶ÐµÑе закÑепиÑÑ Ð»ÑбÑÑ Ð²ÐµÑÑÐ¸Ñ Pydantic, коÑоÑÐ°Ñ Ð²Ð°Ð¼ подÑ
одиÑ, вÑÑе `1.0.0`.
ÐапÑимеÑ:
```txt
-pydantic>=1.2.0,<2.0.0
+pydantic>=2.7.0,<3.0.0
```
diff --git a/docs/ru/docs/environment-variables.md b/docs/ru/docs/environment-variables.md
index a6c7b0c77a..6291b79d26 100644
--- a/docs/ru/docs/environment-variables.md
+++ b/docs/ru/docs/environment-variables.md
@@ -1,6 +1,6 @@
-# ÐеÑеменнÑе окÑÑжениÑ
+# ÐеÑеменнÑе окÑÑÐ¶ÐµÐ½Ð¸Ñ { #environment-variables }
-/// tip
+/// tip | СовеÑ
ÐÑли Ð²Ñ Ñже знаеÑе, ÑÑо Ñакое «пеÑеменнÑе окÑÑжениÑ» и как иÑ
иÑполÑзоваÑÑ, можеÑе пÑопÑÑÑиÑÑ ÑÑо.
@@ -10,7 +10,7 @@
ÐеÑеменнÑе окÑÑÐ¶ÐµÐ½Ð¸Ñ Ð¼Ð¾Ð³ÑÑ Ð±ÑÑÑ Ð¿Ð¾Ð»ÐµÐ·Ð½Ñ Ð´Ð»Ñ ÑабоÑÑ Ñ **наÑÑÑойками** пÑиложений, как ÑаÑÑÑ **ÑÑÑановки** Python и Ñ.д.
-## Создание и иÑполÑзование пеÑеменнÑÑ
окÑÑжениÑ
+## Создание и иÑполÑзование пеÑеменнÑÑ
окÑÑÐ¶ÐµÐ½Ð¸Ñ { #create-and-use-env-vars }
Ðожно **ÑоздаваÑÑ** и иÑполÑзоваÑÑ Ð¿ÐµÑеменнÑе окÑÑÐ¶ÐµÐ½Ð¸Ñ Ð² **оболоÑке (ÑеÑминале)**, не пÑÐ¸Ð±ÐµÐ³Ð°Ñ Ðº помоÑи Python:
@@ -50,7 +50,7 @@ Hello Wade Wilson
////
-## ЧÑение пеÑеменнÑÑ
окÑÑÐ¶ÐµÐ½Ð¸Ñ Ð² python
+## ЧÑение пеÑеменнÑÑ
окÑÑÐ¶ÐµÐ½Ð¸Ñ Ð² python { #read-env-vars-in-python }
Так же ÑÑÑеÑÑвÑÐµÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑÑ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¿ÐµÑеменнÑÑ
окÑÑÐ¶ÐµÐ½Ð¸Ñ **вне** Python, в ÑеÑминале (или лÑбÑм дÑÑгим ÑпоÑобом), а заÑем **ÑÑÐµÐ½Ð¸Ñ Ð¸Ñ
в Python**.
@@ -63,11 +63,12 @@ name = os.getenv("MY_NAME", "World")
print(f"Hello {name} from Python")
```
-/// tip
+/// tip | СовеÑ
-ÐÑоÑой аÑгÑменÑ
`os.getenv()` - ÑÑо возвÑаÑаемое по ÑмолÑÐ°Ð½Ð¸Ñ Ð·Ð½Ð°Ñение.
+ÐÑоÑой аÑгÑменÑ
`os.getenv()` - ÑÑо возвÑаÑаемое по ÑмолÑÐ°Ð½Ð¸Ñ Ð·Ð½Ð°Ñение.
ÐÑли знаÑение не Ñказано, Ñо по ÑмолÑÐ°Ð½Ð¸Ñ Ð¾Ð½Ð¾ Ñавно `None`. Рданном ÑлÑÑае Ð¼Ñ ÑказÑваем `«World»` в каÑеÑÑве знаÑÐµÐ½Ð¸Ñ Ð¿Ð¾ ÑмолÑаниÑ.
+
///
ÐаÑем можно запÑÑÑиÑÑ ÑÑÑ Ð¿ÑогÑÐ°Ð¼Ð¼Ñ Ð½Ð° Python:
@@ -150,13 +151,13 @@ Hello World from Python
-/// tip
+/// tip | СовеÑ
ÐодÑобнее об ÑÑом можно пÑоÑиÑаÑÑ Ð½Ð° ÑайÑе
The Twelve-Factor App: Config.
///
-## ТипизаÑÐ¸Ñ Ð¸ ÐалидаÑиÑ
+## ТипизаÑÐ¸Ñ Ð¸ ÐалидаÑÐ¸Ñ { #types-and-validation }
ÐÑи пеÑеменнÑе окÑÑÐ¶ÐµÐ½Ð¸Ñ Ð¼Ð¾Ð³ÑÑ ÑабоÑаÑÑ ÑолÑко Ñ **ÑекÑÑовÑми ÑÑÑоками**, поÑколÑÐºÑ Ð¾Ð½Ð¸ ÑвлÑÑÑÑÑ Ð²Ð½ÐµÑними по оÑноÑÐµÐ½Ð¸Ñ Ðº Python и Ð´Ð¾Ð»Ð¶Ð½Ñ Ð±ÑÑÑ ÑовмеÑÑÐ¸Ð¼Ñ Ñ Ð´ÑÑгими пÑогÑаммами и оÑÑалÑной ÑиÑÑемой (и даже Ñ ÑазлиÑнÑми опеÑаÑионнÑми ÑиÑÑемами, Ñакими как Linux, Windows, macOS).
@@ -164,7 +165,7 @@ Hello World from Python
ÐодÑобнее об иÑполÑзовании пеÑеменнÑÑ
окÑÑÐ¶ÐµÐ½Ð¸Ñ Ð´Ð»Ñ ÑабоÑÑ Ñ **наÑÑÑойками пÑиложениÑ** Ð²Ñ ÑзнаеÑе в [РаÑÑиÑенное ÑÑководÑÑво полÑзоваÑÐµÐ»Ñ - ÐаÑÑÑойки и пеÑеменнÑе ÑÑедÑ](./advanced/settings.md){.internal-link target=_blank}.
-## ÐеÑÐµÐ¼ÐµÐ½Ð½Ð°Ñ Ð¾ÐºÑÑÐ¶ÐµÐ½Ð¸Ñ `PATH`
+## ÐеÑÐµÐ¼ÐµÐ½Ð½Ð°Ñ Ð¾ÐºÑÑÐ¶ÐµÐ½Ð¸Ñ `PATH` { #path-environment-variable }
СÑÑеÑÑвÑÐµÑ **ÑпеÑиалÑнаÑ** пеÑÐµÐ¼ÐµÐ½Ð½Ð°Ñ Ð¾ÐºÑÑÐ¶ÐµÐ½Ð¸Ñ **`PATH`**, коÑоÑÐ°Ñ Ð¸ÑполÑзÑеÑÑÑ Ð¾Ð¿ÐµÑаÑионнÑми ÑиÑÑемами (Linux, macOS, Windows) Ð´Ð»Ñ Ð¿Ð¾Ð¸Ñка пÑогÑамм Ð´Ð»Ñ Ð·Ð°Ð¿ÑÑка.
@@ -208,7 +209,7 @@ C:\Program Files\Python312\Scripts;C:\Program Files\Python312;C:\Windows\System3
ÐÑли она ее наÑ
одиÑ, Ñо **иÑполÑзÑÐµÑ ÐµÐµ**. РпÑоÑивном ÑлÑÑае она пÑÐ¾Ð´Ð¾Ð»Ð¶Ð°ÐµÑ Ð¸ÑкаÑÑ Ð² **дÑÑгиÑ
каÑалогаÑ
**.
-### УÑÑановка Python и обновление `PATH`
+### УÑÑановка Python и обновление `PATH` { #installing-python-and-updating-the-path }
ÐÑи ÑÑÑановке Python Ð²Ð°Ñ Ð¼Ð¾Ð³ÑÑ ÑпÑоÑиÑÑ, нÑжно ли обновиÑÑ Ð¿ÐµÑеменнÑÑ Ð¾ÐºÑÑÐ¶ÐµÐ½Ð¸Ñ `PATH`.
@@ -286,7 +287,7 @@ $ C:\opt\custompython\bin\python
ÐÑа инÑоÑмаÑÐ¸Ñ Ð±ÑÐ´ÐµÑ Ð¿Ð¾Ð»ÐµÐ·Ð½Ð° пÑи изÑÑении [ÐиÑÑÑалÑнÑÑ
окÑÑжений](virtual-environments.md){.internal-link target=_blank}.
-## ÐÑвод
+## ÐÑвод { #conclusion }
ÐлагодаÑÑ ÑÑÐ¾Ð¼Ñ Ð²Ñ Ð´Ð¾Ð»Ð¶Ð½Ñ Ð¸Ð¼ÐµÑÑ Ð±Ð°Ð·Ð¾Ð²Ð¾Ðµ пÑедÑÑавление о Ñом, ÑÑо Ñакое **пеÑеменнÑе окÑÑжениÑ** и как иÑполÑзоваÑÑ Ð¸Ñ
в Python.
diff --git a/docs/ru/docs/fastapi-cli.md b/docs/ru/docs/fastapi-cli.md
index c0be4a5df3..156e3d2007 100644
--- a/docs/ru/docs/fastapi-cli.md
+++ b/docs/ru/docs/fastapi-cli.md
@@ -1,4 +1,4 @@
-# FastAPI CLI
+# FastAPI CLI { #fastapi-cli }
**FastAPI CLI** ÑÑо пÑогÑамма командной ÑÑÑоки, коÑоÑÑÑ Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе иÑполÑзоваÑÑ Ð´Ð»Ñ Ð·Ð°Ð¿ÑÑка ваÑего FastAPI пÑиложениÑ, Ð´Ð»Ñ ÑпÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ FastAPI-пÑоекÑом, а Ñакже Ð´Ð»Ñ Ð¼Ð½Ð¾Ð³Ð¸Ñ
дÑÑгиÑ
веÑей.
@@ -50,26 +50,26 @@ $
fastapi dev
Uvicorn, вÑÑокопÑоизводиÑелÑнÑй, гоÑовÑй к ÑабоÑе в production ÑеÑÐ²ÐµÑ ASGI. ð
+ÐнÑÑÑи **FastAPI CLI** иÑполÑзÑеÑÑÑ Uvicorn, вÑÑокопÑоизводиÑелÑнÑй, гоÑовÑй к ÑабоÑе в пÑодакÑне ASGI-ÑеÑвеÑ. ð
-## `fastapi dev`
+## `fastapi dev` { #fastapi-dev }
ÐÑзов `fastapi dev` запÑÑÐºÐ°ÐµÑ Ñежим ÑазÑабоÑки.
-Ðо ÑмолÑÐ°Ð½Ð¸Ñ Ð²ÐºÐ»ÑÑена авÑомаÑиÑеÑÐºÐ°Ñ Ð¿ÐµÑезагÑÑзка (**auto-reload**), благодаÑÑ ÑÑÐ¾Ð¼Ñ Ð¿Ñи изменении кода пÑоиÑÑ
Ð¾Ð´Ð¸Ñ Ð¿ÐµÑезагÑÑзка ÑеÑвеÑа пÑиложениÑ. ÐÑа ÑÑÑановка ÑÑебÑÐµÑ Ð·Ð½Ð°ÑиÑелÑнÑÑ
ÑеÑÑÑÑов и Ð´ÐµÐ»Ð°ÐµÑ ÑиÑÑÐµÐ¼Ñ Ð¼ÐµÐ½ÐµÐµ ÑÑабилÑной. ÐÑполÑзÑйÑе ÐµÑ ÑолÑко пÑи ÑазÑабоÑке. ÐÑиложение ÑлÑÑÐ°ÐµÑ Ð²Ñ
одÑÑие подклÑÑÐµÐ½Ð¸Ñ Ð½Ð° IP `127.0.0.1`. ÐÑо IP адÑÐµÑ Ð²Ð°Ñей маÑинÑ, пÑедназнаÑеннÑй Ð´Ð»Ñ Ð²Ð½ÑÑÑенниÑ
коммÑникаÑий (`localhost`).
+Ðо ÑмолÑÐ°Ð½Ð¸Ñ Ð²ÐºÐ»ÑÑена авÑо-пеÑезагÑÑзка (**auto-reload**), благодаÑÑ ÑÑÐ¾Ð¼Ñ Ð¿Ñи изменении кода пÑоиÑÑ
Ð¾Ð´Ð¸Ñ Ð¿ÐµÑезагÑÑзка ÑеÑвеÑа пÑиложениÑ. ÐÑа ÑÑÑановка ÑÑебÑÐµÑ Ð·Ð½Ð°ÑиÑелÑнÑÑ
ÑеÑÑÑÑов и Ð´ÐµÐ»Ð°ÐµÑ ÑиÑÑÐµÐ¼Ñ Ð¼ÐµÐ½ÐµÐµ ÑÑабилÑной. ÐÑполÑзÑйÑе ÐµÑ ÑолÑко пÑи ÑазÑабоÑке. ÐÑиложение ÑлÑÑÐ°ÐµÑ Ð²Ñ
одÑÑие подклÑÑÐµÐ½Ð¸Ñ Ð½Ð° IP `127.0.0.1`. ÐÑо IP адÑÐµÑ Ð²Ð°Ñей маÑинÑ, пÑедназнаÑеннÑй Ð´Ð»Ñ Ð²Ð½ÑÑÑенниÑ
коммÑникаÑий (`localhost`).
-## `fastapi run`
+## `fastapi run` { #fastapi-run }
-ÐÑзов `fastapi run` по ÑмолÑÐ°Ð½Ð¸Ñ Ð·Ð°Ð¿ÑÑÐºÐ°ÐµÑ FastAPI в Ñежиме production.
+ÐÑзов `fastapi run` по ÑмолÑÐ°Ð½Ð¸Ñ Ð·Ð°Ð¿ÑÑÐºÐ°ÐµÑ FastAPI в Ñежиме пÑодакÑн.
-Ðо ÑмолÑÐ°Ð½Ð¸Ñ ÑÑнкÑÐ¸Ñ Ð¿ÐµÑезагÑÑзки **auto-reload** оÑклÑÑена. ÐÑиложение ÑлÑÑÐ°ÐµÑ Ð²Ñ
одÑÑие подклÑÑÐµÐ½Ð¸Ñ Ð½Ð° IP `0.0.0.0`, Ñ.е. на вÑеÑ
доÑÑÑпнÑÑ
адÑеÑаÑ
компÑÑÑеÑа. Таким обÑазом, пÑиложение бÑÐ´ÐµÑ Ð½Ð°Ñ
одиÑÑÑÑ Ð² пÑблиÑном доÑÑÑпе Ð´Ð»Ñ Ð»Ñбого, кÑо Ð¼Ð¾Ð¶ÐµÑ Ð¿Ð¾Ð´ÑоединиÑÑÑÑ Ðº ваÑей маÑине. ÐÑодÑкÑовÑе пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð·Ð°Ð¿ÑÑкаÑÑÑÑ Ð¸Ð¼ÐµÐ½Ð½Ð¾ Ñак, напÑимеÑ, Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ ÐºÐ¾Ð½ÑейнеÑов.
+Ðо ÑмолÑÐ°Ð½Ð¸Ñ Ð°Ð²Ñо-пеÑезагÑÑзка (**auto-reload**) оÑклÑÑена. ÐÑиложение ÑлÑÑÐ°ÐµÑ Ð²Ñ
одÑÑие подклÑÑÐµÐ½Ð¸Ñ Ð½Ð° IP `0.0.0.0`, Ñ.е. на вÑеÑ
доÑÑÑпнÑÑ
адÑеÑаÑ
компÑÑÑеÑа. Таким обÑазом, пÑиложение бÑÐ´ÐµÑ Ð½Ð°Ñ
одиÑÑÑÑ Ð² пÑблиÑном доÑÑÑпе Ð´Ð»Ñ Ð»Ñбого, кÑо Ð¼Ð¾Ð¶ÐµÑ Ð¿Ð¾Ð´ÑоединиÑÑÑÑ Ðº ваÑей маÑине. ÐÑодÑкÑовÑе пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð·Ð°Ð¿ÑÑкаÑÑÑÑ Ð¸Ð¼ÐµÐ½Ð½Ð¾ Ñак, напÑимеÑ, Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ ÐºÐ¾Ð½ÑейнеÑов.
РболÑÑинÑÑве ÑлÑÑаев Ð²Ñ Ð±ÑдеÑе (и должнÑ) иÑполÑзоваÑÑ Ð¿ÑокÑи-ÑеÑÐ²ÐµÑ ("termination proxy"), коÑоÑÑй бÑÐ´ÐµÑ Ð¿Ð¾Ð´Ð´ÐµÑживаÑÑ HTTPS повеÑÑ
ваÑего пÑиложениÑ. ÐÑÑ Ð±ÑÐ´ÐµÑ Ð·Ð°Ð²Ð¸ÑеÑÑ Ð¾Ñ Ñого, как Ð²Ñ ÑазвеÑÑÑваеÑе пÑиложение: за Ð²Ð°Ñ ÑÑо либо ÑÐ´ÐµÐ»Ð°ÐµÑ Ð²Ð°Ñ Ð¿ÑовайдеÑ, либо вам пÑидеÑÑÑ ÑделаÑÑ Ð½Ð°ÑÑÑойки ÑамоÑÑоÑÑелÑно.
/// tip | ÐодÑказка
-ÐÑ Ð¼Ð¾Ð¶ÐµÑе болÑÑе ÑзнаÑÑ Ð¾Ð± ÑÑом в докÑменÑаÑии по ÑазвеÑÑÑÐ²Ð°Ð½Ð¸Ñ Ð¿Ñиложений [deployment documentation](deployment/index.md){.internal-link target=_blank}.
+ÐÑ Ð¼Ð¾Ð¶ÐµÑе болÑÑе ÑзнаÑÑ Ð¾Ð± ÑÑом в [докÑменÑаÑии по ÑазвеÑÑÑваниÑ](deployment/index.md){.internal-link target=_blank}.
///
diff --git a/docs/ru/docs/features.md b/docs/ru/docs/features.md
index 77d6b936a8..91ffe331b1 100644
--- a/docs/ru/docs/features.md
+++ b/docs/ru/docs/features.md
@@ -1,23 +1,21 @@
-# ÐÑновнÑе ÑвойÑÑва
+# ÐозможноÑÑи { #features }
-## ÐÑновнÑе ÑвойÑÑва FastAPI
+## ÐозможноÑÑи FastAPI { #fastapi-features }
**FastAPI** пÑÐµÐ´Ð»Ð°Ð³Ð°ÐµÑ Ð²Ð°Ð¼ ÑледÑÑÑее:
-### ÐÑполÑзование оÑкÑÑÑÑÑ
ÑÑандаÑÑов
+### ÐÑновано на оÑкÑÑÑÑÑ
ÑÑандаÑÑаÑ
{ #based-on-open-standards }
-* OpenAPI Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ API, вклÑÑÐ°Ñ Ð¾Ð±ÑÑÐ²Ð»ÐµÐ½Ð¸Ñ Ð¾Ð¿ÐµÑаÑий пÑÑи, паÑамеÑÑов, Ñела запÑоÑа, безопаÑноÑÑи и Ñ.д.
-
-
-* ÐвÑомаÑиÑеÑкое докÑменÑиÑование моделей даннÑÑ
в ÑооÑвеÑÑÑвии Ñ JSON Schema (Ñак как ÑпеÑиÑикаÑÐ¸Ñ OpenAPI Ñама оÑнована на JSON Schema).
-* РазÑабоÑан, пÑидеÑживаÑÑÑ ÑÑиÑ
ÑÑандаÑÑов, поÑле ÑÑаÑелÑного иÑ
изÑÑениÑ. ÐÑи ÑÑандаÑÑÑ Ð¸Ð·Ð½Ð°ÑалÑно вклÑÑÐµÐ½Ñ Ð²Ð¾ ÑÑеймÑоÑк, а не ÑвлÑÑÑÑÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑной надÑÑÑойкой.
+* OpenAPI Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ API, вклÑÑÐ°Ñ Ð¾Ð±ÑÑÐ²Ð»ÐµÐ½Ð¸Ñ Ð¾Ð¿ÐµÑаÑий пÑÑи, паÑамеÑÑов, Ñел запÑоÑов, безопаÑноÑÑи и Ñ. д.
+* ÐвÑомаÑиÑеÑÐºÐ°Ñ Ð´Ð¾ÐºÑменÑаÑÐ¸Ñ Ð¼Ð¾Ð´ÐµÐ»ÐµÐ¹ даннÑÑ
Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ JSON Schema (Ñак как Ñама ÑпеÑиÑикаÑÐ¸Ñ OpenAPI оÑнована на JSON Schema).
+* РазÑабоÑан вокÑÑг ÑÑиÑ
ÑÑандаÑÑов, поÑле ÑÑаÑелÑного иÑ
изÑÑениÑ. ÐÑо не дополниÑелÑÐ½Ð°Ñ Ð½Ð°Ð´ÑÑÑойка повеÑÑ
.
* ÐÑо Ñакже позволÑÐµÑ Ð¸ÑполÑзоваÑÑ Ð°Ð²ÑомаÑиÑеÑкÑÑ **генеÑаÑÐ¸Ñ ÐºÐ»Ð¸ÐµÐ½ÑÑкого кода** на многиÑ
ÑзÑкаÑ
.
-### ÐвÑомаÑиÑеÑки генеÑиÑÑÐµÐ¼Ð°Ñ Ð´Ð¾ÐºÑменÑаÑиÑ
+### ÐвÑомаÑиÑеÑÐºÐ°Ñ Ð´Ð¾ÐºÑменÑаÑÐ¸Ñ { #automatic-docs }
-ÐнÑеÑакÑÐ¸Ð²Ð½Ð°Ñ Ð´Ð¾ÐºÑменÑаÑÐ¸Ñ Ð´Ð»Ñ API и иÑÑÐ»ÐµÐ´Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ð¾Ð»ÑзоваÑелÑÑкиÑ
веб-инÑеÑÑейÑов. ÐоÑколÑÐºÑ ÑÑÐ¾Ñ ÑÑеймвоÑк оÑнован на OpenAPI, ÑÑÑеÑÑвÑÐµÑ Ð½ÐµÑколÑко ваÑианÑов докÑменÑиÑованиÑ, 2 из коÑоÑÑÑ
вклÑÑÐµÐ½Ñ Ð¿Ð¾ ÑмолÑаниÑ.
+ÐнÑеÑакÑÐ¸Ð²Ð½Ð°Ñ Ð´Ð¾ÐºÑменÑаÑÐ¸Ñ Ð´Ð»Ñ API и иÑÑледоваÑелÑÑкие веб-инÑеÑÑейÑÑ. ÐоÑколÑÐºÑ ÑÑеймвоÑк оÑнован на OpenAPI, ÑÑÑеÑÑвÑÐµÑ Ð½ÐµÑколÑко ваÑианÑов докÑменÑиÑованиÑ, 2 из ниÑ
вклÑÑÐµÐ½Ñ Ð¿Ð¾ ÑмолÑаниÑ.
-* Swagger UI, Ñ Ð¸Ð½ÑеÑакÑивнÑм взаимодейÑÑвием, вÑзÑÐ²Ð°ÐµÑ Ð¸ ÑеÑÑиÑÑÐµÑ Ð²Ð°Ñ API пÑÑмо из бÑаÑзеÑа.
+* Swagger UI, Ñ Ð¸Ð½ÑеÑакÑивнÑм иÑÑледованием, вÑзовом и ÑеÑÑиÑованием ваÑего API пÑÑмо из бÑаÑзеÑа.

@@ -25,22 +23,21 @@

-### ТолÑко ÑовÑеменнÑй Python
+### ТолÑко ÑовÑеменнÑй Python { #just-modern-python }
-ÐÑе ÑÑи возможноÑÑи оÑÐ½Ð¾Ð²Ð°Ð½Ñ Ð½Ð° ÑÑандаÑÑнÑÑ
**анноÑаÑиÑÑ
Ñипов Python 3.8** (благодаÑÑ Pydantic). Ðе нÑжно изÑÑаÑÑ Ð½Ð¾Ð²Ñй ÑинÑакÑиÑ. ТолÑко лиÑÑ ÑÑандаÑÑнÑй ÑовÑеменнÑй Python.
+ÐÑе оÑновано на ÑÑандаÑÑнÑÑ
**анноÑаÑиÑÑ
Ñипов Python** (благодаÑÑ Pydantic). Ðе нÑжно изÑÑаÑÑ Ð½Ð¾Ð²Ñй ÑинÑакÑиÑ. ТолÑко ÑÑандаÑÑнÑй ÑовÑеменнÑй Python.
-ÐÑли вам нÑжно оÑвежиÑÑ Ð·Ð½Ð°Ð½Ð¸Ñ, как иÑполÑзоваÑÑ Ð°Ð½Ð½Ð¾ÑаÑии Ñипов в Python (даже еÑли Ð²Ñ Ð½Ðµ иÑполÑзÑеÑе FastAPI), вÑделиÑе 2 минÑÑÑ Ð¸ пÑоÑмоÑÑиÑе кÑаÑкое ÑÑководÑÑво: [Ðведение в анноÑаÑии Ñипов Python¶
-](python-types.md){.internal-link target=_blank}.
+ÐÑли вам нÑжно оÑвежиÑÑ Ð·Ð½Ð°Ð½Ð¸Ñ Ð¾ ÑипаÑ
в Python (даже еÑли Ð²Ñ Ð½Ðµ иÑполÑзÑеÑе FastAPI), вÑделиÑе 2 минÑÑÑ Ð¸ пÑоÑмоÑÑиÑе кÑаÑкое ÑÑководÑÑво: [Ð¢Ð¸Ð¿Ñ Python](python-types.md){.internal-link target=_blank}.
-ÐÑ Ð¿Ð¸ÑеÑе на ÑÑандаÑÑном Python Ñ Ð°Ð½Ð½Ð¾ÑаÑиÑми Ñипов:
+ÐÑ Ð¿Ð¸ÑеÑе ÑÑандаÑÑнÑй Python Ñ Ñипами:
```Python
from datetime import date
from pydantic import BaseModel
-# ÐбÑÑвлÑем паÑамеÑÑ user_id Ñ Ñипом `str`
-# и полÑÑаем поддеÑÐ¶ÐºÑ ÑедакÑоÑа внÑÑÑи ÑÑнкÑии
+# ÐбÑÑвлÑем паÑамеÑÑ ÐºÐ°Ðº `str`
+# и полÑÑаем поддеÑÐ¶ÐºÑ ÑедакÑоÑа кода внÑÑÑи ÑÑнкÑии
def main(user_id: str):
return user_id
@@ -70,17 +67,17 @@ my_second_user: User = User(**second_user_data)
`**second_user_data` ознаÑаеÑ:
-ÐеÑедаÑÑ ÐºÐ»ÑÑи и знаÑÐµÐ½Ð¸Ñ ÑловаÑÑ `second_user_data`, в каÑеÑÑве аÑгÑменÑов Ñипа "клÑÑ-знаÑение", ÑÑо ÑквиваленÑно: `User(id=4, name="Mary", joined="2018-11-30")` .
+ÐеÑедаÑÑ ÐºÐ»ÑÑи и знаÑÐµÐ½Ð¸Ñ ÑловаÑÑ `second_user_data` в каÑеÑÑве аÑгÑменÑов "клÑÑ-знаÑение", ÑквиваленÑно: `User(id=4, name="Mary", joined="2018-11-30")`
///
-### ÐоддеÑжка ÑедакÑоÑов (IDE)
+### ÐоддеÑжка ÑедакÑоÑов (IDE) { #editor-support }
ÐеÑÑ ÑÑеймвоÑк бÑл пÑодÑман Ñак, ÑÑÐ¾Ð±Ñ Ð±ÑÑÑ Ð¿ÑоÑÑÑм и инÑÑиÑивно понÑÑнÑм в иÑполÑзовании, вÑе ÑеÑÐµÐ½Ð¸Ñ Ð±Ñли пÑовеÑÐµÐ½Ñ Ð½Ð° множеÑÑве ÑедакÑоÑов еÑе до наÑала ÑазÑабоÑки, ÑÑÐ¾Ð±Ñ Ð¾Ð±ÐµÑпеÑиÑÑ Ð½Ð°Ð¸Ð»ÑÑÑие ÑÑÐ»Ð¾Ð²Ð¸Ñ Ð¿Ñи напиÑании кода.
-РопÑоÑе Python-ÑазÑабоÑÑиков бÑло вÑÑÑнено, ÑÑо наиболее ÑаÑÑо иÑполÑзÑемой ÑÑнкÑией ÑедакÑоÑов, ÑвлÑеÑÑÑ "авÑодополнение".
+РопÑоÑаÑ
PythonâÑазÑабоÑÑиков видно, ÑÑо одной из ÑамÑÑ
ÑаÑÑо иÑполÑзÑемÑÑ
ÑÑнкÑий ÑвлÑеÑÑÑ Â«Ð°Ð²ÑозавеÑÑение».
-ÐÑÑ ÑÑÑÑкÑÑÑа **FastAPI** оÑнована на ÑдовлеÑвоÑении ÑÑой возможноÑÑи. ÐвÑодополнение ÑабоÑÐ°ÐµÑ Ð²ÐµÐ·Ð´Ðµ.
+ÐÑÑ ÑÑÑÑкÑÑÑа **FastAPI** оÑнована на ÑдовлеÑвоÑении ÑÑой возможноÑÑи. ÐвÑозавеÑÑение ÑабоÑÐ°ÐµÑ Ð²ÐµÐ·Ð´Ðµ.
Ðам Ñедко нÑжно бÑÐ´ÐµÑ Ð²Ð¾Ð·Ð²ÑаÑаÑÑÑÑ Ðº докÑменÑаÑии.
@@ -94,23 +91,23 @@ my_second_user: User = User(**second_user_data)

-ÐÑ Ð±ÑдеÑе полÑÑаÑÑ Ð°Ð²Ñодополнение кода даже Ñам, где Ð²Ñ ÑÑиÑали ÑÑо невозможнÑм ÑанÑÑе.
-Ðак пÑимеÑ, клÑÑ `price` внÑÑÑи Ñела JSON (коÑоÑÑй Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð²Ð»Ð¾Ð¶ÐµÐ½Ð½Ñм), пÑиÑ
одÑÑего в запÑоÑе.
+ÐÑ Ð±ÑдеÑе полÑÑаÑÑ Ð°Ð²ÑозавеÑÑение кода даже Ñам, где Ð²Ñ ÑÑиÑали ÑÑо невозможнÑм ÑанÑÑе. Ðак пÑимеÑ, клÑÑ `price` внÑÑÑи Ñела JSON (коÑоÑÑй Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð²Ð»Ð¾Ð¶ÐµÐ½Ð½Ñм), пÑиÑ
одÑÑего в запÑоÑе.
+
+ÐолÑÑе никакиÑ
непÑавилÑнÑÑ
имÑн клÑÑей, меÑÐ°Ð½Ð¸Ñ Ð¿Ð¾ докÑменÑаÑии или пÑокÑÑÑÐ¸Ð²Ð°Ð½Ð¸Ñ ÐºÐ¾Ð´Ð° ввеÑÑ
и вниз в попÑÑкаÑ
ÑзнаÑÑ â иÑполÑзовали Ð²Ñ Ñанее `username` или `user_name`.
-ÐолÑÑе никакиÑ
непÑавилÑнÑÑ
имÑн клÑÑей, меÑÐ°Ð½Ð¸Ñ Ð¿Ð¾ докÑменÑаÑии или пÑокÑÑÑÐ¸Ð²Ð°Ð½Ð¸Ñ ÐºÐ¾Ð´Ð° ввеÑÑ
и вниз, в попÑÑкаÑ
ÑзнаÑÑ - иÑполÑзовали Ð²Ñ Ñанее `username` или `user_name`.
+### ÐÑаÑкоÑÑÑ { #short }
-### ÐÑаÑкоÑÑÑ
-FastAPI Ð¸Ð¼ÐµÐµÑ Ð¿ÑодÑманнÑе знаÑÐµÐ½Ð¸Ñ **по ÑмолÑаниÑ** Ð´Ð»Ñ Ð²Ñего, Ñ Ð¿ÑоизволÑнÑми наÑÑÑойками везде. ÐÑе паÑамеÑÑÑ Ð¼Ð¾Ð³ÑÑ Ð±ÑÑÑ Ñонко подÑÑÑÐ¾ÐµÐ½Ñ Ñак, ÑÑÐ¾Ð±Ñ Ð´ÐµÐ»Ð°ÑÑ Ñо, ÑÑо вам нÑжно и опÑеделÑÑÑ Ð½ÐµÐ¾Ð±Ñ
одимÑй вам API.
+FastAPI Ð¸Ð¼ÐµÐµÑ Ð¿ÑодÑманнÑе знаÑÐµÐ½Ð¸Ñ **по ÑмолÑаниÑ** Ð´Ð»Ñ Ð²Ñего, Ñ Ð¾Ð¿ÑионалÑнÑми наÑÑÑойками везде. ÐÑе паÑамеÑÑÑ Ð¼Ð¾Ð³ÑÑ Ð±ÑÑÑ Ñонко подÑÑÑÐ¾ÐµÐ½Ñ Ñак, ÑÑÐ¾Ð±Ñ Ð´ÐµÐ»Ð°ÑÑ Ñо, ÑÑо вам нÑжно, и опÑеделÑÑÑ Ð½ÐµÐ¾Ð±Ñ
одимÑй вам API.
-Ðо, по ÑмолÑаниÑ, вÑÑ ÑÑо **"и Ñак ÑабоÑаеÑ"**.
+Ðо по ÑмолÑÐ°Ð½Ð¸Ñ Ð²ÑÑ **«пÑоÑÑо ÑабоÑаеÑ»**.
-### ÐÑовеÑка знаÑений
+### ÐÑовеÑка знаÑений { #validation }
-* ÐÑовеÑка знаÑений Ð´Ð»Ñ Ð±Ð¾Ð»ÑÑинÑÑва (или вÑеÑ
?) **Ñипов даннÑÑ
** Python, вклÑÑаÑ:
+* ÐÑовеÑка знаÑений Ð´Ð»Ñ Ð±Ð¾Ð»ÑÑинÑÑва (или вÑеÑ
?) **Ñипов даннÑÑ
** Python, вклÑÑаÑ:
* ÐбÑекÑÑ JSON (`dict`).
- * ÐаÑÑÐ¸Ð²Ñ JSON (`list`) Ñ ÑÑÑановленнÑми Ñипами ÑлеменÑов.
+ * ÐаÑÑив JSON (`list`) Ñ Ð¾Ð¿ÑеделÑннÑми Ñипами ÑлеменÑов.
* СÑÑоковÑе (`str`) Ð¿Ð¾Ð»Ñ Ñ Ð¾Ð³ÑаниÑением минималÑной и макÑималÑной длинÑ.
- * ЧиÑла (`int`, `float`) Ñ Ð¼Ð¸Ð½Ð¸Ð¼Ð°Ð»ÑнÑми и макÑималÑнÑми знаÑениÑми и Ñ.п.
+ * ЧиÑла (`int`, `float`) Ñ Ð¼Ð¸Ð½Ð¸Ð¼Ð°Ð»ÑнÑми и макÑималÑнÑми знаÑениÑми и Ñ. п.
* ÐÑовеÑка Ð´Ð»Ñ Ð±Ð¾Ð»ÐµÐµ ÑкзоÑиÑеÑкиÑ
Ñипов, ÑакиÑ
как:
* URL.
@@ -118,11 +115,11 @@ FastAPI Ð¸Ð¼ÐµÐµÑ Ð¿ÑодÑманнÑе знаÑÐµÐ½Ð¸Ñ **по ÑмолÑан
* UUID.
* ...и дÑÑгие.
-ÐÑе пÑовеÑки обÑабаÑÑваÑÑÑÑ Ñ
оÑоÑо заÑекомендовавÑим ÑÐµÐ±Ñ Ð¸ надежнÑм **Pydantic**.
+ÐÑе пÑовеÑки обÑабаÑÑваÑÑÑÑ Ñ
оÑоÑо заÑекомендовавÑим ÑÐµÐ±Ñ Ð¸ надÑжнÑм **Pydantic**.
-### ÐезопаÑноÑÑÑ Ð¸ аÑÑенÑиÑикаÑиÑ
+### ÐезопаÑноÑÑÑ Ð¸ аÑÑенÑиÑикаÑÐ¸Ñ { #security-and-authentication }
-ÐÑÑÑоенÑе ÑÑнкÑии безопаÑноÑÑи и аÑÑенÑиÑикаÑии. Ðез какиÑ
-либо компÑомиÑÑов Ñ Ð±Ð°Ð·Ð°Ð¼Ð¸ даннÑÑ
или моделÑми даннÑÑ
.
+ÐÑÑÑоеннÑе ÑÑнкÑии безопаÑноÑÑи и аÑÑенÑиÑикаÑии. Ðез какиÑ
âлибо компÑомиÑÑов Ñ Ð±Ð°Ð·Ð°Ð¼Ð¸ даннÑÑ
или моделÑми даннÑÑ
.
ÐÑе ÑÑ
ÐµÐ¼Ñ Ð±ÐµÐ·Ð¾Ð¿Ð°ÑноÑÑи, опÑеделÑннÑе в OpenAPI, вклÑÑаÑ:
@@ -137,68 +134,68 @@ FastAPI Ð¸Ð¼ÐµÐµÑ Ð¿ÑодÑманнÑе знаÑÐµÐ½Ð¸Ñ **по ÑмолÑан
ÐÑе инÑÑÑÑменÑÑ Ð¸ компоненÑÑ ÑпÑоекÑиÑÐ¾Ð²Ð°Ð½Ñ Ð´Ð»Ñ Ð¼Ð½Ð¾Ð³Ð¾ÐºÑаÑного иÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¸ легко инÑегÑиÑÑÑÑÑÑ Ñ Ð²Ð°Ñими ÑиÑÑемами, Ñ
ÑанилиÑами даннÑÑ
, ÑелÑÑионнÑми и NoSQL базами даннÑÑ
и Ñ. д.
-### ÐнедÑение завиÑимоÑÑей
+### ÐнедÑение завиÑимоÑÑей { #dependency-injection }
FastAPI вклÑÑÐ°ÐµÑ Ð² ÑÐµÐ±Ñ ÑÑезвÑÑайно пÑоÑÑÑÑ Ð² иÑполÑзовании, но ÑÑезвÑÑайно моÑнÑÑ ÑиÑÑÐµÐ¼Ñ ÐнедÑÐµÐ½Ð¸Ñ Ð·Ð°Ð²Ð¸ÑимоÑÑей.
-* Ðаже завиÑимоÑÑи могÑÑ Ð¸Ð¼ÐµÑÑ Ð·Ð°Ð²Ð¸ÑимоÑÑи, ÑÐ¾Ð·Ð´Ð°Ð²Ð°Ñ Ð¸ÐµÑаÑÑ
Ð¸Ñ Ð¸Ð»Ð¸ **"гÑаÑÑ" завиÑимоÑÑей**.
+* Ðаже завиÑимоÑÑи могÑÑ Ð¸Ð¼ÐµÑÑ Ð·Ð°Ð²Ð¸ÑимоÑÑи, ÑÐ¾Ð·Ð´Ð°Ð²Ð°Ñ Ð¸ÐµÑаÑÑ
Ð¸Ñ Ð¸Ð»Ð¸ **«гÑаÑ» завиÑимоÑÑей**.
* ÐÑÑ **авÑомаÑиÑеÑки обÑабаÑÑваеÑÑÑ** ÑÑеймвоÑком.
* ÐÑе завиÑимоÑÑи могÑÑ Ð·Ð°Ð¿ÑаÑиваÑÑ Ð´Ð°Ð½Ð½Ñе из запÑоÑов и **дополнÑÑÑ Ð¾Ð¿ÐµÑаÑии пÑÑи** огÑаниÑениÑми и авÑомаÑиÑеÑкой докÑменÑаÑией.
-* **ÐвÑомаÑиÑеÑÐºÐ°Ñ Ð¿ÑовеÑка** даже Ð´Ð»Ñ Ð¿Ð°ÑамеÑÑов *опеÑаÑий пÑÑи*, опÑеделеннÑÑ
в завиÑимоÑÑÑÑ
.
-* ÐоддеÑжка ÑложнÑÑ
ÑиÑÑем аÑÑенÑиÑикаÑии полÑзоваÑелей, **Ñоединений Ñ Ð±Ð°Ð·Ð°Ð¼Ð¸ даннÑÑ
** и Ñ.д.
-* **ÐикакиÑ
компÑомиÑÑов** Ñ Ð±Ð°Ð·Ð°Ð¼Ð¸ даннÑÑ
, инÑеÑÑейÑами и Ñ.д. Ðо Ð»ÐµÐ³ÐºÐ°Ñ Ð¸Ð½ÑегÑаÑÐ¸Ñ Ñо вÑеми ними.
+* **ÐвÑомаÑиÑеÑÐºÐ°Ñ Ð¿ÑовеÑка** даже Ð´Ð»Ñ Ð¿Ð°ÑамеÑÑов *опеÑаÑий пÑÑи*, опÑеделÑннÑÑ
в завиÑимоÑÑÑÑ
.
+* ÐоддеÑжка ÑложнÑÑ
ÑиÑÑем аÑÑенÑиÑикаÑии полÑзоваÑелей, **Ñоединений Ñ Ð±Ð°Ð·Ð°Ð¼Ð¸ даннÑÑ
** и Ñ. д.
+* **ÐикакиÑ
компÑомиÑÑов** Ñ Ð±Ð°Ð·Ð°Ð¼Ð¸ даннÑÑ
, инÑеÑÑейÑами и Ñ. д. Ðо пÑи ÑÑом â лÑÐ³ÐºÐ°Ñ Ð¸Ð½ÑегÑаÑÐ¸Ñ Ñо вÑеми ними.
-### ÐÐµÑ Ð¾Ð³ÑаниÑений на "ÐлагинÑ"
+### ÐÐµÑ Ð¾Ð³ÑаниÑений на "ÐлагинÑ" { #unlimited-plug-ins }
-Ðли, дÑÑгими Ñловами, Ð½ÐµÑ ÑложноÑÑей Ñ Ð½Ð¸Ð¼Ð¸, импоÑÑиÑÑйÑе и иÑполÑзÑйÑе нÑжнÑй вам код.
+Ðли, дÑÑгими Ñловами, Ð½ÐµÑ Ð½ÐµÐ¾Ð±Ñ
одимоÑÑи в ниÑ
â пÑоÑÑо импоÑÑиÑÑйÑе и иÑполÑзÑйÑе нÑжнÑй вам код.
-ÐÑÐ±Ð°Ñ Ð¸Ð½ÑегÑаÑÐ¸Ñ ÑазÑабоÑана наÑÑолÑко пÑоÑÑой в иÑполÑзовании (Ñ Ð·Ð°Ð²Ð¸ÑимоÑÑÑми), ÑÑо Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе ÑоздаÑÑ "плагин" Ð´Ð»Ñ Ñвоего пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð² паÑÑ ÑÑÑок кода, иÑполÑзÑÑ ÑÑ Ð¶Ðµ ÑÑÑÑкÑÑÑÑ Ð¸ ÑинÑакÑиÑ, ÑÑо и Ð´Ð»Ñ Ð²Ð°ÑиÑ
*опеÑаÑий пÑÑи*.
+ÐÑÐ±Ð°Ñ Ð¸Ð½ÑегÑаÑÐ¸Ñ ÑазÑабоÑана наÑÑолÑко пÑоÑÑой в иÑполÑзовании (Ñ Ð·Ð°Ð²Ð¸ÑимоÑÑÑми), ÑÑо Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе ÑоздаÑÑ Â«Ð¿Ð»Ð°Ð³Ð¸Ð½Â» Ð´Ð»Ñ Ñвоего пÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð² паÑÑ ÑÑÑок кода, иÑполÑзÑÑ ÑÑ Ð¶Ðµ ÑÑÑÑкÑÑÑÑ Ð¸ ÑинÑакÑиÑ, ÑÑо и Ð´Ð»Ñ Ð²Ð°ÑиÑ
*опеÑаÑий пÑÑи*.
-### ÐÑовеÑен
+### ÐÑовеÑен { #tested }
-* 100% покÑÑÑие ÑеÑÑами.
-* 100% анноÑиÑование Ñипов в кодовой базе.
-* ÐÑполÑзÑеÑÑÑ Ð² ÑеалÑно ÑабоÑаÑÑиÑ
пÑиложениÑÑ
.
+* 100% покÑÑÑие ÑеÑÑами.
+* 100% анноÑиÑование Ñипов в кодовой базе.
+* ÐÑполÑзÑеÑÑÑ Ð² пÑодакÑнâпÑиложениÑÑ
.
-## ÐÑновнÑе ÑвойÑÑва Starlette
+## ÐозможноÑÑи Starlette { #starlette-features }
-**FastAPI** оÑнован на Starlette и полноÑÑÑÑ ÑовмеÑÑим Ñ Ð½Ð¸Ð¼. Так ÑÑо, лÑбой дополниÑелÑнÑй код Starlette, коÑоÑÑй Ñ Ð²Ð°Ñ ÐµÑÑÑ, бÑÐ´ÐµÑ Ñакже ÑабоÑаÑÑ.
+**FastAPI** оÑнован на Starlette и полноÑÑÑÑ ÑовмеÑÑим Ñ Ð½Ð¸Ð¼. Так ÑÑо лÑбой дополниÑелÑнÑй код Starlette, коÑоÑÑй Ñ Ð²Ð°Ñ ÐµÑÑÑ, Ñакже бÑÐ´ÐµÑ ÑабоÑаÑÑ.
-Ðа Ñамом деле, `FastAPI` - ÑÑо клаÑÑ, ÑнаÑледованнÑй Ð¾Ñ `Starlette`. Таким обÑазом, еÑли Ð²Ñ Ñже знаеÑе или иÑполÑзÑеÑе Starlette, болÑÑÐ°Ñ ÑаÑÑÑ ÑÑнкÑионала бÑÐ´ÐµÑ ÑабоÑаÑÑ Ñак же.
+Ðа Ñамом деле, `FastAPI` â ÑÑо подклаÑÑ `Starlette`. Таким обÑазом, еÑли Ð²Ñ Ñже знаеÑе или иÑполÑзÑеÑе Starlette, болÑÑÐ°Ñ ÑаÑÑÑ ÑÑнкÑионала бÑÐ´ÐµÑ ÑабоÑаÑÑ Ñак же.
-С **FastAPI** Ð²Ñ Ð¿Ð¾Ð»ÑÑаеÑе вÑе возможноÑÑи **Starlette** (Ñак как FastAPI ÑÑо вÑего лиÑÑ Starlette на ÑÑеÑоидаÑ
):
+С **FastAPI** Ð²Ñ Ð¿Ð¾Ð»ÑÑаеÑе вÑе возможноÑÑи **Starlette** (Ñак как FastAPI â ÑÑо вÑего лиÑÑ Starlette на ÑÑеÑоидаÑ
):
-* СеÑÑÑзно впеÑаÑлÑÑÑÐ°Ñ Ð¿ÑоизводиÑелÑноÑÑÑ. ÐÑо один из ÑамÑÑ
бÑÑÑÑÑÑ
ÑÑеймвоÑков на Python, наÑавне Ñ Ð¿ÑиложениÑми иÑполÑзÑÑÑими **NodeJS** или **Go**.
+* СеÑÑÑзно впеÑаÑлÑÑÑÐ°Ñ Ð¿ÑоизводиÑелÑноÑÑÑ. ÐÑо один из ÑамÑÑ
бÑÑÑÑÑÑ
ÑÑеймвоÑков на Python, наÑавне Ñ **NodeJS** и **Go**.
* ÐоддеÑжка **WebSocket**.
-* ФоновÑе задаÑи Ð´Ð»Ñ Ð¿ÑоÑеÑÑов.
+* ФоновÑе задаÑи в Ñом же пÑоÑеÑÑе.
* СобÑÑÐ¸Ñ Ð·Ð°Ð¿ÑÑка и вÑклÑÑениÑ.
-* ТеÑÑовÑй ÐºÐ»Ð¸ÐµÐ½Ñ Ð¿Ð¾ÑÑÑоен на библиоÑеке HTTPX.
+* ТеÑÑовÑй ÐºÐ»Ð¸ÐµÐ½Ñ Ð¿Ð¾ÑÑÑоен на HTTPX.
* **CORS**, GZip, ÑÑаÑиÑеÑкие ÑайлÑ, поÑоковÑе оÑвеÑÑ.
* ÐоддеÑжка **ÑеÑÑий и cookie**.
* 100% покÑÑÑие ÑеÑÑами.
* 100% анноÑиÑование Ñипов в кодовой базе.
-## ÐÑобенноÑÑи и возможноÑÑи Pydantic
+## ÐозможноÑÑи Pydantic { #pydantic-features }
-**FastAPI** оÑнован на Pydantic и полноÑÑÑÑ ÑовмеÑÑим Ñ Ð½Ð¸Ð¼. Так ÑÑо, лÑбой дополниÑелÑнÑй код Pydantic, коÑоÑÑй Ñ Ð²Ð°Ñ ÐµÑÑÑ, бÑÐ´ÐµÑ Ñакже ÑабоÑаÑÑ.
+**FastAPI** полноÑÑÑÑ ÑовмеÑÑим Ñ (и оÑнован на) Pydantic. ÐоÑÑÐ¾Ð¼Ñ Ð»Ñбой дополниÑелÑнÑй код Pydantic, коÑоÑÑй Ñ Ð²Ð°Ñ ÐµÑÑÑ, Ñакже бÑÐ´ÐµÑ ÑабоÑаÑÑ.
-ÐклÑÑÐ°Ñ Ð²Ð½ÐµÑние библиоÑеки, Ñакже оÑнованнÑе на Pydantic, Ñакие как: ORM'Ñ, ODM'Ñ Ð´Ð»Ñ Ð±Ð°Ð· даннÑÑ
.
+ÐклÑÑÐ°Ñ Ð²Ð½ÐµÑние библиоÑеки, Ñакже оÑнованнÑе на Pydantic, Ñакие как ORMâÑ, ODMâÑ Ð´Ð»Ñ Ð±Ð°Ð· даннÑÑ
.
ÐÑо Ñакже ознаÑаеÑ, ÑÑо во многиÑ
ÑлÑÑаÑÑ
Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе пеÑедаваÑÑ ÑÐ¾Ñ Ð¶Ðµ обÑекÑ, коÑоÑÑй полÑÑили из запÑоÑа, **непоÑÑедÑÑвенно в Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
**, Ñак как вÑÑ Ð¿ÑовеÑÑеÑÑÑ Ð°Ð²ÑомаÑиÑеÑки.
РнаобоÑоÑ, во многиÑ
ÑлÑÑаÑÑ
Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе пÑоÑÑо пеÑедаÑÑ Ð¾Ð±ÑекÑ, полÑÑеннÑй из Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
, **непоÑÑедÑÑвенно клиенÑÑ**.
-С **FastAPI** Ð²Ñ Ð¿Ð¾Ð»ÑÑаеÑе вÑе возможноÑÑи **Pydantic** (Ñак как, FastAPI оÑнован на Pydantic, Ð´Ð»Ñ Ð¾Ð±ÑабоÑки даннÑÑ
):
-
-* **Ðикакой неÑвоÑÑÑпки** :
- * Ðе нÑжно изÑÑаÑÑ Ð½Ð¾Ð²ÑÑ
ÑÑ
ем в микÑоÑзÑкаÑ
.
- * ÐÑли Ð²Ñ Ð·Ð½Ð°ÐµÑе анноÑаÑии Ñипов в Python, Ð²Ñ Ð·Ð½Ð°ÐµÑе, как иÑполÑзоваÑÑ Pydantic.
-* ÐÑекÑаÑно ÑоÑеÑаеÑÑÑ Ñ Ð²Ð°Ñими **IDE/linter/мозгом**:
- * ÐоÑÐ¾Ð¼Ñ ÑÑо ÑÑÑÑкÑÑÑÑ Ð´Ð°Ð½Ð½ÑÑ
pydantic - ÑÑо вÑего лиÑÑ ÑкземплÑÑÑ ÐºÐ»Ð°ÑÑов, опÑеделÑннÑÑ
вами. ÐвÑодополнение, пÑовеÑка кода, mypy и ваÑа инÑÑиÑÐ¸Ñ - вÑÑ Ð±ÑÐ´ÐµÑ ÑабоÑаÑÑ Ñ Ð²Ð°Ñими пÑовеÑеннÑми даннÑми.
-* ÐÑовеÑка **ÑложнÑÑ
ÑÑÑÑкÑÑÑ**:
- * ÐÑполÑзование иеÑаÑÑ
иÑеÑкиÑ
моделей Pydantic; `List`, `Dict` и Ñ.п. из модÑÐ»Ñ `typing` (вÑ
Ð¾Ð´Ð¸Ñ Ð² ÑÑандаÑÑнÑÑ Ð±Ð¸Ð±Ð»Ð¸Ð¾ÑÐµÐºÑ Python).
- * ÐалидаÑоÑÑ Ð¿Ð¾Ð·Ð²Ð¾Ð»ÑÑÑ ÑеÑко и легко опÑеделÑÑÑ, пÑовеÑÑÑÑ Ð¸ докÑменÑиÑоваÑÑ ÑложнÑе ÑÑ
ÐµÐ¼Ñ Ð´Ð°Ð½Ð½ÑÑ
в виде JSON Schema.
- * У Ð²Ð°Ñ Ð¼Ð¾Ð³ÑÑ Ð±ÑÑÑ Ð³Ð»Ñбоко **вложеннÑе обÑекÑÑ JSON** и вÑе они бÑдÑÑ Ð¿ÑовеÑÐµÐ½Ñ Ð¸ анноÑиÑованÑ.
+С **FastAPI** Ð²Ñ Ð¿Ð¾Ð»ÑÑаеÑе вÑе возможноÑÑи **Pydantic** (Ñак как FastAPI оÑнован на Pydantic Ð´Ð»Ñ Ð¾Ð±ÑабоÑки даннÑÑ
):
+
+* **Ðикакой неÑвоÑÑÑпки**:
+ * Ðе нÑжно изÑÑаÑÑ Ð½Ð¾Ð²Ñе ÑÑ
ÐµÐ¼Ñ Ð² микÑоÑзÑкаÑ
.
+ * ÐÑли Ð²Ñ Ð·Ð½Ð°ÐµÑе ÑÐ¸Ð¿Ñ Ð² Python, Ð²Ñ Ð·Ð½Ð°ÐµÑе, как иÑполÑзоваÑÑ Pydantic.
+* ÐÑекÑаÑно ÑоÑеÑаеÑÑÑ Ñ Ð²Ð°Ñим **IDE/linter/мозгом**:
+ * ÐоÑÐ¾Ð¼Ñ ÑÑо ÑÑÑÑкÑÑÑÑ Ð´Ð°Ð½Ð½ÑÑ
pydantic â ÑÑо вÑего лиÑÑ ÑкземплÑÑÑ ÐºÐ»Ð°ÑÑов, опÑеделÑннÑÑ
вами; авÑозавеÑÑение, пÑовеÑка кода, mypy и ваÑа инÑÑиÑÐ¸Ñ â вÑÑ Ð±ÑÐ´ÐµÑ ÑабоÑаÑÑ Ñ Ð²Ð°Ñими валидиÑованнÑми даннÑми.
+* ÐалидаÑÐ¸Ñ **ÑложнÑÑ
ÑÑÑÑкÑÑÑ**:
+ * ÐÑполÑзование иеÑаÑÑ
иÑеÑкиÑ
моделей Pydantic; `List`, `Dict` и Ñ. п. из модÑÐ»Ñ `typing` (вÑ
Ð¾Ð´Ð¸Ñ Ð² ÑÑандаÑÑнÑÑ Ð±Ð¸Ð±Ð»Ð¸Ð¾ÑÐµÐºÑ Python).
+ * ÐалидаÑоÑÑ Ð¿Ð¾Ð·Ð²Ð¾Ð»ÑÑÑ ÑÑÑко и легко опÑеделÑÑÑ, пÑовеÑÑÑÑ Ð¸ докÑменÑиÑоваÑÑ ÑложнÑе ÑÑ
ÐµÐ¼Ñ Ð´Ð°Ð½Ð½ÑÑ
в виде JSON Schema.
+ * У Ð²Ð°Ñ Ð¼Ð¾Ð³ÑÑ Ð±ÑÑÑ Ð³Ð»Ñбоко **вложеннÑе обÑекÑÑ JSON**, и вÑе они бÑдÑÑ Ð¿ÑовеÑÐµÐ½Ñ Ð¸ анноÑиÑованÑ.
* **РаÑÑиÑÑемоÑÑÑ**:
- * Pydantic позволÑÐµÑ Ð¾Ð¿ÑеделÑÑÑ Ð¿Ð¾Ð»ÑзоваÑелÑÑкие ÑÐ¸Ð¿Ñ Ð´Ð°Ð½Ð½ÑÑ
или ÑаÑÑиÑÑÑÑ Ð¿ÑовеÑÐºÑ Ð¼ÐµÑодами модели, Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Ð¿ÑовеÑоÑнÑÑ
декоÑаÑоÑов.
+ * Pydantic позволÑÐµÑ Ð¾Ð¿ÑеделÑÑÑ Ð¿Ð¾Ð»ÑзоваÑелÑÑкие ÑÐ¸Ð¿Ñ Ð´Ð°Ð½Ð½ÑÑ
или ÑаÑÑиÑÑÑÑ Ð¿ÑовеÑÐºÑ Ð¼ÐµÑодами модели Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Ð´ÐµÐºÐ¾ÑаÑоÑов валидаÑоÑов.
* 100% покÑÑÑие ÑеÑÑами.
diff --git a/docs/ru/docs/help-fastapi.md b/docs/ru/docs/help-fastapi.md
index 2f73c3c101..6bfabb96cb 100644
--- a/docs/ru/docs/help-fastapi.md
+++ b/docs/ru/docs/help-fastapi.md
@@ -1,261 +1,255 @@
-# ÐомоÑÑ FastAPI - ÐолÑÑиÑÑ Ð¿Ð¾Ð¼Ð¾ÑÑ
+# ÐомоÑÑ FastAPI - ÐолÑÑиÑÑ Ð¿Ð¾Ð¼Ð¾ÑÑ { #help-fastapi-get-help }
ÐÑавиÑÑÑ Ð»Ð¸ Ðам **FastAPI**?
-ХоÑели Ð±Ñ ÐÑ Ð¿Ð¾Ð¼Ð¾ÑÑ FastAPI, его полÑзоваÑелÑм и авÑоÑÑ?
+ХоÑели Ð±Ñ ÐÑ Ð¿Ð¾Ð¼Ð¾ÑÑ FastAPI, дÑÑгим полÑзоваÑелÑм и авÑоÑÑ?
-ÐÐ¾Ð¶ÐµÑ Ð±ÑÑÑ Ñ ÐÐ°Ñ Ð²Ð¾Ð·Ð½Ð¸ÐºÐ»Ð¸ ÑÑÑдноÑÑи Ñ **FastAPI** и Ðам нÑжна помоÑÑ?
+Ðли ÐÑ Ñ
оÑиÑе полÑÑиÑÑ Ð¿Ð¾Ð¼Ð¾ÑÑ Ð¿Ð¾ **FastAPI**?
-ÐÑÑÑ Ð½ÐµÑколÑко оÑÐµÐ½Ñ Ð¿ÑоÑÑÑÑ
ÑпоÑобов Ð¾ÐºÐ°Ð·Ð°Ð½Ð¸Ñ Ð¿Ð¾Ð¼Ð¾Ñи (иногда доÑÑаÑоÑно вÑего лиÑÑ Ð¾Ð´Ð½Ð¾Ð³Ð¾ или двÑÑ
кликов).
+ÐÑÑÑ Ð½ÐµÑколÑко оÑÐµÐ½Ñ Ð¿ÑоÑÑÑÑ
ÑпоÑобов помоÑÑ (иногда доÑÑаÑоÑно вÑего лиÑÑ Ð¾Ð´Ð½Ð¾Ð³Ð¾-двÑÑ
кликов).
Ð Ñакже еÑÑÑ Ð½ÐµÑколÑко ÑпоÑобов полÑÑиÑÑ Ð¿Ð¾Ð¼Ð¾ÑÑ.
-## ÐодпиÑаÑÑÑÑ Ð½Ð° новоÑÑнÑÑ ÑаÑÑÑлкÑ
+## ÐодпиÑаÑÑÑÑ Ð½Ð° новоÑÑнÑÑ ÑаÑÑÑÐ»ÐºÑ { #subscribe-to-the-newsletter }
ÐÑ Ð¼Ð¾Ð¶ÐµÑе подпиÑаÑÑÑÑ Ð½Ð° ÑедкÑÑ [новоÑÑнÑÑ ÑаÑÑÑÐ»ÐºÑ **FastAPI и его дÑÑзÑÑ**](newsletter.md){.internal-link target=_blank} и бÑÑÑ Ð² кÑÑÑе о:
* ÐовоÑÑÑÑ
о FastAPI и его дÑÑзÑÑÑ
ð
* Ð ÑководÑÑваÑ
ð
* ÐозможноÑÑÑÑ
â¨
-* ÐÑпÑавлениÑÑ
ð¨
+* ÐомаÑÑиÑ
изменениÑÑ
ð¨
* ÐодÑказкаÑ
и Ñ
иÑÑоÑÑÑÑ
â
-## ÐодпиÑаÑÑÑÑ Ð½Ð° FastAPI в X (Twitter)
+## ÐодпиÑаÑÑÑÑ Ð½Ð° FastAPI в X (Twitter) { #follow-fastapi-on-x-twitter }
ÐодпиÑаÑÑÑÑ Ð½Ð° @fastapi в **X (Twitter)** Ð´Ð»Ñ Ð¿Ð¾Ð»ÑÑÐµÐ½Ð¸Ñ Ð½Ð°Ð¸ÑвежайÑиÑ
новоÑÑей о **FastAPI**. ð¦
-## ÐобавиÑÑ **FastAPI** Ð·Ð²ÐµÐ·Ð´Ñ Ð½Ð° GitHub
+## ÐобавиÑÑ **FastAPI** Ð·Ð²ÐµÐ·Ð´Ñ Ð½Ð° GitHub { #star-fastapi-in-github }
-ÐÑ Ð¼Ð¾Ð¶ÐµÑе добавиÑÑ FastAPI "звездÑ" на GitHub (кликнÑÑÑ Ð½Ð° ÐºÐ½Ð¾Ð¿ÐºÑ Ð·Ð²ÐµÐ·Ð´Ñ Ð² веÑÑ
нем пÑавом ÑÐ³Ð»Ñ ÑкÑана): https://github.com/fastapi/fastapi. âï¸
+ÐÑ Ð¼Ð¾Ð¶ÐµÑе добавиÑÑ FastAPI "звездÑ" на GitHub (кликнÑв на ÐºÐ½Ð¾Ð¿ÐºÑ Ð·Ð²ÐµÐ·Ð´Ñ Ð² пÑавом веÑÑ
нем ÑглÑ): https://github.com/fastapi/fastapi. âï¸
-Чем болÑÑе звÑзд, Ñем легÑе дÑÑгим полÑзоваÑелÑм найÑи Ð½Ð°Ñ Ð¸ ÑвидеÑÑ, ÑÑо пÑÐ¾ÐµÐºÑ Ñже ÑÑал полезнÑм Ð´Ð»Ñ Ð¼Ð½Ð¾Ð³Ð¸Ñ
.
+Чем болÑÑе звÑзд, Ñем легÑе дÑÑгим полÑзоваÑелÑм найÑи пÑÐ¾ÐµÐºÑ Ð¸ ÑвидеÑÑ, ÑÑо он Ñже оказалÑÑ Ð¿Ð¾Ð»ÐµÐ·Ð½Ñм Ð´Ð»Ñ Ð¼Ð½Ð¾Ð³Ð¸Ñ
.
-## ÐÑÑлеживаÑÑ Ñвежие вÑпÑÑки в ÑепозиÑоÑии на GitHub
+## ÐÑÑлеживаÑÑ Ñвежие вÑпÑÑки в ÑепозиÑоÑии на GitHub { #watch-the-github-repository-for-releases }
-ÐÑ Ð¼Ð¾Ð¶ÐµÑе "оÑÑлеживаÑÑ" FastAPI на GitHub (кликниÑе по кнопке "watch" навеÑÑ
Ñ ÑпÑава): https://github.com/fastapi/fastapi. ð
+ÐÑ Ð¼Ð¾Ð¶ÐµÑе "оÑÑлеживаÑÑ" FastAPI на GitHub (кликнÑв по кнопке "watch" навеÑÑ
Ñ ÑпÑава): https://github.com/fastapi/fastapi. ð
-Там же ÐÑ Ð¼Ð¾Ð¶ÐµÑе ÑказаÑÑ Ð² наÑÑÑойкаÑ
- "Releases only".
+Там же ÐÑ Ð¼Ð¾Ð¶ÐµÑе вÑбÑаÑÑ "Releases only".
С Ñакой наÑÑÑойкой ÐÑ Ð±ÑдеÑе полÑÑаÑÑ ÑÐ²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ñ Ð½Ð° ваÑÑ ÑлекÑÑоннÑÑ Ð¿Ð¾ÑÑÑ ÐºÐ°Ð¶Ð´Ñй Ñаз, когда поÑвиÑÑÑ Ð½Ð¾Ð²Ñй Ñелиз (Ð½Ð¾Ð²Ð°Ñ Ð²ÐµÑÑиÑ) **FastAPI** Ñ Ð¸ÑпÑавлениÑми оÑибок и новÑми возможноÑÑÑми.
-## СвÑзаÑÑÑÑ Ñ Ð°Ð²ÑоÑом
+## СвÑзаÑÑÑÑ Ñ Ð°Ð²ÑоÑом { #connect-with-the-author }
-Ðожно ÑвÑзаÑÑÑÑ Ñо мной (СебÑÑÑÑÑн РамиÑез / `tiangolo`), авÑоÑом FastAPI.
+Ðожно ÑвÑзаÑÑÑÑ Ñо мной (Sebastián RamÃrez / `tiangolo`), авÑоÑом.
ÐÑ Ð¼Ð¾Ð¶ÐµÑе:
* ÐодпиÑаÑÑÑÑ Ð½Ð° Ð¼ÐµÐ½Ñ Ð½Ð° **GitHub**.
* ÐоÑмоÑÑеÑÑ Ð´ÑÑгие мои пÑоекÑÑ Ñ Ð¾ÑкÑÑÑÑм кодом, коÑоÑÑе могÑÑ Ð±ÑÑÑ Ð¿Ð¾Ð»ÐµÐ·Ð½Ñ Ðам.
- * ÐодпиÑавÑиÑÑ Ð½Ð° Ð¼ÐµÐ½Ñ ÐÑ ÑможеÑе полÑÑаÑÑ ÑведомлениÑ, ÑÑо Ñ Ñоздал новÑй пÑÐ¾ÐµÐºÑ Ñ Ð¾ÑкÑÑÑÑм кодом,.
+ * ÐодпиÑаÑÑÑÑ, ÑÑÐ¾Ð±Ñ Ð²Ð¸Ð´ÐµÑÑ, когда Ñ ÑÐ¾Ð·Ð´Ð°Ñ Ð½Ð¾Ð²Ñй пÑÐ¾ÐµÐºÑ Ñ Ð¾ÑкÑÑÑÑм кодом.
* ÐодпиÑаÑÑÑÑ Ð½Ð° Ð¼ÐµÐ½Ñ Ð² **X (Twitter)** или в Mastodon.
- * ÐоделиÑÑÑÑ Ñо мной, как ÐÑ Ð¸ÑполÑзÑеÑе FastAPI (Ñ Ð¾Ð±Ð¾Ð¶Ð°Ñ ÑиÑаÑÑ Ð¿Ñо ÑÑо).
- * ÐолÑÑаÑÑ ÑведомлениÑ, когда Ñ Ð´ÐµÐ»Ð°Ñ Ð¾Ð±ÑÑÐ²Ð»ÐµÐ½Ð¸Ñ Ð¸ пÑедÑÑавлÑÑ Ð½Ð¾Ð²Ñе инÑÑÑÑменÑÑ.
+ * ÐоделиÑÑÑÑ Ñо мной, как ÐÑ Ð¸ÑполÑзÑеÑе FastAPI (Ñ Ð¾Ð±Ð¾Ð¶Ð°Ñ ÑÑо ÑиÑаÑÑ).
+ * УзнаваÑÑ, когда Ñ Ð´ÐµÐ»Ð°Ñ Ð¾Ð±ÑÑÐ²Ð»ÐµÐ½Ð¸Ñ Ð¸Ð»Ð¸ вÑпÑÑÐºÐ°Ñ Ð½Ð¾Ð²Ñе инÑÑÑÑменÑÑ.
* ÐÑ Ñакже можеÑе подпиÑаÑÑÑÑ Ð½Ð° @fastapi в X (Twitter) (ÑÑо оÑделÑнÑй аккаÑнÑ).
-* ÐодпиÑаÑÑÑÑ Ð½Ð° Ð¼ÐµÐ½Ñ Ð² **Linkedin**.
- * ÐолÑÑаÑÑ ÑведомлениÑ, когда Ñ Ð´ÐµÐ»Ð°Ñ Ð¾Ð±ÑÑÐ²Ð»ÐµÐ½Ð¸Ñ Ð¸ пÑедÑÑавлÑÑ Ð½Ð¾Ð²Ñе инÑÑÑÑменÑÑ (пÑавда ÑаÑе вÑего Ñ Ð¸ÑполÑзÑÑ X (Twitter) ð¤·ââ).
-* ЧиÑаÑÑ, ÑÑо Ñ Ð¿Ð¸ÑÑ (или подпиÑаÑÑÑÑ Ð½Ð° менÑ) в **Dev.to** или в **Medium**.
- * ЧиÑаÑÑ Ð´ÑÑгие идеи, ÑÑаÑÑи и ÑиÑаÑÑ Ð¾Ð± инÑÑÑÑменÑаÑ
ÑозданнÑÑ
мной.
- * ÐодпиÑиÑеÑÑ Ð½Ð° менÑ, ÑÑÐ¾Ð±Ñ Ð¿ÑоÑиÑаÑÑ, когда Ñ Ð¾Ð¿ÑбликÑÑ ÑÑо-нибÑÐ´Ñ Ð½Ð¾Ð²Ð¾Ðµ.
+* ÐодпиÑаÑÑÑÑ Ð½Ð° Ð¼ÐµÐ½Ñ Ð² **LinkedIn**.
+ * УзнаваÑÑ, когда Ñ Ð´ÐµÐ»Ð°Ñ Ð¾Ð±ÑÑÐ²Ð»ÐµÐ½Ð¸Ñ Ð¸Ð»Ð¸ вÑпÑÑÐºÐ°Ñ Ð½Ð¾Ð²Ñе инÑÑÑÑменÑÑ (Ñ
оÑÑ ÑаÑе Ñ Ð¸ÑполÑзÑÑ X (Twitter) ð¤·ââ).
+* ЧиÑаÑÑ, ÑÑо Ñ Ð¿Ð¸ÑÑ (или подпиÑаÑÑÑÑ Ð½Ð° менÑ) на **Dev.to** или **Medium**.
+ * ЧиÑаÑÑ Ð´ÑÑгие идеи, ÑÑаÑÑи и о ÑозданнÑÑ
мной инÑÑÑÑменÑаÑ
.
+ * ÐодпиÑаÑÑÑÑ, ÑÑÐ¾Ð±Ñ ÑиÑаÑÑ, когда Ñ Ð¿ÑбликÑÑ ÑÑо-Ñо новое.
-## ÐÑÑавиÑÑ ÑообÑение в X (Twitter) о **FastAPI**
+## ÐÑÑавиÑÑ ÑообÑение в X (Twitter) о **FastAPI** { #tweet-about-fastapi }
-ÐÑÑавÑÑе ÑообÑение в X (Twitter) о **FastAPI** и позволÑÑе мне и дÑÑгим ÑзнаÑÑ - поÑÐµÐ¼Ñ Ð¾Ð½ Ðам нÑавиÑÑÑ. ð
+ÐÑÑавÑÑе ÑообÑение в X (Twitter) о **FastAPI** и позволÑÑе мне и дÑÑгим ÑзнаÑÑ, поÑÐµÐ¼Ñ Ð¾Ð½ Ðам нÑавиÑÑÑ. ð
-Я лÑÐ±Ð»Ñ ÑзнаваÑÑ Ð¾ Ñом, как **FastAPI** иÑполÑзÑеÑÑÑ, ÑÑо Ðам понÑавилоÑÑ Ð² нÑм, в какиÑ
пÑоекÑаÑ
/компаниÑÑ
ÐÑ Ð¸ÑполÑзÑеÑе его и Ñ.п.
+Я лÑÐ±Ð»Ñ ÑзнаваÑÑ Ð¾ Ñом, как **FastAPI** иÑполÑзÑеÑÑÑ, ÑÑо Ðам понÑавилоÑÑ Ð² нÑм, в какиÑ
пÑоекÑаÑ
/компаниÑÑ
ÐÑ ÐµÐ³Ð¾ иÑполÑзÑеÑе и Ñ.д.
-## ÐÑÑавиÑÑ Ð³Ð¾Ð»Ð¾Ñ Ð·Ð° FastAPI
+## ÐÑÑавиÑÑ Ð³Ð¾Ð»Ð¾Ñ Ð·Ð° FastAPI { #vote-for-fastapi }
* ÐолоÑÑйÑе за **FastAPI** в Slant.
-* ÐолоÑÑйÑе за **FastAPI** в AlternativeTo.
-* РаÑÑкажиÑе, как ÐÑ Ð¸ÑполÑзÑеÑе **FastAPI** на StackShare.
+* ÐолоÑÑйÑе за **FastAPI** в AlternativeTo.
+* РаÑÑкажиÑе, ÑÑо ÐÑ Ð¸ÑполÑзÑеÑе **FastAPI** на StackShare.
-## ÐомоÑÑ Ð´ÑÑгим Ñ Ð¸Ñ
пÑоблемами на GitHub
+## ÐомоÑÑ Ð´ÑÑгим Ñ Ð²Ð¾Ð¿ÑоÑами на GitHub { #help-others-with-questions-in-github }
-ÐÑ Ð¼Ð¾Ð¶ÐµÑе поÑмоÑÑеÑÑ, какие пÑÐ¾Ð±Ð»ÐµÐ¼Ñ Ð¸ÑпÑÑÑваÑÑ Ð´ÑÑгие лÑди и попÑÑаÑÑÑÑ Ð¿Ð¾Ð¼Ð¾ÑÑ Ð¸Ð¼. ЧаÑе вÑего ÑÑо вопÑоÑÑ, на коÑоÑÑе, веÑÑма веÑоÑÑно, ÐÑ Ñже знаеÑе оÑвеÑ. ð¤
+ÐÑ Ð¼Ð¾Ð¶ÐµÑе попÑобоваÑÑ Ð¿Ð¾Ð¼Ð¾ÑÑ Ð´ÑÑгим Ñ Ð¸Ñ
вопÑоÑами в:
-ÐÑли ÐÑ Ð±ÑдеÑе много помогаÑÑ Ð»ÑдÑм Ñ ÑеÑением иÑ
пÑоблем, ÐÑ Ð¼Ð¾Ð¶ÐµÑе ÑÑаÑÑ Ð¾ÑиÑиалÑнÑм [ÐкÑпеÑÑом FastAPI](fastapi-people.md#_3){.internal-link target=_blank}. ð
+* GitHub Discussions
+* GitHub Issues
-ТолÑко помниÑе, Ñамое важное пÑи ÑÑом - добÑоÑа. СÑолкнÑвÑиÑÑ Ñ Ð¿Ñоблемой, лÑди ÑаÑÑÑÑаиваÑÑÑÑ Ð¸ ÑаÑÑо задаÑÑ Ð²Ð¾Ð¿ÑоÑÑ Ð½Ðµ лÑÑÑим обÑазом, но поÑÑаÑайÑеÑÑ Ð±ÑÑÑ Ð¼Ð°ÐºÑималÑно добÑожелаÑелÑнÑм. ð¤
+Ðо многиÑ
ÑлÑÑаÑÑ
ÐÑ Ñже можеÑе знаÑÑ Ð¾ÑвеÑÑ Ð½Ð° ÑÑи вопÑоÑÑ. ð¤
-ÐÐ´ÐµÑ ÑообÑеÑÑва **FastAPI** в Ñом, ÑÑÐ¾Ð±Ñ Ð±ÑÑÑ Ð´Ð¾Ð±ÑодÑÑнÑм и гоÑÑепÑиимнÑми. Ðе допÑÑкайÑе издеваÑелÑÑÑв или неÑважиÑелÑного Ð¿Ð¾Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¿Ð¾ оÑноÑÐµÐ½Ð¸Ñ Ðº дÑÑгим. ÐÑ Ð´Ð¾Ð»Ð¶Ð½Ñ Ð·Ð°Ð±Ð¾ÑиÑÑÑÑ Ð´ÑÑг о дÑÑге.
+ÐÑли ÐÑ Ð¼Ð½Ð¾Ð³Ð¾ помогаеÑе лÑдÑм Ñ Ð¸Ñ
вопÑоÑами, ÐÑ ÑÑанеÑе оÑиÑиалÑнÑм [ÐкÑпеÑÑом FastAPI](fastapi-people.md#fastapi-experts){.internal-link target=_blank}. ð
+
+ТолÑко помниÑе, Ñамое важное â поÑÑаÑайÑеÑÑ Ð±ÑÑÑ Ð´Ð¾Ð±ÑÑми. ÐÑди пÑиÑ
одÑÑ Ñо Ñвоими ÑазоÑаÑованиÑми и ÑаÑÑо задаÑÑ Ð²Ð¾Ð¿ÑоÑÑ Ð½Ðµ лÑÑÑим обÑазом, но поÑÑаÑайÑеÑÑ, наÑколÑко можеÑе, бÑÑÑ Ð´Ð¾Ð±ÑожелаÑелÑнÑми. ð¤
+
+ÐÐ´ÐµÑ ÑообÑеÑÑва **FastAPI** â бÑÑÑ Ð´Ð¾Ð±ÑожелаÑелÑнÑм и гоÑÑепÑиимнÑм. Ð Ñо же вÑÐµÐ¼Ñ Ð½Ðµ допÑÑкайÑе ÑÑÐ°Ð²Ð»Ñ Ð¸Ð»Ð¸ неÑважиÑелÑное поведение по оÑноÑÐµÐ½Ð¸Ñ Ðº дÑÑгим. ÐÑ Ð´Ð¾Ð»Ð¶Ð½Ñ Ð·Ð°Ð±Ð¾ÑиÑÑÑÑ Ð´ÑÑг о дÑÑге.
---
-Ðак помоÑÑ Ð´ÑÑгим Ñ Ð¸Ñ
пÑоблемами:
+Ðак помоÑÑ Ð´ÑÑгим Ñ Ð²Ð¾Ð¿ÑоÑами (в обÑÑждениÑÑ
или Issues):
-### ÐонÑÑÑ Ð²Ð¾Ð¿ÑоÑ
+### ÐонÑÑÑ Ð²Ð¾Ð¿ÑÐ¾Ñ { #understand-the-question }
-* УдоÑÑовеÑÑÑеÑÑ, ÑÑо понÑли **ÑелÑ** и обÑÑоÑÑелÑÑÑва ÑлÑÑÐ°Ñ Ð²Ð¾Ð¿ÑоÑаÑÑего.
+* УбедиÑеÑÑ, ÑÑо понÑли **ÑелÑ** и ÐºÐµÐ¹Ñ Ð¸ÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð·Ð°Ð´Ð°ÑÑего вопÑоÑ.
-* ÐаÑем пÑовеÑÑÑе, ÑÑо вопÑÐ¾Ñ (в подавлÑÑÑем болÑÑинÑÑве - ÑÑо вопÑоÑÑ) Ðам **ÑÑен**.
+* ÐаÑем пÑовеÑÑÑе, ÑÑо вопÑÐ¾Ñ (в подавлÑÑÑем болÑÑинÑÑве ÑÑо вопÑоÑÑ) ÑÑоÑмÑлиÑован **ÑÑно**.
-* Ðо многиÑ
ÑлÑÑаÑÑ
вопÑÐ¾Ñ ÐºÐ°ÑаеÑÑÑ ÑеÑениÑ, коÑоÑое полÑзоваÑÐµÐ»Ñ Ð¿ÑидÑмал Ñам, но Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¸ ÑеÑение **полÑÑÑе**. ÐÑли ÐÑ Ð¿Ð¾Ð¹Ð¼ÑÑе пÑÐ¾Ð±Ð»ÐµÐ¼Ñ Ð¸ обÑÑоÑÑелÑÑÑва ÑлÑÑаÑ, Ñо ÑможеÑе пÑедложиÑÑ **алÑÑеÑнаÑивное ÑеÑение**.
+* Ðо многиÑ
ÑлÑÑаÑÑ
ÑпÑаÑиваÑÑ Ð¾ вообÑажаемом ÑеÑении полÑзоваÑелÑ, но Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ ÑеÑение **полÑÑÑе**. ÐÑли ÐÑ Ð»ÑÑÑе поймÑÑе пÑÐ¾Ð±Ð»ÐµÐ¼Ñ Ð¸ кейÑ, ÑможеÑе пÑедложиÑÑ **алÑÑеÑнаÑивное ÑеÑение**.
-* Ðжели вопÑÐ¾Ñ Ðам непонÑÑен, запÑоÑиÑе болÑÑе **деÑалей**.
+* ÐÑли вопÑÐ¾Ñ Ð½ÐµÐ¿Ð¾Ð½ÑÑен, запÑоÑиÑе болÑÑе **деÑалей**.
-### ÐоÑпÑоизвеÑÑи пÑоблемÑ
+### ÐоÑпÑоизвеÑÑи пÑÐ¾Ð±Ð»ÐµÐ¼Ñ { #reproduce-the-problem }
-РболÑÑинÑÑве ÑлÑÑаев еÑÑÑ ÑÑо-Ñо ÑвÑзанное Ñ **иÑÑ
однÑм кодом** вопÑоÑаÑÑего.
+РболÑÑинÑÑве ÑлÑÑаев и вопÑоÑов еÑÑÑ ÑÑо-Ñо ÑвÑзанное Ñ **иÑÑ
однÑм кодом** авÑоÑа.
-Рво многиÑ
ÑлÑÑаÑÑ
бÑÐ´ÐµÑ Ð¿ÑедоÑÑавлен ÑолÑко ÑÑÐ°Ð³Ð¼ÐµÐ½Ñ ÑÑого кода, коÑоÑого недоÑÑаÑоÑно Ð´Ð»Ñ **воÑпÑÐ¾Ð¸Ð·Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¿ÑоблемÑ**.
+Ðо многиÑ
ÑлÑÑаÑÑ
пÑедоÑÑавлÑÑÑ ÑолÑко ÑÑÐ°Ð³Ð¼ÐµÐ½Ñ ÐºÐ¾Ð´Ð°, но ÑÑого недоÑÑаÑоÑно, ÑÑÐ¾Ð±Ñ **воÑпÑоизвеÑÑи пÑоблемÑ**.
-* ÐопÑоÑиÑе пÑедоÑÑавиÑÑ Ð¼Ð¸Ð½Ð¸Ð¼Ð°Ð»ÑнÑй воÑпÑоизводимÑй пÑимеÑ, коÑоÑÑй можно **ÑкопиÑоваÑÑ** и запÑÑÑиÑÑ Ð»Ð¾ÐºÐ°Ð»Ñно Ð´Ð°Ð±Ñ ÑвидеÑÑ ÑакÑÑ Ð¶Ðµ оÑибкÑ, или поведение, или лÑÑÑе понÑÑÑ Ð¾Ð±ÑÑоÑÑелÑÑÑва ÑлÑÑаÑ.
+* ÐопÑоÑиÑе пÑедоÑÑавиÑÑ Ð¼Ð¸Ð½Ð¸Ð¼Ð°Ð»ÑнÑй воÑпÑоизводимÑй пÑимеÑ, коÑоÑÑй ÐÑ ÑможеÑе **ÑкопиÑоваÑÑ-вÑÑавиÑÑ** и запÑÑÑиÑÑ Ð»Ð¾ÐºÐ°Ð»Ñно, ÑÑÐ¾Ð±Ñ ÑвидеÑÑ ÑÑ Ð¶Ðµ оÑÐ¸Ð±ÐºÑ Ð¸Ð»Ð¸ поведение, или лÑÑÑе понÑÑÑ Ð¸Ñ
кейÑ.
-* ÐÑли на ÐÐ°Ñ Ð½Ð°Ñ
лÑнÑло великодÑÑие, Ñо можеÑе попÑÑаÑÑÑÑ **ÑоздаÑÑ Ð¿Ð¾Ñ
ожий пÑимеÑ** ÑамоÑÑоÑÑелÑно, оÑновÑваÑÑÑ ÑолÑко на опиÑании пÑоблемÑ. Ðо имейÑе в видÑ, ÑÑо ÑÑо Ð¼Ð¾Ð¶ÐµÑ Ð·Ð°Ð½ÑÑÑ Ð¼Ð½Ð¾Ð³Ð¾ вÑемени и, возможно, ÑÑÐ¾Ð¸Ñ ÑнаÑала позадаваÑÑ Ð²Ð¾Ð¿ÑоÑÑ Ð´Ð»Ñ Ð¿ÑоÑÑÐ½ÐµÐ½Ð¸Ñ Ð¿ÑоблемÑ.
+* ÐÑли ÑÑвÑÑвÑеÑе ÑÐµÐ±Ñ Ð¾Ñобенно великодÑÑнÑми, можеÑе попÑÑаÑÑÑÑ **ÑоздаÑÑ Ñакой пÑимеÑ** Ñами, оÑновÑваÑÑÑ ÑолÑко на опиÑании пÑоблемÑ. ÐÑоÑÑо помниÑе, ÑÑо ÑÑо Ð¼Ð¾Ð¶ÐµÑ Ð·Ð°Ð½ÑÑÑ Ð¼Ð½Ð¾Ð³Ð¾ вÑемени, и, возможно, ÑнаÑала лÑÑÑе попÑоÑиÑÑ ÑÑоÑниÑÑ Ð¿ÑоблемÑ.
-### ÐÑедложиÑÑ ÑеÑение
+### ÐÑедложиÑÑ ÑеÑение { #suggest-solutions }
-* ÐоÑле Ñого как ÐÑ Ð¿Ð¾Ð½Ñли вопÑоÑ, ÐÑ Ð¼Ð¾Ð¶ÐµÑе даÑÑ **оÑвеÑ**.
+* ÐоÑле Ñого как ÐÑ Ð¿Ð¾Ð½Ñли вопÑоÑ, ÐÑ Ð¼Ð¾Ð¶ÐµÑе даÑÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ñй **оÑвеÑ**.
-* СледÑÐµÑ Ð¿Ð¾Ð½ÑÑÑ **оÑновнÑÑ Ð¿ÑÐ¾Ð±Ð»ÐµÐ¼Ñ Ð¸ обÑÑоÑÑелÑÑÑва ÑлÑÑаÑ**, поÑÐ¾Ð¼Ñ ÑÑо Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ ÑеÑение лÑÑÑе, Ñем Ñо, коÑоÑое пÑÑалиÑÑ ÑеализоваÑÑ.
+* Ðо многиÑ
ÑлÑÑаÑÑ
лÑÑÑе понÑÑÑ **иÑÑ
однÑÑ Ð¿ÑÐ¾Ð±Ð»ÐµÐ¼Ñ Ð¸Ð»Ð¸ кейÑ**, поÑÐ¾Ð¼Ñ ÑÑо Ð¼Ð¾Ð¶ÐµÑ ÑÑÑеÑÑвоваÑÑ ÑпоÑоб ÑеÑиÑÑ ÐµÑ Ð»ÑÑÑе, Ñем Ñо, ÑÑо пÑÑаÑÑÑÑ ÑделаÑÑ.
-### ÐопÑоÑиÑÑ Ð·Ð°ÐºÑÑÑÑ Ð¿ÑоблемÑ
+### ÐопÑоÑиÑÑ Ð·Ð°ÐºÑÑÑÑ { #ask-to-close }
-ÐÑли Ðам оÑвеÑили, вÑÑоки ÑанÑÑ, ÑÑо Ðам ÑдалоÑÑ ÑеÑиÑÑ Ð¿ÑоблемÑ, поздÑавлÑÑ, **ÐÑ - геÑой**! ð¦¸
+ÐÑли Ðам оÑвеÑили, велика веÑоÑÑноÑÑÑ, ÑÑо ÐÑ ÑеÑили иÑ
пÑоблемÑ, поздÑавлÑÑ, **ÐÑ â геÑой**! ð¦¸
-* Ð Ñаком ÑлÑÑае, еÑли вопÑÐ¾Ñ ÑеÑÑн, попÑоÑиÑе **закÑÑÑÑ Ð¿ÑоблемÑ**.
+* ТепеÑÑ, еÑли пÑоблема ÑеÑена, можно попÑоÑиÑÑ Ð¸Ñ
:
+ * Ð GitHub Discussions: помеÑиÑÑ ÐºÐ¾Ð¼Ð¼ÐµÐ½ÑаÑий как **answer** (оÑвеÑ).
+ * Ð GitHub Issues: **закÑÑÑÑ** Issue.
-## ÐÑÑлеживаÑÑ ÑепозиÑоÑий на GitHub
+## ÐÑÑлеживаÑÑ ÑепозиÑоÑий на GitHub { #watch-the-github-repository }
-ÐÑ Ð¼Ð¾Ð¶ÐµÑе "оÑÑлеживаÑÑ" FastAPI на GitHub (кликниÑе по кнопке "watch" навеÑÑ
Ñ ÑпÑава): https://github.com/fastapi/fastapi. ð
+ÐÑ Ð¼Ð¾Ð¶ÐµÑе "оÑÑлеживаÑÑ" FastAPI на GitHub (кликнÑв по кнопке "watch" навеÑÑ
Ñ ÑпÑава): https://github.com/fastapi/fastapi. ð
-ÐÑли ÐÑ Ð²ÑбеÑеÑе "Watching" вмеÑÑо "Releases only", Ñо бÑдеÑе полÑÑаÑÑ ÑÐ²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ñ ÐºÐ¾Ð³Ð´Ð° кÑо-либо попÑоÑÐ¸Ñ Ð¾ помоÑи Ñ ÑеÑением его пÑоблемÑ.
+ÐÑли ÐÑ Ð²ÑбеÑеÑе "Watching" вмеÑÑо "Releases only", Ñо бÑдеÑе полÑÑаÑÑ ÑведомлениÑ, когда кÑо-либо ÑоздаÑÑ Ð½Ð¾Ð²Ñй вопÑÐ¾Ñ Ð¸Ð»Ð¸ Issue. ÐÑ Ñакже можеÑе ÑказаÑÑ, ÑÑо Ñ
оÑиÑе полÑÑаÑÑ ÑÐ²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ñ ÑолÑко о новÑÑ
Issues, или обÑÑждениÑÑ
, или пÑлл-ÑеквеÑÑаÑ
и Ñ.д.
-Тогда ÐÑ Ð¼Ð¾Ð¶ÐµÑе попÑобоваÑÑ ÑеÑиÑÑ ÑÑÑ Ð¿ÑоблемÑ.
+Тогда ÐÑ Ð¼Ð¾Ð¶ÐµÑе попÑобоваÑÑ Ð¿Ð¾Ð¼Ð¾ÑÑ Ð¸Ð¼ Ñ ÑеÑением ÑÑиÑ
вопÑоÑов.
-## ÐапÑоÑиÑÑ Ð¿Ð¾Ð¼Ð¾ÑÑ Ñ ÑеÑением пÑоблемÑ
+## ÐадаÑÑ Ð²Ð¾Ð¿ÑоÑÑ { #ask-questions }
-ÐÑ Ð¼Ð¾Ð¶ÐµÑе ÑоздаÑÑ Ð½Ð¾Ð²Ñй запÑÐ¾Ñ Ñ Ð¿ÑоÑÑбой о помоÑи в ÑепозиÑоÑии на GitHub, напÑимеÑ:
+ÐÑ Ð¼Ð¾Ð¶ÐµÑе ÑоздаÑÑ Ð½Ð¾Ð²Ñй вопÑÐ¾Ñ Ð² ÑепозиÑоÑии GitHub, напÑимеÑ:
-* ÐадаÑÑ **вопÑоÑ** или попÑоÑиÑÑ Ð¿Ð¾Ð¼Ð¾Ñи в ÑеÑении **пÑоблемÑ**.
-* ÐÑедложиÑÑ Ð½Ð¾Ð²Ð¾Ðµ **ÑлÑÑÑение**.
+* ÐадаÑÑ **вопÑоÑ** или ÑпÑоÑиÑÑ Ð¾ **пÑоблеме**.
+* ÐÑедложиÑÑ Ð½Ð¾Ð²ÑÑ **возможноÑÑÑ**.
-**ÐамеÑка**: ÐÑли ÐÑ ÑоздаÑÑе подобнÑе запÑоÑÑ, Ñо Ñ Ð¿Ð¾Ð¿ÑоÑÑ ÐÐ°Ñ Ñакже оказÑваÑÑ Ð°Ð½Ð°Ð»Ð¾Ð³Ð¸ÑнÑÑ Ð¿Ð¾Ð¼Ð¾ÑÑ Ð´ÑÑгим. ð
+**ÐамеÑка**: еÑли ÐÑ ÑÑо ÑделаеÑе, Ñо Ñ Ð¿Ð¾Ð¿ÑоÑÑ ÐÐ°Ñ Ñакже помогаÑÑ Ð´ÑÑгим. ð
-## ÐÑовеÑÑÑÑ Ð¿Ñл-ÑеквеÑÑÑ
+## ÐÑовеÑÑÑÑ Ð¿Ñлл-ÑеквеÑÑÑ { #review-pull-requests }
-ÐÑ Ð¼Ð¾Ð¶ÐµÑе помоÑÑ Ð¼Ð½Ðµ пÑовеÑÑÑÑ Ð¿Ñл-ÑеквеÑÑÑ Ð´ÑÑгиÑ
ÑÑаÑÑников.
+ÐÑ Ð¼Ð¾Ð¶ÐµÑе помоÑÑ Ð¼Ð½Ðµ пÑовеÑÑÑÑ Ð¿Ñлл-ÑеквеÑÑÑ Ð´ÑÑгиÑ
ÑÑаÑÑников.
-РповÑоÑÑÑÑ, поÑÑаÑайÑеÑÑ Ð±ÑÑÑ Ð´Ð¾Ð±ÑожелаÑелÑнÑм. ð¤
+Ð, Ñнова, поÑÑаÑайÑеÑÑ Ð±ÑÑÑ Ð´Ð¾Ð±ÑожелаÑелÑнÑми. ð¤
---
-Ð Ñом, ÑÑо нÑжно имеÑÑ Ð² Ð²Ð¸Ð´Ñ Ð¿Ñи пÑовеÑке пÑл-ÑеквеÑÑов:
+Ð Ñом, ÑÑо нÑжно имеÑÑ Ð² Ð²Ð¸Ð´Ñ Ð¸ как пÑовеÑÑÑÑ Ð¿Ñлл-ÑеквеÑÑ:
-### ÐонÑÑÑ Ð¿ÑоблемÑ
+### ÐонÑÑÑ Ð¿ÑÐ¾Ð±Ð»ÐµÐ¼Ñ { #understand-the-problem }
-* Ðо-пеÑвÑÑ
, ÑбедиÑеÑÑ, ÑÑо **понÑли пÑоблемÑ**, коÑоÑÑÑ Ð¿Ñл-ÑеквеÑÑ Ð¿ÑÑаеÑÑÑ ÑеÑиÑÑ. ÐÐ»Ñ ÑÑого Ð¼Ð¾Ð¶ÐµÑ Ð¿Ð¾ÑÑебоваÑÑÑÑ Ð¿ÑодолжиÑелÑное обÑÑждение.
+* Ðо-пеÑвÑÑ
, ÑбедиÑеÑÑ, ÑÑо **понÑли пÑоблемÑ**, коÑоÑÑÑ Ð¿Ñлл-ÑеквеÑÑ Ð¿ÑÑаеÑÑÑ ÑеÑиÑÑ. Ðозможно, ÑÑо обÑÑждалоÑÑ Ð±Ð¾Ð»ÐµÐµ подÑобно в GitHub Discussion или Issue.
-* Также еÑÑÑ Ð²ÐµÑоÑÑноÑÑÑ, ÑÑо пÑл-ÑеквеÑÑ Ð½Ðµ акÑÑален, Ñак как пÑÐ¾Ð±Ð»ÐµÐ¼Ñ Ð¼Ð¾Ð¶Ð½Ð¾ ÑеÑиÑÑ **дÑÑгим пÑÑÑм**. Ð Ñаком ÑлÑÑае ÐÑ Ð¼Ð¾Ð¶ÐµÑе ÑказаÑÑ Ð½Ð° ÑÑÐ¾Ñ ÑакÑ.
+* Также еÑÑÑ Ð²ÐµÑоÑÑноÑÑÑ, ÑÑо пÑлл-ÑеквеÑÑ Ð½Ðµ нÑжен, Ñак как пÑÐ¾Ð±Ð»ÐµÐ¼Ñ Ð¼Ð¾Ð¶Ð½Ð¾ ÑеÑиÑÑ **дÑÑгим пÑÑÑм**. Тогда ÐÑ Ð¼Ð¾Ð¶ÐµÑе пÑедложиÑÑ Ð¸Ð»Ð¸ ÑпÑоÑиÑÑ Ð¾Ð± ÑÑом.
-### Ðе пеÑеживайÑе о ÑÑиле
+### Ðе пеÑеживайÑе о ÑÑиле { #dont-worry-about-style }
-* Ðе ÑÑÐ¾Ð¸Ñ ÑлиÑком беÑпокоиÑÑÑÑ Ð¾ ÑакиÑ
веÑаÑ
, как ÑÑÐ¸Ð»Ñ ÑообÑений в коммиÑаÑ
или колиÑеÑÑво коммиÑов. ÐÑи ÑлиÑнии пÑл-ÑеквеÑÑа Ñ Ð¾Ñновной веÑкой, Ñ Ð±ÑÐ´Ñ ÑжимаÑÑ Ð¸ наÑÑÑаиваÑÑ Ð²ÑÑ Ð²ÑÑÑнÑÑ.
+* Ðе ÑÑÐ¾Ð¸Ñ ÑлиÑком беÑпокоиÑÑÑÑ Ð¾ ÑакиÑ
веÑаÑ
, как ÑÑÐ¸Ð»Ñ ÑообÑений в коммиÑаÑ
â пÑи ÑлиÑнии Ñ Ð²ÑÐ¿Ð¾Ð»Ð½Ñ squash и наÑÑÑÐ¾Ñ ÐºÐ¾Ð¼Ð¼Ð¸Ñ Ð²ÑÑÑнÑÑ.
-* Также не беÑпокойÑеÑÑ Ð¾ пÑавилаÑ
ÑÑилÑ, Ð´Ð»Ñ Ð¿ÑовеÑки Ñего еÑÑÑ Ð°Ð²ÑомаÑизиÑованнÑе инÑÑÑÑменÑÑ.
+* Также не беÑпокойÑеÑÑ Ð¾ пÑавилаÑ
ÑÑилÑ, ÑÑо Ñже пÑовеÑÑÑÑ Ð°Ð²ÑомаÑизиÑованнÑе инÑÑÑÑменÑÑ.
-РеÑли вÑÑ Ð¶Ðµ поÑÑебÑеÑÑÑ ÐºÐ°ÐºÐ¾Ð¹-Ñо дÑÑгой ÑÑилÑ, Ñ Ð¿Ð¾Ð¿ÑоÑÑ ÐÐ°Ñ Ð¾Ð± ÑÑом напÑÑмÑÑ Ð¸Ð»Ð¸ Ð´Ð¾Ð±Ð°Ð²Ð»Ñ Ñам коммиÑÑ Ñ Ð½ÐµÐ¾Ð±Ñ
одимÑми изменениÑми.
+ÐÑли бÑÐ´ÐµÑ Ð½Ñжна какаÑ-Ñо дÑÑÐ³Ð°Ñ ÑÑилиÑÑика или единообÑазие, Ñ Ð¿Ð¾Ð¿ÑоÑÑ Ð¾Ð± ÑÑом напÑÑмÑÑ Ð¸Ð»Ð¸ Ð´Ð¾Ð±Ð°Ð²Ð»Ñ Ð¿Ð¾Ð²ÐµÑÑ
Ñвои коммиÑÑ Ñ Ð½ÑжнÑми изменениÑми.
-### ÐÑовеÑиÑÑ ÐºÐ¾Ð´
+### ÐÑовеÑиÑÑ ÐºÐ¾Ð´ { #check-the-code }
-* ÐÑовеÑÑÑе и пÑоÑиÑайÑе код, поÑмоÑÑиÑе, какой он Ð¸Ð¼ÐµÐµÑ ÑмÑÑл, **запÑÑÑиÑе его локалÑно** и поÑмоÑÑиÑе, дейÑÑвиÑелÑно ли он ÑеÑÐ°ÐµÑ Ð¿Ð¾ÑÑавленнÑÑ Ð·Ð°Ð´Ð°ÑÑ.
+* ÐÑовеÑÑÑе и пÑоÑиÑайÑе код, поÑмоÑÑиÑе, логиÑен ли он, **запÑÑÑиÑе его локалÑно** и пÑовеÑÑÑе, дейÑÑвиÑелÑно ли он ÑеÑÐ°ÐµÑ Ð¿ÑоблемÑ.
-* ÐаÑем, иÑполÑзÑÑ **комменÑаÑий**, ÑообÑиÑе, ÑÑо ÐÑ Ñделали пÑовеÑкÑ, Ñогда Ñ Ð±ÑÐ´Ñ Ð·Ð½Ð°ÑÑ, ÑÑо ÐÑ Ð´ÐµÐ¹ÑÑвиÑелÑно пÑовеÑили код.
+* ÐаÑем оÑÑавÑÑе **комменÑаÑий**, ÑÑо ÐÑ ÑÑо Ñделали, Ñак Ñ Ð¿Ð¾Ð¹Ð¼Ñ, ÑÑо ÐÑ Ð´ÐµÐ¹ÑÑвиÑелÑно пÑовеÑили код.
/// info | ÐнÑоÑмаÑиÑ
-Ð ÑожалениÑ, Ñ Ð½Ðµ Ð¼Ð¾Ð³Ñ Ñак пÑоÑÑо довеÑÑÑÑ Ð¿Ñл-ÑеквеÑÑам, Ñ ÐºÐ¾ÑоÑÑÑ
Ñже еÑÑÑ Ð½ÐµÑколÑко одобÑений.
+Ð ÑожалениÑ, Ñ Ð½Ðµ Ð¼Ð¾Ð³Ñ Ð¿ÑоÑÑо довеÑÑÑÑ PR-ам ÑолÑко поÑомÑ, ÑÑо Ñ Ð½Ð¸Ñ
еÑÑÑ Ð½ÐµÑколÑко одобÑений.
-ÐÑвали ÑлÑÑаи, ÑÑо пÑл-ÑеквеÑÑÑ Ð¸Ð¼ÐµÐ»Ð¸ 3, 5 или болÑÑе одобÑений, веÑоÑÑно из-за пÑивлекаÑелÑного опиÑаниÑ, но когда Ñ Ð¿ÑовеÑÑл ÑÑи пÑл-ÑеквеÑÑÑ, они оказÑвалиÑÑ ÑломанÑ, ÑодеÑжали оÑибки или вовÑе не ÑеÑали пÑоблемÑ, коÑоÑÑÑ, как они ÑÑвеÑждали, Ð´Ð¾Ð»Ð¶Ð½Ñ Ð±Ñли ÑеÑиÑÑ. ð
+ÐеÑколÑко Ñаз бÑло Ñак, ÑÑо Ñ PR-ов бÑло 3, 5 или болÑÑе одобÑений, веÑоÑÑно из-за пÑивлекаÑелÑного опиÑаниÑ, но когда Ñ Ð¸Ñ
пÑовеÑÑл, они оказÑвалиÑÑ ÑломаннÑми, ÑодеÑжали баги или вовÑе не ÑеÑали заÑвленнÑÑ Ð¿ÑоблемÑ. ð
-ÐоÑÐ¾Ð¼Ñ ÑÑо дейÑÑвиÑелÑно важно - пÑовеÑÑÑÑ Ð¸ запÑÑкаÑÑ ÐºÐ¾Ð´, и комменÑаÑием ÑведомлÑÑÑ Ð¼ÐµÐ½Ñ, ÑÑо ÐÑ Ð¿Ñоделали ÑÑи дейÑÑвиÑ. ð¤
+ÐоÑÑÐ¾Ð¼Ñ Ð¾ÑÐµÐ½Ñ Ð²Ð°Ð¶Ð½Ð¾ дейÑÑвиÑелÑно пÑоÑиÑаÑÑ Ð¸ запÑÑÑиÑÑ ÐºÐ¾Ð´ и ÑообÑиÑÑ Ð¼Ð½Ðµ об ÑÑом в комменÑаÑии. ð¤
///
-* ÐÑли ÐÑ ÑÑиÑаеÑе, ÑÑо пÑл-ÑеквеÑÑ Ð¼Ð¾Ð¶Ð½Ð¾ ÑпÑоÑÑиÑÑ, Ñо можеÑе попÑоÑиÑÑ Ð¾Ð± ÑÑом, но не нÑжно бÑÑÑ ÑлиÑком пÑидиÑÑивÑм, Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¼Ð½Ð¾Ð³Ð¾ ÑÑбÑекÑивнÑÑ
ÑоÑек зÑÐµÐ½Ð¸Ñ (и Ñ Ð¼ÐµÐ½Ñ Ñоже бÑÐ´ÐµÑ ÑÐ²Ð¾Ñ ð), поÑÑÐ¾Ð¼Ñ Ð±ÑÐ´ÐµÑ Ð»ÑÑÑе, еÑли ÐÑ ÑоÑÑедоÑоÑиÑеÑÑ Ð½Ð° ÑÑндаменÑалÑнÑÑ
веÑаÑ
.
+* ÐÑли PR можно ÑпÑоÑÑиÑÑ, ÐÑ Ð¼Ð¾Ð¶ÐµÑе попÑоÑиÑÑ Ð¾Ð± ÑÑом, но не нÑжно бÑÑÑ ÑлиÑком пÑидиÑÑивÑм â Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¼Ð½Ð¾Ð³Ð¾ ÑÑбÑекÑивнÑÑ
мнений (и Ñ Ð¼ÐµÐ½Ñ Ñоже ð), поÑÑÐ¾Ð¼Ñ Ð»ÑÑÑе ÑоÑÑедоÑоÑиÑÑÑÑ Ð½Ð° ÑÑндаменÑалÑнÑÑ
веÑаÑ
.
-### ТеÑÑиÑоваÑÑ
+### ТеÑÑиÑоваÑÑ { #tests }
-* ÐомогиÑе мне пÑовеÑиÑÑ, ÑÑо Ñ Ð¿Ñл-ÑеквеÑÑа еÑÑÑ **ÑеÑÑÑ**.
+* ÐомогиÑе мне пÑовеÑиÑÑ, ÑÑо Ñ PR еÑÑÑ **ÑеÑÑÑ**.
-* ÐÑовеÑÑÑе, ÑÑо ÑеÑÑÑ **падали** до пÑл-ÑеквеÑÑа. ð¨
+* ÐÑовеÑÑÑе, ÑÑо ÑеÑÑÑ **падаÑÑ** до PR. ð¨
-* ÐаÑем пÑовеÑÑÑе, ÑÑо ÑеÑÑÑ **не валÑÑÑÑ** поÑле пÑл-ÑеквеÑÑа. â
+* ÐаÑем пÑовеÑÑÑе, ÑÑо ÑеÑÑÑ **пÑоÑ
одÑÑ** поÑле PR. â
-* Ðногие пÑл-ÑеквеÑÑÑ Ð½Ðµ имеÑÑ ÑеÑÑов, ÐÑ Ð¼Ð¾Ð¶ÐµÑе **напомниÑÑ** о необÑ
одимоÑÑи Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ ÑеÑÑов или даже **пÑедложиÑÑ** какие-либо Ñвои ÑеÑÑÑ. ÐÑо одна из ÑеÑ
веÑей, коÑоÑÑе оÑнимаÑÑ Ð¼Ð½Ð¾Ð³Ð¾ вÑемени и ÐÑ Ð¼Ð¾Ð¶ÐµÑе помоÑÑ Ñ ÑÑим.
+* Ðногие PR не имеÑÑ ÑеÑÑов â ÐÑ Ð¼Ð¾Ð¶ÐµÑе **напомниÑÑ** добавиÑÑ ÑеÑÑÑ Ð¸Ð»Ð¸ даже **пÑедложиÑÑ** некоÑоÑÑе ÑеÑÑÑ Ñами. ÐÑо одна из ÑамÑÑ
ÑÑÑдозаÑÑаÑнÑÑ
ÑаÑÑей, и здеÑÑ ÐÑ Ð¼Ð¾Ð¶ÐµÑе оÑÐµÐ½Ñ Ð¿Ð¾Ð¼Ð¾ÑÑ.
-* ÐаÑем добавÑÑе комменÑаÑий, ÑÑо ÐÑ Ð¸ÑпÑобовали в Ñ
оде пÑовеÑки. Таким обÑазом Ñ Ð±ÑÐ´Ñ Ð·Ð½Ð°ÑÑ, как ÐÑ Ð¿Ñоизвели пÑовеÑкÑ. ð¤
+* ÐаÑем добавÑÑе комменÑаÑий, ÑÑо ÐÑ Ð¿Ð¾Ð¿Ñобовали, ÑÑÐ¾Ð±Ñ Ñ Ð·Ð½Ð°Ð», ÑÑо ÐÑ ÑÑо пÑовеÑили. ð¤
-## СоздаÑÑ Ð¿Ñл-ÑеквеÑÑ
+## СоздаÑÑ Ð¿Ñлл-ÑеквеÑÑ { #create-a-pull-request }
-ÐÑ Ð¼Ð¾Ð¶ÐµÑе [ÑделаÑÑ Ð²ÐºÐ»Ð°Ð´](contributing.md){.internal-link target=_blank} в код ÑÑеймвоÑка иÑполÑзÑÑ Ð¿Ñл-ÑеквеÑÑÑ, напÑимеÑ:
+ÐÑ Ð¼Ð¾Ð¶ÐµÑе [ÑделаÑÑ Ð²ÐºÐ»Ð°Ð´](contributing.md){.internal-link target=_blank} в иÑÑ
однÑй код пÑлл-ÑеквеÑÑами, напÑимеÑ:
-* ÐÑпÑавиÑÑ Ð¾Ð¿ÐµÑаÑкÑ, коÑоÑÑÑ ÐÑ Ð½Ð°Ñли в докÑменÑаÑии.
-* ÐоделиÑÑÑÑ ÑÑаÑÑÑй, видео или подкаÑÑом о FastAPI, коÑоÑÑе ÐÑ Ñоздали или наÑли изменив ÑÑÐ¾Ñ Ñайл.
- * УбедиÑеÑÑ, ÑÑо ÐÑ Ð´Ð¾Ð±Ð°Ð²Ð¸Ð»Ð¸ ÑÐ²Ð¾Ñ ÑÑÑÐ»ÐºÑ Ð² наÑало ÑооÑвеÑÑÑвÑÑÑего Ñаздела.
-* ÐомоÑÑ Ñ [пеÑеводом докÑменÑаÑии](contributing.md#_8){.internal-link target=_blank} на ÐÐ°Ñ ÑзÑк.
- * ÐÑ Ñакже можеÑе пÑовеÑÑÑÑ Ð¿ÐµÑÐµÐ²Ð¾Ð´Ñ ÑделаннÑе дÑÑгими.
+* ÐÑпÑавиÑÑ Ð¾Ð¿ÐµÑаÑкÑ, найденнÑÑ Ð² докÑменÑаÑии.
+* ÐоделиÑÑÑÑ ÑÑаÑÑÑй, видео или подкаÑÑом о FastAPI, коÑоÑÑе ÐÑ Ñоздали или наÑли, изменив ÑÑÐ¾Ñ Ñайл.
+ * УбедиÑеÑÑ, ÑÑо добавили ÑÐ²Ð¾Ñ ÑÑÑÐ»ÐºÑ Ð² наÑало ÑооÑвеÑÑÑвÑÑÑего Ñаздела.
+* ÐомоÑÑ Ñ [пеÑеводом докÑменÑаÑии](contributing.md#translations){.internal-link target=_blank} на ÐÐ°Ñ ÑзÑк.
+ * ÐÑ Ñакже можеÑе пÑовеÑÑÑÑ Ð¿ÐµÑеводÑ, ÑделаннÑе дÑÑгими.
* ÐÑедложиÑÑ Ð½Ð¾Ð²Ñе ÑÐ°Ð·Ð´ÐµÐ»Ñ Ð´Ð¾ÐºÑменÑаÑии.
-* ÐÑпÑавиÑÑ ÑÑÑеÑÑвÑÑÑÑе пÑоблемÑ/баги.
+* ÐÑпÑавиÑÑ ÑÑÑеÑÑвÑÑÑÑÑ Ð¿ÑоблемÑ/баг.
* УбедиÑеÑÑ, ÑÑо добавили ÑеÑÑÑ.
* ÐобавиÑÑ Ð½Ð¾Ð²ÑÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑÑ.
* УбедиÑеÑÑ, ÑÑо добавили ÑеÑÑÑ.
- * УбедиÑеÑÑ, ÑÑо добавили докÑменÑаÑиÑ, еÑли она необÑ
одима.
+ * УбедиÑеÑÑ, ÑÑо добавили докÑменÑаÑиÑ, еÑли ÑÑо ÑмеÑÑно.
-## ÐомоÑÑ Ð¿Ð¾Ð´Ð´ÐµÑживаÑÑ FastAPI
+## ÐомоÑÑ Ð¿Ð¾Ð´Ð´ÐµÑживаÑÑ FastAPI { #help-maintain-fastapi }
ÐомогиÑе мне поддеÑживаÑÑ **FastAPI**! ð¤
-ÐÑедÑÑÐ¾Ð¸Ñ ÐµÑÑ Ð¼Ð½Ð¾Ð³Ð¾ ÑабоÑÑ Ð¸, по болÑÑей ÑаÑÑи, **ÐЫ** можеÑе ÐµÑ ÑделаÑÑ.
+ÐÑедÑÑÐ¾Ð¸Ñ ÐµÑÑ Ð¼Ð½Ð¾Ð³Ð¾ ÑабоÑÑ, и, по болÑÑей ÑаÑÑи, **ÐЫ** можеÑе ÐµÑ ÑделаÑÑ.
ÐÑновнÑе задаÑи, коÑоÑÑе ÐÑ Ð¼Ð¾Ð¶ÐµÑе вÑполниÑÑ Ð¿ÑÑмо ÑейÑаÑ:
-* [ÐомоÑÑ Ð´ÑÑгим Ñ Ð¸Ñ
пÑоблемами на GitHub](#github_1){.internal-link target=_blank} (ÑмоÑÑиÑе вÑÑеÑÑоÑÑÑÑ ÑекÑиÑ).
-* [ÐÑовеÑиÑÑ Ð¿Ñл-ÑеквеÑÑÑ](#-){.internal-link target=_blank} (ÑмоÑÑиÑе вÑÑеÑÑоÑÑÑÑ ÑекÑиÑ).
+* [ÐомоÑÑ Ð´ÑÑгим Ñ Ð²Ð¾Ð¿ÑоÑами на GitHub](#help-others-with-questions-in-github){.internal-link target=_blank} (ÑмоÑÑиÑе ÑекÑÐ¸Ñ Ð²ÑÑе).
+* [ÐÑовеÑÑÑÑ Ð¿Ñлл-ÑеквеÑÑÑ](#review-pull-requests){.internal-link target=_blank} (ÑмоÑÑиÑе ÑекÑÐ¸Ñ Ð²ÑÑе).
-ÐÑи две задаÑи **оÑнимаÑÑ Ð±Ð¾Ð»ÑÑе вÑего вÑемени**. ÐÑо оÑÐ½Ð¾Ð²Ð½Ð°Ñ ÑабоÑа по поддеÑжке FastAPI.
+Ðменно ÑÑи две задаÑи **забиÑаÑÑ Ð±Ð¾Ð»ÑÑе вÑего вÑемени**. ÐÑо оÑÐ½Ð¾Ð²Ð½Ð°Ñ ÑабоÑа по поддеÑжке FastAPI.
-ÐÑли ÐÑ Ð¼Ð¾Ð¶ÐµÑе помоÑÑ Ð¼Ð½Ðµ Ñ ÑÑим, **ÐÑ Ð¿Ð¾Ð¼Ð¾Ð³Ð°ÐµÑе поддеÑживаÑÑ FastAPI** и ÑледиÑÑ Ð·Ð° Ñем, ÑÑÐ¾Ð±Ñ Ð¾Ð½ пÑодолжал **ÑазвиваÑÑÑÑ Ð±ÑÑÑÑее и лÑÑÑе**. ð
+ÐÑли ÐÑ Ð¼Ð¾Ð¶ÐµÑе помоÑÑ Ð¼Ð½Ðµ Ñ ÑÑим, **ÐÑ Ð¿Ð¾Ð¼Ð¾Ð³Ð°ÐµÑе поддеÑживаÑÑ FastAPI** и делаеÑе Ñак, ÑÑÐ¾Ð±Ñ Ð¾Ð½ пÑодолжал **ÑазвиваÑÑÑÑ Ð±ÑÑÑÑее и лÑÑÑе**. ð
-## ÐодклÑÑиÑÑÑÑ Ðº ÑаÑÑ
+## ÐодклÑÑиÑÑÑÑ Ðº ÑаÑÑ { #join-the-chat }
-ÐодклÑÑайÑеÑÑ Ðº ð¥ ÑаÑÑ Ð² Discord ð¥ и обÑайÑеÑÑ Ñ Ð´ÑÑгими ÑÑаÑÑниками ÑообÑеÑÑва FastAPI.
+ÐодклÑÑайÑеÑÑ Ðº ð¥ ÑеÑвеÑÑ ÑаÑа в Discord ð¥ и обÑайÑеÑÑ Ñ Ð´ÑÑгими ÑÑаÑÑниками ÑообÑеÑÑва FastAPI.
/// tip | ÐодÑказка
-ÐопÑоÑÑ Ð¿Ð¾ пÑоблемам Ñ ÑÑеймвоÑком лÑÑÑе задаваÑÑ Ð² GitHub issues, Ñак болÑÑе ÑанÑов, ÑÑо ÐÑ Ð¿Ð¾Ð»ÑÑиÑе помоÑÑ Ð¾Ñ [ÐкÑпеÑÑов FastAPI](fastapi-people.md#_3){.internal-link target=_blank}.
+Ðо вопÑоÑам â задавайÑе иÑ
в GitHub Discussions, Ñак гоÑаздо вÑÑе ÑанÑ, ÑÑо ÐÑ Ð¿Ð¾Ð»ÑÑиÑе помоÑÑ Ð¾Ñ [ÐкÑпеÑÑов FastAPI](fastapi-people.md#fastapi-experts){.internal-link target=_blank}.
-ÐÑполÑзÑйÑе ÑÑÐ¾Ñ ÑÐ°Ñ ÑолÑко Ð´Ð»Ñ Ð±ÐµÑед на оÑвлеÑÑннÑе ÑемÑ.
+ÐÑполÑзÑйÑе ÑÐ°Ñ ÑолÑко Ð´Ð»Ñ Ð¿ÑоÑиÑ
обÑиÑ
беÑед.
///
-### Ðе иÑполÑзоваÑÑ ÑаÑÑ Ð´Ð»Ñ Ð²Ð¾Ð¿ÑоÑов
-
-ÐмейÑе в видÑ, ÑÑо ÑаÑÑ Ð¿Ð¾Ð·Ð²Ð¾Ð»ÑÑÑ Ð±Ð¾Ð»ÑÑе "Ñвободного обÑениÑ", поÑÐ¾Ð¼Ñ Ñам легко задаваÑÑ Ð²Ð¾Ð¿ÑоÑÑ, коÑоÑÑе ÑлиÑком обÑие и на коÑоÑÑе ÑÑÑднее оÑвеÑиÑÑ, Ñак ÑÑо ÐÑ Ð¼Ð¾Ð¶ÐµÑе не полÑÑиÑÑ Ð½ÑжнÑе Ðам оÑвеÑÑ.
-
-Ð Ñазделе "пÑоблемÑ" на GitHub, еÑÑÑ Ñаблон, коÑоÑÑй Ð¿Ð¾Ð¼Ð¾Ð¶ÐµÑ Ðам напиÑаÑÑ Ð²Ð¾Ð¿ÑÐ¾Ñ Ð¿ÑавилÑно, ÑÑÐ¾Ð±Ñ Ðам бÑло легÑе полÑÑиÑÑ Ñ
оÑоÑий оÑÐ²ÐµÑ Ð¸Ð»Ð¸ даже ÑеÑиÑÑ Ð¿ÑÐ¾Ð±Ð»ÐµÐ¼Ñ ÑамоÑÑоÑÑелÑно, пÑежде Ñем ÐÑ Ð·Ð°Ð´Ð°Ð´Ð¸Ñе вопÑоÑ. Ð GitHub Ñ Ð¼Ð¾Ð³Ñ Ð±ÑÑÑ ÑвеÑен, ÑÑо вÑегда оÑвеÑÐ°Ñ Ð½Ð° вÑÑ, даже еÑли ÑÑо Ð·Ð°Ð¹Ð¼ÐµÑ ÐºÐ°ÐºÐ¾Ðµ-Ñо вÑемÑ. Ð Ñ Ð½Ðµ Ð¼Ð¾Ð³Ñ ÑделаÑÑ Ñо же Ñамое в ÑаÑаÑ
. ð
-
-ÐÑоме Ñого, обÑение в ÑаÑаÑ
не Ñак легкодоÑÑÑпно Ð´Ð»Ñ Ð¿Ð¾Ð¸Ñка, как в GitHub, поÑÐ¾Ð¼Ñ Ð²Ð¾Ð¿ÑоÑÑ Ð¸ оÑвеÑÑ Ð¼Ð¾Ð³ÑÑ Ð¿Ð¾ÑеÑÑÑÑÑÑ ÑÑеди дÑÑгого обÑениÑ. Ð ÑолÑко пÑÐ¾Ð±Ð»ÐµÐ¼Ñ ÑеÑаемÑе на GitHub ÑÑиÑÑваÑÑÑÑ Ð² полÑÑении лÑÑки [ÐкÑпеÑÑ FastAPI](fastapi-people.md#_3){.internal-link target=_blank}, Ñак ÑÑо веÑÑма веÑоÑÑно, ÑÑо ÐÑ Ð¿Ð¾Ð»ÑÑиÑе болÑÑе Ð²Ð½Ð¸Ð¼Ð°Ð½Ð¸Ñ Ð½Ð° GitHub.
-
-С дÑÑгой ÑÑоÑонÑ, в ÑаÑаÑ
ÑÑÑÑÑи полÑзоваÑелей, а знаÑÐ¸Ñ ÐµÑÑÑ Ð±Ð¾Ð»ÑÑие ÑанÑÑ Ð² лÑбое вÑÐµÐ¼Ñ Ð½Ð°Ð¹Ñи Ñам кого-Ñо, Ñ ÐºÐµÐ¼ можно поговоÑиÑÑ. ð
-
-## СпонÑиÑоваÑÑ Ð°Ð²ÑоÑа
-
-ÐÑ Ñакже можеÑе оказаÑÑ Ð¼Ð½Ðµ ÑинанÑовÑÑ Ð¿Ð¾Ð´Ð´ÐµÑÐ¶ÐºÑ Ð¿Ð¾ÑÑедÑÑвом ÑпонÑоÑÑÑва ÑеÑез GitHub.
+### Ðе иÑполÑзÑйÑе ÑÐ°Ñ Ð´Ð»Ñ Ð²Ð¾Ð¿ÑоÑов { #dont-use-the-chat-for-questions }
-Там можно пÑоÑÑо кÑпиÑÑ Ð¼Ð½Ðµ коÑе âï¸ Ð² знак благодаÑноÑÑи. ð
+ÐмейÑе в видÑ, ÑÑо в ÑаÑаÑ
, благодаÑÑ "ÑÐ²Ð¾Ð±Ð¾Ð´Ð½Ð¾Ð¼Ñ Ð¾Ð±ÑениÑ", легко задаÑÑ Ð²Ð¾Ð¿ÑоÑÑ, коÑоÑÑе ÑлиÑком обÑие и на коÑоÑÑе Ñложнее оÑвеÑиÑÑ, поÑÑÐ¾Ð¼Ñ ÐÑ Ð¼Ð¾Ð¶ÐµÑе не полÑÑиÑÑ Ð¾ÑвеÑÑ.
-РеÑÑ ÐÑ Ð¼Ð¾Ð¶ÐµÑе ÑÑаÑÑ Ð¡ÐµÑебÑÑнÑм или ÐолоÑÑм ÑпонÑоÑом Ð´Ð»Ñ FastAPI. ð
ð
+Ðа GitHub Ñаблон Ð¿Ð¾Ð¼Ð¾Ð¶ÐµÑ Ðам пÑавилÑно ÑÑоÑмÑлиÑоваÑÑ Ð²Ð¾Ð¿ÑоÑ, ÑÑÐ¾Ð±Ñ Ðам бÑло легÑе полÑÑиÑÑ Ñ
оÑоÑий оÑÐ²ÐµÑ Ð¸Ð»Ð¸ даже ÑеÑиÑÑ Ð¿ÑÐ¾Ð±Ð»ÐµÐ¼Ñ ÑамоÑÑоÑÑелÑно еÑÑ Ð´Ð¾ Ñого, как ÑпÑоÑиÑе. Рна GitHub Ñ Ð¼Ð¾Ð³Ñ ÑледиÑÑ Ð·Ð° Ñем, ÑÑÐ¾Ð±Ñ Ð²Ñегда оÑвеÑаÑÑ Ð½Ð° вÑÑ, даже еÑли ÑÑо Ð·Ð°Ð½Ð¸Ð¼Ð°ÐµÑ Ð²ÑемÑ. Ð Ñ ÑаÑами Ñ Ð½Ðµ Ð¼Ð¾Ð³Ñ ÑделаÑÑ ÑÑого лиÑно. ð
-## СпонÑиÑоваÑÑ Ð¸Ð½ÑÑÑÑменÑÑ, на коÑоÑÑÑ
зиждеÑÑÑ Ð¼Ð¾ÑÑ FastAPI
+ÐÑоме Ñого, пеÑепиÑка в ÑаÑаÑ
Ñ
Ñже иÑеÑÑÑ, Ñем на GitHub, поÑÑÐ¾Ð¼Ñ Ð²Ð¾Ð¿ÑоÑÑ Ð¸ оÑвеÑÑ Ð¼Ð¾Ð³ÑÑ ÑеÑÑÑÑÑÑ ÑÑеди оÑÑалÑнÑÑ
ÑообÑений. Ð ÑолÑко Ñе, ÑÑо на GitHub, ÑÑиÑÑваÑÑÑÑ Ð´Ð»Ñ Ð¿Ð¾Ð»ÑÑÐµÐ½Ð¸Ñ Ð»ÑÑки [ÐкÑпеÑÑ FastAPI](fastapi-people.md#fastapi-experts){.internal-link target=_blank}, Ñак ÑÑо веÑоÑÑнее вÑего ÐÑ Ð¿Ð¾Ð»ÑÑиÑе болÑÑе Ð²Ð½Ð¸Ð¼Ð°Ð½Ð¸Ñ Ð¸Ð¼ÐµÐ½Ð½Ð¾ на GitHub.
-Ðак ÐÑ Ð¼Ð¾Ð³Ð»Ð¸ замеÑиÑÑ Ð² докÑменÑаÑии, FastAPI опиÑаеÑÑÑ Ð½Ð° плеÑи ÑиÑанов: Starlette и Pydantic.
+С дÑÑгой ÑÑоÑонÑ, в ÑаÑаÑ
ÑÑÑÑÑи полÑзоваÑелей, Ñак ÑÑо поÑÑи вÑегда еÑÑÑ ÑÐ°Ð½Ñ Ð½Ð°Ð¹Ñи Ñам кого-Ñо Ð´Ð»Ñ ÑазговоÑа. ð
-Ðм Ñоже можно оказаÑÑ ÑпонÑоÑÑкÑÑ Ð¿Ð¾Ð´Ð´ÐµÑжкÑ:
+## СпонÑиÑоваÑÑ Ð°Ð²ÑоÑа { #sponsor-the-author }
-* Samuel Colvin (Pydantic)
-* Encode (Starlette, Uvicorn)
+ÐÑли ÐÐ°Ñ **пÑодÑкÑ/компаниÑ** завиÑÑÑ Ð¾Ñ **FastAPI** или ÑвÑÐ·Ð°Ð½Ñ Ñ Ð½Ð¸Ð¼ и ÐÑ Ñ
оÑиÑе донеÑÑи до полÑзоваÑелей инÑоÑмаÑÐ¸Ñ Ð¾ Ñебе, ÐÑ Ð¼Ð¾Ð¶ÐµÑе ÑпонÑиÑоваÑÑ Ð°Ð²ÑоÑа (менÑ) ÑеÑез GitHub Sponsors. РзавиÑимоÑÑи Ð¾Ñ ÑÑÐ¾Ð²Ð½Ñ Ð¿Ð¾Ð´Ð´ÐµÑжки ÐÑ Ð¼Ð¾Ð¶ÐµÑе полÑÑиÑÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑе бонÑÑÑ, напÑимеÑ, бейдж в докÑменÑаÑии. ð
---
-ÐлагодаÑÑÑвÑÑ! ð
+СпаÑибо! ð
diff --git a/docs/ru/docs/history-design-future.md b/docs/ru/docs/history-design-future.md
index 96604e3a4e..d679af3e37 100644
--- a/docs/ru/docs/history-design-future.md
+++ b/docs/ru/docs/history-design-future.md
@@ -1,4 +1,4 @@
-# ÐÑÑоÑÐ¸Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¸ далÑнейÑее ÑазвиÑие
+# ÐÑÑоÑиÑ, пÑоекÑиÑование и бÑдÑÑее { #history-design-and-future }
ÐднаждÑ, один из полÑзоваÑелей **FastAPI** задал вопÑоÑ:
@@ -6,7 +6,7 @@
ЧÑо ж, Ð²Ð¾Ñ Ð½ÐµÐ±Ð¾Ð»ÑÑÐ°Ñ ÑаÑÑÑ Ð¸ÑÑоÑии пÑоекÑа.
-## ÐлÑÑеÑнаÑивÑ
+## ÐлÑÑеÑнаÑÐ¸Ð²Ñ { #alternatives }
Ð ÑеÑение неÑколÑкиÑ
Ð»ÐµÑ Ñ, возглавлÑÑ ÑазлиÑнÑе ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ ÑазÑабоÑÑиков, Ñоздавал доволÑно ÑложнÑе API Ð´Ð»Ñ Ð¼Ð°Ñинного обÑÑениÑ, ÑаÑпÑеделÑннÑÑ
ÑиÑÑем, аÑинÑ
ÑоннÑÑ
задаÑ, баз даннÑÑ
NoSQL и Ñ.д.
@@ -24,45 +24,47 @@
Я вÑÑÑеÑки избегал ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð½Ð¾Ð²Ð¾Ð³Ð¾ ÑÑеймвоÑка в ÑеÑение неÑколÑкиÑ
леÑ. СнаÑала Ñ Ð¿ÑÑалÑÑ ÑобÑаÑÑ Ð²Ñе нÑжнÑе возможноÑÑи, коÑоÑÑе нÑне еÑÑÑ Ð² **FastAPI**, иÑполÑзÑÑ Ð¼Ð½Ð¾Ð¶ÐµÑÑво ÑазлиÑнÑÑ
ÑÑеймвоÑков, плагинов и инÑÑÑÑменÑов.
-Ðо в какой-Ñо Ð¼Ð¾Ð¼ÐµÐ½Ñ Ð½Ðµ оÑÑалоÑÑ Ð´ÑÑгого вÑбоÑа, кÑоме как ÑоздаÑÑ ÑÑо-Ñо, ÑÑо пÑедоÑÑавлÑло Ð±Ñ Ð²Ñе ÑÑи возможноÑÑи ÑÑазÑ. ÐзÑÑÑ ÑамÑе лÑÑÑие идеи из пÑедÑдÑÑиÑ
инÑÑÑÑменÑов и, иÑполÑзÑÑ Ð²Ð²ÐµÐ´ÑннÑе в Python подÑказки Ñипов (коÑоÑÑÑ
не бÑло до веÑÑии 3.6), обÑединиÑÑ Ð¸Ñ
.
+Ðо в какой-Ñо Ð¼Ð¾Ð¼ÐµÐ½Ñ Ð½Ðµ оÑÑалоÑÑ Ð´ÑÑгого вÑбоÑа, кÑоме как ÑоздаÑÑ ÑÑо-Ñо, ÑÑо пÑедоÑÑавлÑло Ð±Ñ Ð²Ñе ÑÑи возможноÑÑи ÑÑазÑ. ÐзÑÑÑ ÑамÑе лÑÑÑие идеи из пÑедÑдÑÑиÑ
инÑÑÑÑменÑов и, иÑполÑзÑÑ Ð²Ð²ÐµÐ´ÑннÑе в Python анноÑаÑии Ñипов (коÑоÑÑÑ
не бÑло до веÑÑии 3.6), обÑединиÑÑ Ð¸Ñ
.
-## ÐÑÑледованиÑ
+## ÐÑÑÐ»ÐµÐ´Ð¾Ð²Ð°Ð½Ð¸Ñ { #investigation }
ÐлагодаÑÑ Ð¾Ð¿ÑÑÑ Ð¸ÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ ÑÑÑеÑÑвÑÑÑиÑ
алÑÑеÑнаÑив, Ð¼Ñ Ñ ÐºÐ¾Ð»Ð»ÐµÐ³Ð°Ð¼Ð¸ изÑÑили иÑ
оÑновнÑе идеи и ÑкомбиниÑовали ÑобÑаннÑе Ð·Ð½Ð°Ð½Ð¸Ñ Ð½Ð°Ð¸Ð»ÑÑÑим обÑазом.
-ÐапÑимеÑ, ÑÑало ÑÑно, ÑÑо необÑ
одимо бÑаÑÑ Ð·Ð° оÑÐ½Ð¾Ð²Ñ ÑÑандаÑÑнÑе подÑказки Ñипов Python, а ÑамÑм лÑÑÑим подÑ
одом ÑвлÑеÑÑÑ Ð¸ÑполÑзование Ñже ÑÑÑеÑÑвÑÑÑиÑ
ÑÑандаÑÑов.
+ÐапÑимеÑ, ÑÑало ÑÑно, ÑÑо необÑ
одимо бÑаÑÑ Ð·Ð° оÑÐ½Ð¾Ð²Ñ ÑÑандаÑÑнÑе анноÑаÑии Ñипов Python.
+
+Также наилÑÑÑим подÑ
одом ÑвлÑеÑÑÑ Ð¸ÑполÑзование Ñже ÑÑÑеÑÑвÑÑÑиÑ
ÑÑандаÑÑов.
ÐÑак, пÑежде Ñем пÑиÑÑÑпиÑÑ Ðº напиÑÐ°Ð½Ð¸Ñ **FastAPI**, Ñ Ð¿Ð¾ÑÑаÑил неÑколÑко меÑÑÑев на изÑÑение OpenAPI, JSON Schema, OAuth2, и Ñ.п. Ð´Ð»Ñ Ð¿Ð¾Ð½Ð¸Ð¼Ð°Ð½Ð¸Ñ Ð¸Ñ
взаимоÑвÑзей, Ñовпадений и ÑазлиÑий.
-## Ðизайн
+## ÐÑоекÑиÑование { #design }
ÐаÑем Ñ Ð¿Ð¾ÑÑаÑил некоÑоÑое вÑÐµÐ¼Ñ Ð½Ð° пÑидÑмÑвание "API" ÑазÑабоÑÑика, коÑоÑÑй Ñ Ñ
оÑел имеÑÑ ÐºÐ°Ðº полÑзоваÑÐµÐ»Ñ (как ÑазÑабоÑÑик, иÑполÑзÑÑÑий FastAPI).
-Я пÑовеÑил неÑколÑко идей на ÑамÑÑ
попÑлÑÑнÑÑ
ÑедакÑоÑаÑ
кода ÑÑеди Python-ÑазÑабоÑÑиков: PyCharm, VS Code, Jedi.
+Я пÑовеÑил неÑколÑко идей на ÑамÑÑ
попÑлÑÑнÑÑ
ÑедакÑоÑаÑ
кода: PyCharm, VS Code, ÑедакÑоÑÑ Ð½Ð° базе Jedi.
-ÐаннÑе по ÑедакÑоÑам Ñ Ð²Ð·Ñл из опÑоÑа Python-ÑазÑабоÑÑиков, коÑоÑÑй оÑ
ваÑÑÐ²Ð°Ð°ÐµÑ Ð¾ÐºÐ¾Ð»Ð¾ 80% полÑзоваÑелей.
+ÐаннÑе по ÑедакÑоÑам Ñ Ð²Ð·Ñл из опÑоÑа Python-ÑазÑабоÑÑиков, коÑоÑÑй оÑ
ваÑÑÐ²Ð°ÐµÑ Ð¾ÐºÐ¾Ð»Ð¾ 80% полÑзоваÑелей.
ÐÑо ознаÑаеÑ, ÑÑо **FastAPI** бÑл ÑпеÑиалÑно пÑовеÑен на ÑедакÑоÑаÑ
, иÑполÑзÑемÑÑ
80% Python-ÑазÑабоÑÑиками. РпоÑколÑÐºÑ Ð±Ð¾Ð»ÑÑинÑÑво дÑÑгиÑ
ÑедакÑоÑов, как пÑавило, ÑабоÑаÑÑ Ð°Ð½Ð°Ð»Ð¾Ð³Ð¸ÑнÑм обÑазом, вÑе его пÑеимÑÑеÑÑва Ð´Ð¾Ð»Ð¶Ð½Ñ ÑабоÑаÑÑ Ð¿ÑакÑиÑеÑки Ð´Ð»Ñ Ð²ÑеÑ
ÑедакÑоÑов.
-Таким обÑазом, Ñ Ñмог найÑи наилÑÑÑие ÑпоÑÐ¾Ð±Ñ ÑокÑаÑиÑÑ Ð´ÑблиÑование кода, обеÑпеÑиÑÑ Ð¿Ð¾Ð²ÑемеÑÑное авÑодополнение, пÑовеÑÐºÑ Ñипов и оÑибок и Ñ.д.
+Таким обÑазом, Ñ Ñмог найÑи наилÑÑÑие ÑпоÑÐ¾Ð±Ñ ÑокÑаÑиÑÑ Ð´ÑблиÑование кода, обеÑпеÑиÑÑ Ð¿Ð¾Ð²ÑемеÑÑное авÑозавеÑÑение, пÑовеÑÐºÑ Ñипов и оÑибок и Ñ.д.
РвÑе ÑÑо, ÑÑÐ¾Ð±Ñ Ð²Ñе полÑзоваÑели могли полÑÑаÑÑ Ð½Ð°Ð¸Ð»ÑÑÑий опÑÑ ÑазÑабоÑки.
-## ÐавиÑимоÑÑи
+## ÐавиÑимоÑÑи { #requirements }
ÐÑоÑеÑÑиÑовав неÑколÑко ваÑианÑов, Ñ ÑеÑил, ÑÑо в каÑеÑÑве оÑÐ½Ð¾Ð²Ñ Ð±ÑÐ´Ñ Ð¸ÑполÑзоваÑÑ **Pydantic** и его пÑеимÑÑеÑÑва.
-Ðо моим пÑедложениÑм бÑл изменÑн код ÑÑого ÑÑеймвоÑка, ÑÑÐ¾Ð±Ñ ÑделаÑÑ ÐµÐ³Ð¾ полноÑÑÑÑ ÑовмеÑÑимÑм Ñ JSON Schema, поддеÑжаÑÑ ÑазлиÑнÑе ÑпоÑÐ¾Ð±Ñ Ð¾Ð¿ÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ð¾Ð³ÑаниÑений и ÑлÑÑÑиÑÑ Ð¿Ð¾Ð¼Ð¾ÑÑ ÑедакÑоÑов (пÑовеÑки Ñипов, авÑозаполнение).
+Ðо моим пÑедложениÑм бÑл изменÑн код ÑÑого ÑÑеймвоÑка, ÑÑÐ¾Ð±Ñ ÑделаÑÑ ÐµÐ³Ð¾ полноÑÑÑÑ ÑовмеÑÑимÑм Ñ JSON Schema, поддеÑжаÑÑ ÑазлиÑнÑе ÑпоÑÐ¾Ð±Ñ Ð¾Ð¿ÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ð¾Ð³ÑаниÑений и ÑлÑÑÑиÑÑ Ð¿Ð¾Ð´Ð´ÐµÑÐ¶ÐºÑ Ð² ÑедакÑоÑаÑ
кода (пÑовеÑки Ñипов, авÑозавеÑÑение) на оÑнове ÑеÑÑов в неÑколÑкиÑ
ÑедакÑоÑаÑ
.
Ð Ñо же вÑемÑ, Ñ Ð¿Ñинимал ÑÑаÑÑие в ÑазÑабоÑке **Starlette**, еÑÑ Ð¾Ð´Ð¸Ð½ из оÑновнÑÑ
компоненÑов FastAPI.
-## РазÑабоÑка
+## РазÑабоÑка { #development }
Ð ÑÐ¾Ð¼Ñ Ð²Ñемени, когда Ñ Ð½Ð°Ñал ÑоздаваÑÑ **FastAPI**, болÑÑинÑÑво необÑ
одимÑÑ
деÑалей Ñже ÑÑÑеÑÑвовало, дизайн бÑл опÑеделÑн, завиÑимоÑÑи и пÑоÑие инÑÑÑÑменÑÑ Ð±Ñли гоÑовÑ, а Ð·Ð½Ð°Ð½Ð¸Ñ Ð¾ ÑÑандаÑÑаÑ
и ÑпеÑиÑикаÑиÑÑ
бÑли ÑеÑкими и Ñвежими.
-## ÐÑдÑÑее
+## ÐÑдÑÑее { #future }
СейÑÐ°Ñ Ñже ÑÑно, ÑÑо **FastAPI** Ñо Ñвоими идеÑми ÑÑал полезен многим лÑдÑм.
diff --git a/docs/ru/docs/index.md b/docs/ru/docs/index.md
index 692c03ecba..1fcc9ea9d8 100644
--- a/docs/ru/docs/index.md
+++ b/docs/ru/docs/index.md
@@ -1,4 +1,4 @@
-# FastAPI
+# FastAPI { #fastapi }