]> git.ipfire.org Git - thirdparty/fastapi/fastapi.git/commitdiff
🌐 Update Russian translations for deployments docs (#11271)
authorLufa1u <112495876+Lufa1u@users.noreply.github.com>
Wed, 3 Apr 2024 16:22:47 +0000 (19:22 +0300)
committerGitHub <noreply@github.com>
Wed, 3 Apr 2024 16:22:47 +0000 (11:22 -0500)
docs/ru/docs/deployment/concepts.md
docs/ru/docs/deployment/docker.md
docs/ru/docs/deployment/https.md
docs/ru/docs/deployment/index.md
docs/ru/docs/deployment/manually.md

index 681acf15ea7dd8115ded03c0454c69532cf559c0..771f4bf68601e265a06f83295eb54351e91a4a15 100644 (file)
@@ -1,6 +1,6 @@
 # Концепции развёртывания
 
-СÑ\83Ñ\89еÑ\81Ñ\82вÑ\83еÑ\82 Ð½ÐµÑ\81колÑ\8cко ÐºÐ¾Ð½Ñ\86епÑ\86ий, Ð¿Ñ\80именÑ\8fемÑ\8bÑ\85 Ð´Ð»Ñ\8f Ñ\80азвÑ\91Ñ\80Ñ\82Ñ\8bваниÑ\8f Ð¿Ñ\80иложений **FastAPI**, Ñ\80авно ÐºÐ°Ðº Ð¸ Ð´Ð»Ñ\8f Ð»Ñ\8eбÑ\8bÑ\85 Ð´Ñ\80Ñ\83гиÑ\85 Ñ\82ипов Ð²ÐµÐ±-пÑ\80иложений, Ñ\81Ñ\80еди ÐºÐ¾Ñ\82оÑ\80Ñ\8bÑ\85 Ð\92ы можете выбрать **наиболее подходящий** способ.
+СÑ\83Ñ\89еÑ\81Ñ\82вÑ\83еÑ\82 Ð½ÐµÑ\81колÑ\8cко ÐºÐ¾Ð½Ñ\86епÑ\86ий, Ð¿Ñ\80именÑ\8fемÑ\8bÑ\85 Ð´Ð»Ñ\8f Ñ\80азвÑ\91Ñ\80Ñ\82Ñ\8bваниÑ\8f Ð¿Ñ\80иложений **FastAPI**, Ñ\80авно ÐºÐ°Ðº Ð¸ Ð´Ð»Ñ\8f Ð»Ñ\8eбÑ\8bÑ\85 Ð´Ñ\80Ñ\83гиÑ\85 Ñ\82ипов Ð²ÐµÐ±-пÑ\80иложений, Ñ\81Ñ\80еди ÐºÐ¾Ñ\82оÑ\80Ñ\8bÑ\85 Ð²ы можете выбрать **наиболее подходящий** способ.
 
 Самые важные из них:
 
 
 Рассмотрим ниже влияние каждого из них на процесс **развёртывания**.
 
\9dаÑ\88а ÐºÐ¾Ð½ÐµÑ\87наÑ\8f Ñ\86елÑ\8c - **обÑ\81лÑ\83живаÑ\82Ñ\8c ÐºÐ»Ð¸ÐµÐ½Ñ\82ов Ð\92ашего API безопасно** и **бесперебойно**, с максимально эффективным использованием **вычислительных ресурсов** (например, удалённых серверов/виртуальных машин). 🚀
\9dаÑ\88а ÐºÐ¾Ð½ÐµÑ\87наÑ\8f Ñ\86елÑ\8c - **обÑ\81лÑ\83живаÑ\82Ñ\8c ÐºÐ»Ð¸ÐµÐ½Ñ\82ов Ð²ашего API безопасно** и **бесперебойно**, с максимально эффективным использованием **вычислительных ресурсов** (например, удалённых серверов/виртуальных машин). 🚀
 
\97деÑ\81Ñ\8c Ñ\8f Ð½ÐµÐ¼Ð½Ð¾Ð³Ð¾ Ñ\80аÑ\81Ñ\81кажÑ\83 Ð\92ам Ð¾Ð± Ñ\8dÑ\82иÑ\85 **конÑ\86епÑ\86иÑ\8fÑ\85** Ð¸ Ð½Ð°Ð´ÐµÑ\8eÑ\81Ñ\8c, Ñ\87Ñ\82о Ñ\83 Ð\92аÑ\81 Ñ\81ложиÑ\82Ñ\81Ñ\8f **инÑ\82Ñ\83иÑ\82ивное Ð¿Ð¾Ð½Ð¸Ð¼Ð°Ð½Ð¸Ðµ**, ÐºÐ°ÐºÐ¾Ð¹ Ñ\81поÑ\81об Ð²Ñ\8bбÑ\80аÑ\82Ñ\8c Ð¿Ñ\80и Ñ\80азвеÑ\80Ñ\82Ñ\8bвании Ð\92ашего API в различных окружениях, возможно, даже **ещё не существующих**.
\97деÑ\81Ñ\8c Ñ\8f Ð½ÐµÐ¼Ð½Ð¾Ð³Ð¾ Ñ\80аÑ\81Ñ\81кажÑ\83 Ð\92ам Ð¾Ð± Ñ\8dÑ\82иÑ\85 **конÑ\86епÑ\86иÑ\8fÑ\85** Ð¸ Ð½Ð°Ð´ÐµÑ\8eÑ\81Ñ\8c, Ñ\87Ñ\82о Ñ\83 Ð²Ð°Ñ\81 Ñ\81ложиÑ\82Ñ\81Ñ\8f **инÑ\82Ñ\83иÑ\82ивное Ð¿Ð¾Ð½Ð¸Ð¼Ð°Ð½Ð¸Ðµ**, ÐºÐ°ÐºÐ¾Ð¹ Ñ\81поÑ\81об Ð²Ñ\8bбÑ\80аÑ\82Ñ\8c Ð¿Ñ\80и Ñ\80азвеÑ\80Ñ\82Ñ\8bвании Ð²ашего API в различных окружениях, возможно, даже **ещё не существующих**.
 
\9eзнакомивÑ\88иÑ\81Ñ\8c Ñ\81 Ñ\8dÑ\82ими ÐºÐ¾Ð½Ñ\86епÑ\86иÑ\8fми, Ð\92ы сможете **оценить и выбрать** лучший способ развёртывании **Вашего API**.
\9eзнакомивÑ\88иÑ\81Ñ\8c Ñ\81 Ñ\8dÑ\82ими ÐºÐ¾Ð½Ñ\86епÑ\86иÑ\8fми, Ð²ы сможете **оценить и выбрать** лучший способ развёртывании **Вашего API**.
 
 В последующих главах я предоставлю Вам **конкретные рецепты** развёртывания приложения FastAPI.
 
 
 ## Использование более безопасного протокола HTTPS
 
\92 [пÑ\80едÑ\8bдÑ\83Ñ\89ей Ð³Ð»Ð°Ð²Ðµ Ð¾Ð± HTTPS](./https.md){.internal-link target=_blank} Ð¼Ñ\8b Ñ\80аÑ\81Ñ\81моÑ\82Ñ\80ели, ÐºÐ°Ðº HTTPS Ð¾Ð±ÐµÑ\81пеÑ\87иваеÑ\82 Ñ\88иÑ\84Ñ\80ование Ð´Ð»Ñ\8f Ð\92ашего API.
\92 [пÑ\80едÑ\8bдÑ\83Ñ\89ей Ð³Ð»Ð°Ð²Ðµ Ð¾Ð± HTTPS](./https.md){.internal-link target=_blank} Ð¼Ñ\8b Ñ\80аÑ\81Ñ\81моÑ\82Ñ\80ели, ÐºÐ°Ðº HTTPS Ð¾Ð±ÐµÑ\81пеÑ\87иваеÑ\82 Ñ\88иÑ\84Ñ\80ование Ð´Ð»Ñ\8f Ð²ашего API.
 
-Также Ð¼Ñ\8b Ð·Ð°Ð¼ÐµÑ\82или, Ñ\87Ñ\82о Ð¾Ð±Ñ\8bÑ\87но Ð´Ð»Ñ\8f Ñ\80абоÑ\82Ñ\8b Ñ\81 HTTPS Ð\92ашему приложению нужен **дополнительный** компонент - **прокси-сервер завершения работы TLS**.
+Также Ð¼Ñ\8b Ð·Ð°Ð¼ÐµÑ\82или, Ñ\87Ñ\82о Ð¾Ð±Ñ\8bÑ\87но Ð´Ð»Ñ\8f Ñ\80абоÑ\82Ñ\8b Ñ\81 HTTPS Ð²ашему приложению нужен **дополнительный** компонент - **прокси-сервер завершения работы TLS**.
 
 И если прокси-сервер не умеет сам **обновлять сертификаты HTTPS**, то нужен ещё один компонент для этого действия.
 
 ### Примеры инструментов для работы с HTTPS
 
\92оÑ\82 Ð½ÐµÐºÐ¾Ñ\82оÑ\80Ñ\8bе Ð¸Ð½Ñ\81Ñ\82Ñ\80Ñ\83менÑ\82Ñ\8b, ÐºÐ¾Ñ\82оÑ\80Ñ\8bе Ð\92ы можете применять как прокси-серверы:
\92оÑ\82 Ð½ÐµÐºÐ¾Ñ\82оÑ\80Ñ\8bе Ð¸Ð½Ñ\81Ñ\82Ñ\80Ñ\83менÑ\82Ñ\8b, ÐºÐ¾Ñ\82оÑ\80Ñ\8bе Ð²ы можете применять как прокси-серверы:
 
 * Traefik
     * С автоматическим обновлением сертификатов ✨
@@ -47,7 +47,7 @@
     * С дополнительным компонентом типа cert-manager для обновления сертификатов
 * Использование услуг облачного провайдера (читайте ниже 👇)
 
\92 Ð¿Ð¾Ñ\81леднем Ð²Ð°Ñ\80ианÑ\82е Ð\92ы можете воспользоваться услугами **облачного сервиса**, который сделает большую часть работы, включая настройку HTTPS. Это может наложить дополнительные ограничения или потребовать дополнительную плату и т.п. Зато Вам не понадобится самостоятельно заниматься настройками прокси-сервера.
\92 Ð¿Ð¾Ñ\81леднем Ð²Ð°Ñ\80ианÑ\82е Ð²ы можете воспользоваться услугами **облачного сервиса**, который сделает большую часть работы, включая настройку HTTPS. Это может наложить дополнительные ограничения или потребовать дополнительную плату и т.п. Зато Вам не понадобится самостоятельно заниматься настройками прокси-сервера.
 
 В дальнейшем я покажу Вам некоторые конкретные примеры их применения.
 
@@ -63,7 +63,7 @@
 
 Термином **программа** обычно описывают множество вещей:
 
-* **Ð\9aод**, ÐºÐ¾Ñ\82оÑ\80Ñ\8bй Ð\92ы написали, в нашем случае **Python-файлы**.
+* **Ð\9aод**, ÐºÐ¾Ñ\82оÑ\80Ñ\8bй Ð²ы написали, в нашем случае **Python-файлы**.
 * **Файл**, который может быть **исполнен** операционной системой, например `python`, `python.exe` или `uvicorn`.
 * Конкретная программа, **запущенная** операционной системой и использующая центральный процессор и память. В таком случае это также называется **процесс**.
 
 * Конкретная программа, **запущенная** операционной системой.
     * Это не имеет отношения к какому-либо файлу или коду, но нечто **определённое**, управляемое и **выполняемое** операционной системой.
 * Любая программа, любой код, **могут делать что-то** только когда они **выполняются**. То есть, когда являются **работающим процессом**.
-* Ð\9fÑ\80оÑ\86еÑ\81Ñ\81 Ð¼Ð¾Ð¶ÐµÑ\82 Ð±Ñ\8bÑ\82Ñ\8c **пÑ\80еÑ\80ван** (или "Ñ\83биÑ\82") Ð\92ами Ð¸Ð»Ð¸ Ð\92ашей операционной системой. В результате чего он перестанет исполняться и **не будет продолжать делать что-либо**.
-* Ð\9aаждое Ð¿Ñ\80иложение, ÐºÐ¾Ñ\82оÑ\80ое Ð\92ы запустили на своём компьютере, каждая программа, каждое "окно" запускает какой-то процесс. И обычно на включенном компьютере **одновременно** запущено множество процессов.
+* Ð\9fÑ\80оÑ\86еÑ\81Ñ\81 Ð¼Ð¾Ð¶ÐµÑ\82 Ð±Ñ\8bÑ\82Ñ\8c **пÑ\80еÑ\80ван** (или "Ñ\83биÑ\82") Ð\92ами Ð¸Ð»Ð¸ Ð²ашей операционной системой. В результате чего он перестанет исполняться и **не будет продолжать делать что-либо**.
+* Ð\9aаждое Ð¿Ñ\80иложение, ÐºÐ¾Ñ\82оÑ\80ое Ð²ы запустили на своём компьютере, каждая программа, каждое "окно" запускает какой-то процесс. И обычно на включенном компьютере **одновременно** запущено множество процессов.
 * И **одна программа** может запустить **несколько параллельных процессов**.
 
\95Ñ\81ли Ð\92Ñ\8b Ð·Ð°Ð³Ð»Ñ\8fнеÑ\82е Ð² "диÑ\81пеÑ\82Ñ\87еÑ\80 Ð·Ð°Ð´Ð°Ñ\87" Ð¸Ð»Ð¸ "Ñ\81иÑ\81Ñ\82емнÑ\8bй Ð¼Ð¾Ð½Ð¸Ñ\82оÑ\80" (или Ð°Ð½Ð°Ð»Ð¾Ð³Ð¸Ñ\87нÑ\8bе Ð¸Ð½Ñ\81Ñ\82Ñ\80Ñ\83менÑ\82Ñ\8b) Ð\92ашей операционной системы, то увидите множество работающих процессов.
\95Ñ\81ли Ð²Ñ\8b Ð·Ð°Ð³Ð»Ñ\8fнеÑ\82е Ð² "диÑ\81пеÑ\82Ñ\87еÑ\80 Ð·Ð°Ð´Ð°Ñ\87" Ð¸Ð»Ð¸ "Ñ\81иÑ\81Ñ\82емнÑ\8bй Ð¼Ð¾Ð½Ð¸Ñ\82оÑ\80" (или Ð°Ð½Ð°Ð»Ð¾Ð³Ð¸Ñ\87нÑ\8bе Ð¸Ð½Ñ\81Ñ\82Ñ\80Ñ\83менÑ\82Ñ\8b) Ð²ашей операционной системы, то увидите множество работающих процессов.
 
\92полне Ð²ÐµÑ\80оÑ\8fÑ\82но, Ñ\87Ñ\82о Ð\92ы увидите несколько процессов с одним и тем же названием браузерной программы (Firefox, Chrome, Edge и т. Д.). Обычно браузеры запускают один процесс на вкладку и вдобавок некоторые дополнительные процессы.
\92полне Ð²ÐµÑ\80оÑ\8fÑ\82но, Ñ\87Ñ\82о Ð²ы увидите несколько процессов с одним и тем же названием браузерной программы (Firefox, Chrome, Edge и т. Д.). Обычно браузеры запускают один процесс на вкладку и вдобавок некоторые дополнительные процессы.
 
 <img class="shadow" src="/img/deployment/concepts/image01.png">
 
 
 ## Настройки запуска приложения
 
\92 Ð±Ð¾Ð»Ñ\8cÑ\88инÑ\81Ñ\82ве Ñ\81лÑ\83Ñ\87аев ÐºÐ¾Ð³Ð´Ð° Ð\92Ñ\8b Ñ\81оздаÑ\91Ñ\82е Ð²ÐµÐ±-пÑ\80иложение, Ñ\82о Ð¶ÐµÐ»Ð°ÐµÑ\82е, Ñ\87Ñ\82об Ð¾Ð½Ð¾ **Ñ\80абоÑ\82ало Ð¿Ð¾Ñ\81Ñ\82оÑ\8fнно** Ð¸ Ð½ÐµÐ¿Ñ\80еÑ\80Ñ\8bвно, Ð¿Ñ\80едоÑ\81Ñ\82авлÑ\8fÑ\8f ÐºÐ»Ð¸ÐµÐ½Ñ\82ам Ð´Ð¾Ñ\81Ñ\82Ñ\83п Ð² Ð»Ñ\8eбое Ð²Ñ\80емÑ\8f. Ð¥Ð¾Ñ\82Ñ\8f Ð¸Ð½Ð¾Ð³Ð´Ð° Ñ\83 Ð\92ас могут быть причины, чтоб оно запускалось только при определённых условиях.
\92 Ð±Ð¾Ð»Ñ\8cÑ\88инÑ\81Ñ\82ве Ñ\81лÑ\83Ñ\87аев ÐºÐ¾Ð³Ð´Ð° Ð²Ñ\8b Ñ\81оздаÑ\91Ñ\82е Ð²ÐµÐ±-пÑ\80иложение, Ñ\82о Ð¶ÐµÐ»Ð°ÐµÑ\82е, Ñ\87Ñ\82об Ð¾Ð½Ð¾ **Ñ\80абоÑ\82ало Ð¿Ð¾Ñ\81Ñ\82оÑ\8fнно** Ð¸ Ð½ÐµÐ¿Ñ\80еÑ\80Ñ\8bвно, Ð¿Ñ\80едоÑ\81Ñ\82авлÑ\8fÑ\8f ÐºÐ»Ð¸ÐµÐ½Ñ\82ам Ð´Ð¾Ñ\81Ñ\82Ñ\83п Ð² Ð»Ñ\8eбое Ð²Ñ\80емÑ\8f. Ð¥Ð¾Ñ\82Ñ\8f Ð¸Ð½Ð¾Ð³Ð´Ð° Ñ\83 Ð²ас могут быть причины, чтоб оно запускалось только при определённых условиях.
 
 ### Удалённый сервер
 
\9aогда Ð\92Ñ\8b Ð½Ð°Ñ\81Ñ\82Ñ\80аиваеÑ\82е Ñ\83далÑ\91ннÑ\8bй Ñ\81еÑ\80веÑ\80 (облаÑ\87нÑ\8bй Ñ\81еÑ\80веÑ\80, Ð²Ð¸Ñ\80Ñ\82Ñ\83алÑ\8cнÑ\83Ñ\8e Ð¼Ð°Ñ\88инÑ\83 Ð¸ Ñ\82.п.), Ñ\81амое Ð¿Ñ\80оÑ\81Ñ\82ое, Ñ\87Ñ\82о Ð¼Ð¾Ð¶Ð½Ð¾ Ñ\81делаÑ\82Ñ\8c, Ð·Ð°Ð¿Ñ\83Ñ\81Ñ\82иÑ\82Ñ\8c Uvicorn (или ÐµÐ³Ð¾ Ð°Ð½Ð°Ð»Ð¾Ð³) Ð²Ñ\80Ñ\83Ñ\87нÑ\83Ñ\8e, ÐºÐ°Ðº Ð\92ы делаете при локальной разработке.
\9aогда Ð²Ñ\8b Ð½Ð°Ñ\81Ñ\82Ñ\80аиваеÑ\82е Ñ\83далÑ\91ннÑ\8bй Ñ\81еÑ\80веÑ\80 (облаÑ\87нÑ\8bй Ñ\81еÑ\80веÑ\80, Ð²Ð¸Ñ\80Ñ\82Ñ\83алÑ\8cнÑ\83Ñ\8e Ð¼Ð°Ñ\88инÑ\83 Ð¸ Ñ\82.п.), Ñ\81амое Ð¿Ñ\80оÑ\81Ñ\82ое, Ñ\87Ñ\82о Ð¼Ð¾Ð¶Ð½Ð¾ Ñ\81делаÑ\82Ñ\8c, Ð·Ð°Ð¿Ñ\83Ñ\81Ñ\82иÑ\82Ñ\8c Uvicorn (или ÐµÐ³Ð¾ Ð°Ð½Ð°Ð»Ð¾Ð³) Ð²Ñ\80Ñ\83Ñ\87нÑ\83Ñ\8e, ÐºÐ°Ðº Ð²ы делаете при локальной разработке.
 
 Это рабочий способ и он полезен **во время разработки**.
 
\9dо ÐµÑ\81ли Ð\92ы потеряете соединение с сервером, то не сможете отслеживать - работает ли всё ещё **запущенный Вами процесс**.
\9dо ÐµÑ\81ли Ð²ы потеряете соединение с сервером, то не сможете отслеживать - работает ли всё ещё **запущенный Вами процесс**.
 
\98 ÐµÑ\81ли Ñ\81еÑ\80веÑ\80 Ð¿ÐµÑ\80езагÑ\80Ñ\83зиÑ\82Ñ\81Ñ\8f (напÑ\80имеÑ\80, Ð¿Ð¾Ñ\81ле Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ\8f Ð¸Ð»Ð¸ ÐºÐ°ÐºÐ¸Ñ\85\82о Ð´ÐµÐ¹Ñ\81Ñ\82вий Ð¾Ð±Ð»Ð°Ñ\87ного Ð¿Ñ\80овайдеÑ\80а), Ð\92ы скорее всего **этого не заметите**, чтобы снова запустить процесс вручную. Вследствие этого Ваш API останется мёртвым. 😱
\98 ÐµÑ\81ли Ñ\81еÑ\80веÑ\80 Ð¿ÐµÑ\80езагÑ\80Ñ\83зиÑ\82Ñ\81Ñ\8f (напÑ\80имеÑ\80, Ð¿Ð¾Ñ\81ле Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ\8f Ð¸Ð»Ð¸ ÐºÐ°ÐºÐ¸Ñ\85\82о Ð´ÐµÐ¹Ñ\81Ñ\82вий Ð¾Ð±Ð»Ð°Ñ\87ного Ð¿Ñ\80овайдеÑ\80а), Ð²ы скорее всего **этого не заметите**, чтобы снова запустить процесс вручную. Вследствие этого Ваш API останется мёртвым. 😱
 
 ### Автоматический запуск программ
 
\92еÑ\80оÑ\8fÑ\82но Ð\92Ñ\8b Ð¿Ð¾Ð¶ÐµÐ»Ð°ÐµÑ\82е, Ñ\87Ñ\82об Ð\92аÑ\88а Ñ\81еÑ\80веÑ\80наÑ\8f Ð¿Ñ\80огÑ\80амма (Ñ\82акаÑ\8f как Uvicorn) стартовала автоматически при включении сервера, без **человеческого вмешательства** и всегда могла управлять Вашим API (так как Uvicorn запускает приложение FastAPI).
\92еÑ\80оÑ\8fÑ\82но Ð²Ñ\8b Ð·Ð°Ñ\85оÑ\82иÑ\82е, Ñ\87Ñ\82об Ð\92аÑ\88а Ñ\81еÑ\80веÑ\80наÑ\8f Ð¿Ñ\80огÑ\80амма (Ñ\82акаÑ\8f, как Uvicorn) стартовала автоматически при включении сервера, без **человеческого вмешательства** и всегда могла управлять Вашим API (так как Uvicorn запускает приложение FastAPI).
 
 ### Отдельная программа
 
 
 ## Перезапуск
 
\92Ñ\8b, Ð²ÐµÑ\80оÑ\8fÑ\82но, Ñ\82акже Ð¿Ð¾Ð¶ÐµÐ»Ð°ÐµÑ\82е, Ñ\87Ñ\82об Ð\92аше приложение **перезапускалось**, если в нём произошёл сбой.
\92Ñ\8b, Ð²ÐµÑ\80оÑ\8fÑ\82но, Ñ\82акже Ð·Ð°Ñ\85оÑ\82иÑ\82е, Ñ\87Ñ\82об Ð²аше приложение **перезапускалось**, если в нём произошёл сбой.
 
 ### Мы ошибаемся
 
 
 ### Небольшие ошибки обрабатываются автоматически
 
\9aогда Ð\92ы создаёте свои API на основе FastAPI и допускаете в коде ошибку, то FastAPI обычно остановит её распространение внутри одного запроса, при обработке которого она возникла. 🛡
\9aогда Ð²ы создаёте свои API на основе FastAPI и допускаете в коде ошибку, то FastAPI обычно остановит её распространение внутри одного запроса, при обработке которого она возникла. 🛡
 
 Клиент получит ошибку **500 Internal Server Error** в ответ на свой запрос, но приложение не сломается и будет продолжать работать с последующими запросами.
 
 Для случаев, когда ошибки приводят к сбою в запущенном **процессе**, Вам понадобится добавить компонент, который **перезапустит** процесс хотя бы пару раз...
 
 !!! tip "Заметка"
-    ... Ð\95Ñ\81ли Ð¿Ñ\80иложение Ð¿Ð°Ð´Ð°ÐµÑ\82 Ñ\81Ñ\80азÑ\83 Ð¶Ðµ Ð¿Ð¾Ñ\81ле Ð·Ð°Ð¿Ñ\83Ñ\81ка, Ð²ÐµÑ\80оÑ\8fÑ\82но Ð±ÐµÑ\81полезно ÐµÐ³Ð¾ Ð±ÐµÑ\81конеÑ\87но Ð¿ÐµÑ\80езапÑ\83Ñ\81каÑ\82Ñ\8c. Ð\9dо Ð¿Ð¾Ð»Ð°Ð³Ð°Ñ\8e, Ð\92ы заметите такое поведение во время разработки или, по крайней мере, сразу после развёртывания.
+    ... Ð\95Ñ\81ли Ð¿Ñ\80иложение Ð¿Ð°Ð´Ð°ÐµÑ\82 Ñ\81Ñ\80азÑ\83 Ð¶Ðµ Ð¿Ð¾Ñ\81ле Ð·Ð°Ð¿Ñ\83Ñ\81ка, Ð²ÐµÑ\80оÑ\8fÑ\82но Ð±ÐµÑ\81полезно ÐµÐ³Ð¾ Ð±ÐµÑ\81конеÑ\87но Ð¿ÐµÑ\80езапÑ\83Ñ\81каÑ\82Ñ\8c. Ð\9dо Ð¿Ð¾Ð»Ð°Ð³Ð°Ñ\8e, Ð²ы заметите такое поведение во время разработки или, по крайней мере, сразу после развёртывания.
 
     Так что давайте сосредоточимся на конкретных случаях, когда приложение может полностью выйти из строя, но всё ещё есть смысл его запустить заново.
 
\92озможно Ð\92Ñ\8b Ð·Ð°Ñ\85оÑ\82иÑ\82е, Ñ\87Ñ\82об Ð±Ñ\8bл Ð½ÐµÐºÐ¸Ð¹ **внеÑ\88ний ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½Ñ\82**, Ð¾Ñ\82веÑ\82Ñ\81Ñ\82веннÑ\8bй Ð·Ð° Ð¿ÐµÑ\80езапÑ\83Ñ\81к Ð\92аÑ\88его Ð¿Ñ\80иложениÑ\8f Ð´Ð°Ð¶Ðµ ÐµÑ\81ли Ñ\83же Ð½Ðµ Ñ\80абоÑ\82аеÑ\82 Uvicorn Ð¸Ð»Ð¸ Python. Ð¢Ð¾ ÐµÑ\81Ñ\82Ñ\8c Ð½Ð¸Ñ\87его Ð¸Ð· Ñ\82ого, Ñ\87Ñ\82о Ð½Ð°Ð¿Ð¸Ñ\81ано Ð² Ð\92ашем коде внутри приложения, не может быть выполнено в принципе.
\92озможно Ð²Ñ\8b Ð·Ð°Ñ\85оÑ\82иÑ\82е, Ñ\87Ñ\82об Ð±Ñ\8bл Ð½ÐµÐºÐ¸Ð¹ **внеÑ\88ний ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½Ñ\82**, Ð¾Ñ\82веÑ\82Ñ\81Ñ\82веннÑ\8bй Ð·Ð° Ð¿ÐµÑ\80езапÑ\83Ñ\81к Ð²Ð°Ñ\88его Ð¿Ñ\80иложениÑ\8f Ð´Ð°Ð¶Ðµ ÐµÑ\81ли Ñ\83же Ð½Ðµ Ñ\80абоÑ\82аеÑ\82 Uvicorn Ð¸Ð»Ð¸ Python. Ð¢Ð¾ ÐµÑ\81Ñ\82Ñ\8c Ð½Ð¸Ñ\87его Ð¸Ð· Ñ\82ого, Ñ\87Ñ\82о Ð½Ð°Ð¿Ð¸Ñ\81ано Ð² Ð²ашем коде внутри приложения, не может быть выполнено в принципе.
 
 ### Примеры инструментов для автоматического перезапуска
 
 
 ### Множество процессов - Воркеры (Workers)
 
\95Ñ\81ли ÐºÐ¾Ð»Ð¸Ñ\87еÑ\81Ñ\82во Ð\92аÑ\88иÑ\85 ÐºÐ»Ð¸ÐµÐ½Ñ\82ов Ð±Ð¾Ð»Ñ\8cÑ\88е, Ñ\87ем Ð¼Ð¾Ð¶ÐµÑ\82 Ð¾Ð±Ñ\81лÑ\83жиÑ\82Ñ\8c Ð¾Ð´Ð¸Ð½ Ð¿Ñ\80оÑ\86еÑ\81Ñ\81 (допÑ\83Ñ\81Ñ\82им, Ñ\87Ñ\82о Ð²Ð¸Ñ\80Ñ\82Ñ\83алÑ\8cнаÑ\8f Ð¼Ð°Ñ\88ина Ð½Ðµ Ñ\81лиÑ\88ком Ð¼Ð¾Ñ\89наÑ\8f), Ð½Ð¾ Ð¿Ñ\80и Ñ\8dÑ\82ом Ð\92ам Ð´Ð¾Ñ\81Ñ\82Ñ\83пно **неÑ\81колÑ\8cко Ñ\8fдеÑ\80 Ð¿Ñ\80оÑ\86еÑ\81Ñ\81оÑ\80а**, Ñ\82о Ð\92ы можете запустить **несколько процессов** одного и того же приложения параллельно и распределить запросы между этими процессами.
\95Ñ\81ли ÐºÐ¾Ð»Ð¸Ñ\87еÑ\81Ñ\82во Ð\92аÑ\88иÑ\85 ÐºÐ»Ð¸ÐµÐ½Ñ\82ов Ð±Ð¾Ð»Ñ\8cÑ\88е, Ñ\87ем Ð¼Ð¾Ð¶ÐµÑ\82 Ð¾Ð±Ñ\81лÑ\83жиÑ\82Ñ\8c Ð¾Ð´Ð¸Ð½ Ð¿Ñ\80оÑ\86еÑ\81Ñ\81 (допÑ\83Ñ\81Ñ\82им, Ñ\87Ñ\82о Ð²Ð¸Ñ\80Ñ\82Ñ\83алÑ\8cнаÑ\8f Ð¼Ð°Ñ\88ина Ð½Ðµ Ñ\81лиÑ\88ком Ð¼Ð¾Ñ\89наÑ\8f), Ð½Ð¾ Ð¿Ñ\80и Ñ\8dÑ\82ом Ð\92ам Ð´Ð¾Ñ\81Ñ\82Ñ\83пно **неÑ\81колÑ\8cко Ñ\8fдеÑ\80 Ð¿Ñ\80оÑ\86еÑ\81Ñ\81оÑ\80а**, Ñ\82о Ð²ы можете запустить **несколько процессов** одного и того же приложения параллельно и распределить запросы между этими процессами.
 
 **Несколько запущенных процессов** одной и той же API-программы часто называют **воркерами**.
 
 
 Работающая программа загружает в память данные, необходимые для её работы, например, переменные содержащие модели машинного обучения или большие файлы. Каждая переменная **потребляет некоторое количество оперативной памяти (RAM)** сервера.
 
\9eбÑ\8bÑ\87но Ð¿Ñ\80оÑ\86еÑ\81Ñ\81Ñ\8b **не Ð´ÐµÐ»Ñ\8fÑ\82Ñ\81Ñ\8f Ð¿Ð°Ð¼Ñ\8fÑ\82Ñ\8cÑ\8e Ð´Ñ\80Ñ\83г Ñ\81 Ð´Ñ\80Ñ\83гом**. Ð¡Ð¸Ðµ Ð¾Ð·Ð½Ð°Ñ\87аеÑ\82, Ñ\87Ñ\82о ÐºÐ°Ð¶Ð´Ñ\8bй Ñ\80абоÑ\82аÑ\8eÑ\89ий Ð¿Ñ\80оÑ\86еÑ\81Ñ\81 Ð¸Ð¼ÐµÐµÑ\82 Ñ\81вои Ð´Ð°Ð½Ð½Ñ\8bе, Ð¿ÐµÑ\80еменнÑ\8bе Ð¸ Ñ\81вой ÐºÑ\83Ñ\81ок Ð¿Ð°Ð¼Ñ\8fÑ\82и. Ð\98 ÐµÑ\81ли Ð´Ð»Ñ\8f Ð²Ñ\8bполнениÑ\8f Ð\92ашего кода процессу нужно много памяти, то **каждый такой же процесс** запущенный дополнительно, потребует такого же количества памяти.
\9eбÑ\8bÑ\87но Ð¿Ñ\80оÑ\86еÑ\81Ñ\81Ñ\8b **не Ð´ÐµÐ»Ñ\8fÑ\82Ñ\81Ñ\8f Ð¿Ð°Ð¼Ñ\8fÑ\82Ñ\8cÑ\8e Ð´Ñ\80Ñ\83г Ñ\81 Ð´Ñ\80Ñ\83гом**. Ð¡Ð¸Ðµ Ð¾Ð·Ð½Ð°Ñ\87аеÑ\82, Ñ\87Ñ\82о ÐºÐ°Ð¶Ð´Ñ\8bй Ñ\80абоÑ\82аÑ\8eÑ\89ий Ð¿Ñ\80оÑ\86еÑ\81Ñ\81 Ð¸Ð¼ÐµÐµÑ\82 Ñ\81вои Ð´Ð°Ð½Ð½Ñ\8bе, Ð¿ÐµÑ\80еменнÑ\8bе Ð¸ Ñ\81вой ÐºÑ\83Ñ\81ок Ð¿Ð°Ð¼Ñ\8fÑ\82и. Ð\98 ÐµÑ\81ли Ð´Ð»Ñ\8f Ð²Ñ\8bполнениÑ\8f Ð²ашего кода процессу нужно много памяти, то **каждый такой же процесс** запущенный дополнительно, потребует такого же количества памяти.
 
 ### Память сервера
 
\94опÑ\83Ñ\81Ñ\82им, Ñ\87Ñ\82о Ð\92аÑ\88 ÐºÐ¾Ð´ Ð·Ð°Ð³Ñ\80Ñ\83жаеÑ\82 Ð¼Ð¾Ð´ÐµÐ»Ñ\8c Ð¼Ð°Ñ\88инного Ð¾Ð±Ñ\83Ñ\87ениÑ\8f **Ñ\80азмеÑ\80ом 1 Ð\93Ð\91**. Ð\9aогда Ð\92Ñ\8b Ð·Ð°Ð¿Ñ\83Ñ\81Ñ\82иÑ\82е Ñ\81воÑ\91 API ÐºÐ°Ðº Ð¾Ð´Ð¸Ð½ Ð¿Ñ\80оÑ\86еÑ\81Ñ\81, Ð¾Ð½ Ð·Ð°Ð¹Ð¼Ñ\91Ñ\82 Ð² Ð¾Ð¿ÐµÑ\80аÑ\82ивной Ð¿Ð°Ð¼Ñ\8fÑ\82и Ð½Ðµ Ð¼ÐµÐ½ÐµÐµ 1 Ð\93Ð\91. Ð\90 ÐµÑ\81ли Ð\92Ñ\8b Ð·Ð°Ð¿Ñ\83Ñ\81Ñ\82иÑ\82е **4 Ñ\82акиÑ\85 Ð¶Ðµ Ð¿Ñ\80оÑ\86еÑ\81Ñ\81а** (4 Ð²Ð¾Ñ\80кеÑ\80а), Ñ\82о ÐºÐ°Ð¶Ð´Ñ\8bй Ð¸Ð· Ð½Ð¸Ñ\85 Ð·Ð°Ð¹Ð¼Ñ\91Ñ\82 1 Ð\93Ð\91 Ð¾Ð¿ÐµÑ\80аÑ\82ивной Ð¿Ð°Ð¼Ñ\8fÑ\82и. Ð\92 Ñ\80езÑ\83лÑ\8cÑ\82аÑ\82е Ð\92ашему API потребуется **4 ГБ оперативной памяти (RAM)**.
\94опÑ\83Ñ\81Ñ\82им, Ñ\87Ñ\82о Ð\92аÑ\88 ÐºÐ¾Ð´ Ð·Ð°Ð³Ñ\80Ñ\83жаеÑ\82 Ð¼Ð¾Ð´ÐµÐ»Ñ\8c Ð¼Ð°Ñ\88инного Ð¾Ð±Ñ\83Ñ\87ениÑ\8f **Ñ\80азмеÑ\80ом 1 Ð\93Ð\91**. Ð\9aогда Ð²Ñ\8b Ð·Ð°Ð¿Ñ\83Ñ\81Ñ\82иÑ\82е Ñ\81воÑ\91 API ÐºÐ°Ðº Ð¾Ð´Ð¸Ð½ Ð¿Ñ\80оÑ\86еÑ\81Ñ\81, Ð¾Ð½ Ð·Ð°Ð¹Ð¼Ñ\91Ñ\82 Ð² Ð¾Ð¿ÐµÑ\80аÑ\82ивной Ð¿Ð°Ð¼Ñ\8fÑ\82и Ð½Ðµ Ð¼ÐµÐ½ÐµÐµ 1 Ð\93Ð\91. Ð\90 ÐµÑ\81ли Ð²Ñ\8b Ð·Ð°Ð¿Ñ\83Ñ\81Ñ\82иÑ\82е **4 Ñ\82акиÑ\85 Ð¶Ðµ Ð¿Ñ\80оÑ\86еÑ\81Ñ\81а** (4 Ð²Ð¾Ñ\80кеÑ\80а), Ñ\82о ÐºÐ°Ð¶Ð´Ñ\8bй Ð¸Ð· Ð½Ð¸Ñ\85 Ð·Ð°Ð¹Ð¼Ñ\91Ñ\82 1 Ð\93Ð\91 Ð¾Ð¿ÐµÑ\80аÑ\82ивной Ð¿Ð°Ð¼Ñ\8fÑ\82и. Ð\92 Ñ\80езÑ\83лÑ\8cÑ\82аÑ\82е Ð²ашему API потребуется **4 ГБ оперативной памяти (RAM)**.
 
 И если Ваш удалённый сервер или виртуальная машина располагает только 3 ГБ памяти, то попытка загрузить в неё 4 ГБ данных вызовет проблемы. 🚨
 
 
 Менеджер процессов будет слушать определённый **сокет** (IP:порт) и передавать данные работающим процессам.
 
\9aаждÑ\8bй Ð¸Ð· Ñ\8dÑ\82иÑ\85 Ð¿Ñ\80оÑ\86еÑ\81Ñ\81ов Ð±Ñ\83деÑ\82 Ð·Ð°Ð¿Ñ\83Ñ\81каÑ\82Ñ\8c Ð\92аше приложение для обработки полученного **запроса** и возвращения вычисленного **ответа** и они будут использовать оперативную память.
\9aаждÑ\8bй Ð¸Ð· Ñ\8dÑ\82иÑ\85 Ð¿Ñ\80оÑ\86еÑ\81Ñ\81ов Ð±Ñ\83деÑ\82 Ð·Ð°Ð¿Ñ\83Ñ\81каÑ\82Ñ\8c Ð²аше приложение для обработки полученного **запроса** и возвращения вычисленного **ответа** и они будут использовать оперативную память.
 
 <img src="/img/deployment/concepts/process-ram.svg">
 
\91езÑ\83Ñ\81ловно, Ð½Ð° Ñ\8dÑ\82ом Ð¶Ðµ Ñ\81еÑ\80веÑ\80е Ð±Ñ\83дÑ\83Ñ\82 Ñ\80абоÑ\82аÑ\82Ñ\8c Ð¸ **дÑ\80Ñ\83гие Ð¿Ñ\80оÑ\86еÑ\81Ñ\81Ñ\8b**, ÐºÐ¾Ñ\82оÑ\80Ñ\8bе Ð½Ðµ Ð¾Ñ\82ноÑ\81Ñ\8fÑ\82Ñ\81Ñ\8f Ðº Ð\92ашему приложению.
\91езÑ\83Ñ\81ловно, Ð½Ð° Ñ\8dÑ\82ом Ð¶Ðµ Ñ\81еÑ\80веÑ\80е Ð±Ñ\83дÑ\83Ñ\82 Ñ\80абоÑ\82аÑ\82Ñ\8c Ð¸ **дÑ\80Ñ\83гие Ð¿Ñ\80оÑ\86еÑ\81Ñ\81Ñ\8b**, ÐºÐ¾Ñ\82оÑ\80Ñ\8bе Ð½Ðµ Ð¾Ñ\82ноÑ\81Ñ\8fÑ\82Ñ\81Ñ\8f Ðº Ð²ашему приложению.
 
-Интересная деталь - обычно в течение времени процент **использования центрального процессора (CPU)** каждым  процессом может очень сильно **изменяться**, но объём занимаемой **оперативной памяти (RAM)** остаётся относительно **стабильным**.
+Интересная деталь заключается в том, что процент **использования центрального процессора (CPU)** каждым процессом может сильно меняться с течением времени, но объём занимаемой **оперативной памяти (RAM)** остаётся относительно **стабильным**.
 
\95Ñ\81ли Ñ\83 Ð\92аÑ\81 ÐµÑ\81Ñ\82Ñ\8c API, ÐºÐ¾Ñ\82оÑ\80Ñ\8bй ÐºÐ°Ð¶Ð´Ñ\8bй Ñ\80аз Ð²Ñ\8bполнÑ\8fеÑ\82 Ñ\81опоÑ\81Ñ\82авимÑ\8bй Ð¾Ð±Ñ\8aем Ð²Ñ\8bÑ\87иÑ\81лений, Ð¸ Ñ\83 Ð\92ас много клиентов, то **загрузка процессора**, вероятно, *также будет стабильной* (вместо того, чтобы постоянно быстро увеличиваться и уменьшаться).
\95Ñ\81ли Ñ\83 Ð²Ð°Ñ\81 ÐµÑ\81Ñ\82Ñ\8c API, ÐºÐ¾Ñ\82оÑ\80Ñ\8bй ÐºÐ°Ð¶Ð´Ñ\8bй Ñ\80аз Ð²Ñ\8bполнÑ\8fеÑ\82 Ñ\81опоÑ\81Ñ\82авимÑ\8bй Ð¾Ð±Ñ\8aем Ð²Ñ\8bÑ\87иÑ\81лений, Ð¸ Ñ\83 Ð²ас много клиентов, то **загрузка процессора**, вероятно, *также будет стабильной* (вместо того, чтобы постоянно быстро увеличиваться и уменьшаться).
 
 ### Примеры стратегий и инструментов для запуска нескольких экземпляров приложения
 
 * **Kubernetes** и аналогичные **контейнерные системы**
     * Какой-то компонент в **Kubernetes** будет слушать **IP:port**. Необходимое количество запущенных экземпляров приложения будет осуществляться посредством запуска **нескольких контейнеров**, в каждом из которых работает **один процесс Uvicorn**.
 * **Облачные сервисы**, которые позаботятся обо всём за Вас
-    * Ð\92озможно, Ñ\87Ñ\82о Ð¾Ð±Ð»Ð°Ñ\87нÑ\8bй Ñ\81еÑ\80виÑ\81 Ñ\83мееÑ\82 **Ñ\83пÑ\80авлÑ\8fÑ\82Ñ\8c Ð·Ð°Ð¿Ñ\83Ñ\81ком Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ\82елÑ\8cнÑ\8bÑ\85 Ñ\8dкземплÑ\8fÑ\80ов Ð¿Ñ\80иложениÑ\8f**. Ð\92еÑ\80оÑ\8fÑ\82но, Ð¾Ð½ Ð¿Ð¾Ñ\82Ñ\80ебÑ\83еÑ\82, Ñ\87Ñ\82об Ð\92Ñ\8b Ñ\83казали - ÐºÐ°ÐºÐ¾Ð¹ **пÑ\80оÑ\86еÑ\81Ñ\81** Ð¸Ð»Ð¸ **обÑ\80аз** Ñ\81ледÑ\83еÑ\82 ÐºÐ»Ð¾Ð½Ð¸Ñ\80оваÑ\82Ñ\8c. Ð¡ÐºÐ¾Ñ\80ее Ð²Ñ\81его, Ð\92ы укажете **один процесс Uvicorn** и облачный сервис будет запускать его копии при необходимости.
+    * Ð\92озможно, Ñ\87Ñ\82о Ð¾Ð±Ð»Ð°Ñ\87нÑ\8bй Ñ\81еÑ\80виÑ\81 Ñ\83мееÑ\82 **Ñ\83пÑ\80авлÑ\8fÑ\82Ñ\8c Ð·Ð°Ð¿Ñ\83Ñ\81ком Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ\82елÑ\8cнÑ\8bÑ\85 Ñ\8dкземплÑ\8fÑ\80ов Ð¿Ñ\80иложениÑ\8f**. Ð\92еÑ\80оÑ\8fÑ\82но, Ð¾Ð½ Ð¿Ð¾Ñ\82Ñ\80ебÑ\83еÑ\82, Ñ\87Ñ\82об Ð²Ñ\8b Ñ\83казали - ÐºÐ°ÐºÐ¾Ð¹ **пÑ\80оÑ\86еÑ\81Ñ\81** Ð¸Ð»Ð¸ **обÑ\80аз** Ñ\81ледÑ\83еÑ\82 ÐºÐ»Ð¾Ð½Ð¸Ñ\80оваÑ\82Ñ\8c. Ð¡ÐºÐ¾Ñ\80ее Ð²Ñ\81его, Ð²ы укажете **один процесс Uvicorn** и облачный сервис будет запускать его копии при необходимости.
 
 !!! tip "Заметка"
-    Ð\95Ñ\81ли Ð\92ы не знаете, что такое **контейнеры**, Docker или Kubernetes, не переживайте.
+    Ð\95Ñ\81ли Ð²ы не знаете, что такое **контейнеры**, Docker или Kubernetes, не переживайте.
 
     Я поведаю Вам о контейнерах, образах, Docker, Kubernetes и т.п. в главе: [FastAPI внутри контейнеров - Docker](./docker.md){.internal-link target=_blank}.
 
 
 Поэтому Вам нужен будет **один процесс**, выполняющий эти **подготовительные шаги** до запуска приложения.
 
-Также Ð\92ам Ð½Ñ\83жно Ð±Ñ\83деÑ\82 Ñ\83бедиÑ\82Ñ\8cÑ\81Ñ\8f, Ñ\87Ñ\82о Ñ\8dÑ\82оÑ\82 Ð¿Ñ\80оÑ\86еÑ\81Ñ\81 Ð²Ñ\8bполнил Ð¿Ð¾Ð´Ð³Ð¾Ñ\82овиÑ\82елÑ\8cнÑ\8bе Ñ\88аги *даже* ÐµÑ\81ли Ð²Ð¿Ð¾Ñ\81ледÑ\81Ñ\82вии Ð\92ы запустите **несколько процессов** (несколько воркеров) самого приложения. Если бы эти шаги выполнялись в каждом **клонированном процессе**, они бы **дублировали** работу, пытаясь выполнить её **параллельно**. И если бы эта работа была бы чем-то деликатным, вроде миграции базы данных, то это может вызвать конфликты между ними.
+Также Ð\92ам Ð½Ñ\83жно Ð±Ñ\83деÑ\82 Ñ\83бедиÑ\82Ñ\8cÑ\81Ñ\8f, Ñ\87Ñ\82о Ñ\8dÑ\82оÑ\82 Ð¿Ñ\80оÑ\86еÑ\81Ñ\81 Ð²Ñ\8bполнил Ð¿Ð¾Ð´Ð³Ð¾Ñ\82овиÑ\82елÑ\8cнÑ\8bе Ñ\88аги *даже* ÐµÑ\81ли Ð²Ð¿Ð¾Ñ\81ледÑ\81Ñ\82вии Ð²ы запустите **несколько процессов** (несколько воркеров) самого приложения. Если бы эти шаги выполнялись в каждом **клонированном процессе**, они бы **дублировали** работу, пытаясь выполнить её **параллельно**. И если бы эта работа была бы чем-то деликатным, вроде миграции базы данных, то это может вызвать конфликты между ними.
 
 Безусловно, возможны случаи, когда нет проблем при выполнении предварительной подготовки параллельно или несколько раз. Тогда Вам повезло, работать с ними намного проще.
 
 !!! tip "Заметка"
-    Ð\98мейÑ\82е Ð² Ð²Ð¸Ð´Ñ\83, Ñ\87Ñ\82о Ð² Ð½ÐµÐºÐ¾Ñ\82оÑ\80Ñ\8bÑ\85 Ñ\81лÑ\83Ñ\87аÑ\8fÑ\85 Ð·Ð°Ð¿Ñ\83Ñ\81к Ð\92ашего приложения **может не требовать каких-либо предварительных шагов вовсе**.
+    Ð\98мейÑ\82е Ð² Ð²Ð¸Ð´Ñ\83, Ñ\87Ñ\82о Ð² Ð½ÐµÐºÐ¾Ñ\82оÑ\80Ñ\8bÑ\85 Ñ\81лÑ\83Ñ\87аÑ\8fÑ\85 Ð·Ð°Ð¿Ñ\83Ñ\81к Ð²ашего приложения **может не требовать каких-либо предварительных шагов вовсе**.
 
     Что ж, тогда Вам не нужно беспокоиться об этом. 🤷
 
 ### Примеры стратегий запуска предварительных шагов
 
-СÑ\83Ñ\89еÑ\81Ñ\82вÑ\83еÑ\82 **Ñ\81илÑ\8cнаÑ\8f Ð·Ð°Ð²Ð¸Ñ\81имоÑ\81Ñ\82Ñ\8c** Ð¾Ñ\82 Ñ\82ого, ÐºÐ°Ðº Ð\92ы **развёртываете свою систему**, запускаете программы, обрабатываете перезапуски и т.д.
+СÑ\83Ñ\89еÑ\81Ñ\82вÑ\83еÑ\82 **Ñ\81илÑ\8cнаÑ\8f Ð·Ð°Ð²Ð¸Ñ\81имоÑ\81Ñ\82Ñ\8c** Ð¾Ñ\82 Ñ\82ого, ÐºÐ°Ðº Ð²ы **развёртываете свою систему**, запускаете программы, обрабатываете перезапуски и т.д.
 
 Вот некоторые возможные идеи:
 
 
 Ваш сервер располагает ресурсами, которые Ваши программы могут потреблять или **утилизировать**, а именно - время работы центрального процессора и объём оперативной памяти.
 
\9aак Ð¼Ð½Ð¾Ð³Ð¾ Ñ\81иÑ\81Ñ\82емнÑ\8bÑ\85 Ñ\80еÑ\81Ñ\83Ñ\80Ñ\81ов Ð\92Ñ\8b Ð¿Ñ\80едполагаеÑ\82е Ð¿Ð¾Ñ\82Ñ\80ебиÑ\82Ñ\8c\83Ñ\82илизиÑ\80оваÑ\82Ñ\8c? Ð\95Ñ\81ли Ð½Ðµ Ð·Ð°Ð´Ñ\83мÑ\8bваÑ\82Ñ\8cÑ\81Ñ\8f, Ñ\82о Ð¼Ð¾Ð¶Ð½Ð¾ Ð¾Ñ\82веÑ\82иÑ\82Ñ\8c - "немного", Ð½Ð¾ Ð½Ð° Ñ\81амом Ð´ÐµÐ»Ðµ Ð\92Ñ\8b, Ð²ÐµÑ\80оÑ\8fÑ\82но, Ð¿Ð¾Ð¶ÐµÐ»Ð°Ðµте использовать **максимально возможное количество**.
\9aак Ð¼Ð½Ð¾Ð³Ð¾ Ñ\81иÑ\81Ñ\82емнÑ\8bÑ\85 Ñ\80еÑ\81Ñ\83Ñ\80Ñ\81ов Ð²Ñ\8b Ð¿Ñ\80едполагаеÑ\82е Ð¿Ð¾Ñ\82Ñ\80ебиÑ\82Ñ\8c\83Ñ\82илизиÑ\80оваÑ\82Ñ\8c? Ð\95Ñ\81ли Ð½Ðµ Ð·Ð°Ð´Ñ\83мÑ\8bваÑ\82Ñ\8cÑ\81Ñ\8f, Ñ\82о Ð¼Ð¾Ð¶Ð½Ð¾ Ð¾Ñ\82веÑ\82иÑ\82Ñ\8c - "немного", Ð½Ð¾ Ð½Ð° Ñ\81амом Ð´ÐµÐ»Ðµ Ð\92Ñ\8b, Ð²ÐµÑ\80оÑ\8fÑ\82но, Ð·Ð°Ñ\85оÑ\82ите использовать **максимально возможное количество**.
 
\95Ñ\81ли Ð\92Ñ\8b Ð¿Ð»Ð°Ñ\82иÑ\82е Ð·Ð° Ñ\81одеÑ\80жание Ñ\82Ñ\80Ñ\91Ñ\85 Ñ\81еÑ\80веÑ\80ов, Ð½Ð¾ Ð¸Ñ\81полÑ\8cзÑ\83еÑ\82е Ð»Ð¸Ñ\88Ñ\8c Ð¼Ð°Ð»Ñ\83Ñ\8e Ñ\87аÑ\81Ñ\82Ñ\8c Ñ\81иÑ\81Ñ\82емнÑ\8bÑ\85 Ñ\80еÑ\81Ñ\83Ñ\80Ñ\81ов ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ Ð¸Ð· Ð½Ð¸Ñ\85, Ñ\82о Ð\92ы **выбрасываете деньги на ветер**, а также **впустую тратите электроэнергию** и т.п.
\95Ñ\81ли Ð²Ñ\8b Ð¿Ð»Ð°Ñ\82иÑ\82е Ð·Ð° Ñ\81одеÑ\80жание Ñ\82Ñ\80Ñ\91Ñ\85 Ñ\81еÑ\80веÑ\80ов, Ð½Ð¾ Ð¸Ñ\81полÑ\8cзÑ\83еÑ\82е Ð»Ð¸Ñ\88Ñ\8c Ð¼Ð°Ð»Ñ\83Ñ\8e Ñ\87аÑ\81Ñ\82Ñ\8c Ñ\81иÑ\81Ñ\82емнÑ\8bÑ\85 Ñ\80еÑ\81Ñ\83Ñ\80Ñ\81ов ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ Ð¸Ð· Ð½Ð¸Ñ\85, Ñ\82о Ð²ы **выбрасываете деньги на ветер**, а также **впустую тратите электроэнергию** и т.п.
 
 В таком случае было бы лучше обойтись двумя серверами, но более полно утилизировать их ресурсы (центральный процессор, оперативную память, жёсткий диск, сети передачи данных и т.д).
 
-С Ð´Ñ\80Ñ\83гой Ñ\81Ñ\82оÑ\80онÑ\8b, ÐµÑ\81ли Ð\92ы располагаете только двумя серверами и используете **на 100% их процессоры и память**, но какой-либо процесс запросит дополнительную память, то операционная система сервера будет использовать жёсткий диск для расширения оперативной памяти (а диск работает в тысячи раз медленнее), а то вовсе **упадёт**. Или если какому-то процессу понадобится произвести вычисления, то ему придётся подождать, пока процессор освободится.
+С Ð´Ñ\80Ñ\83гой Ñ\81Ñ\82оÑ\80онÑ\8b, ÐµÑ\81ли Ð²ы располагаете только двумя серверами и используете **на 100% их процессоры и память**, но какой-либо процесс запросит дополнительную память, то операционная система сервера будет использовать жёсткий диск для расширения оперативной памяти (а диск работает в тысячи раз медленнее), а то вовсе **упадёт**. Или если какому-то процессу понадобится произвести вычисления, то ему придётся подождать, пока процессор освободится.
 
 В такой ситуации лучше подключить **ещё один сервер** и перераспределить процессы между серверами, чтоб всем **хватало памяти и процессорного времени**.
 
-Также ÐµÑ\81Ñ\82Ñ\8c Ð²ÐµÑ\80оÑ\8fÑ\82ноÑ\81Ñ\82Ñ\8c, Ñ\87Ñ\82о Ð¿Ð¾ ÐºÐ°ÐºÐ¾Ð¹-Ñ\82о Ð¿Ñ\80иÑ\87ине Ð²Ð¾Ð·Ð½Ð¸Ðº **вÑ\81плеÑ\81к** Ð·Ð°Ð¿Ñ\80оÑ\81ов Ðº Ð\92аÑ\88емÑ\83 API. Ð\92озможно, Ñ\8dÑ\82о Ð±Ñ\8bл Ð²Ð¸Ñ\80Ñ\83Ñ\81, Ð±Ð¾Ñ\82Ñ\8b Ð¸Ð»Ð¸ Ð´Ñ\80Ñ\83гие Ñ\81еÑ\80виÑ\81Ñ\8b Ð½Ð°Ñ\87али Ð¿Ð¾Ð»Ñ\8cзоваÑ\82Ñ\8cÑ\81Ñ\8f Ð¸Ð¼. Ð\98 Ð´Ð»Ñ\8f Ñ\82акиÑ\85 Ð¿Ñ\80оиÑ\81Ñ\88еÑ\81Ñ\82вий Ð\92ы можете захотеть иметь дополнительные ресурсы.
+Также ÐµÑ\81Ñ\82Ñ\8c Ð²ÐµÑ\80оÑ\8fÑ\82ноÑ\81Ñ\82Ñ\8c, Ñ\87Ñ\82о Ð¿Ð¾ ÐºÐ°ÐºÐ¾Ð¹-Ñ\82о Ð¿Ñ\80иÑ\87ине Ð²Ð¾Ð·Ð½Ð¸Ðº **вÑ\81плеÑ\81к** Ð·Ð°Ð¿Ñ\80оÑ\81ов Ðº Ð²Ð°Ñ\88емÑ\83 API. Ð\92озможно, Ñ\8dÑ\82о Ð±Ñ\8bл Ð²Ð¸Ñ\80Ñ\83Ñ\81, Ð±Ð¾Ñ\82Ñ\8b Ð¸Ð»Ð¸ Ð´Ñ\80Ñ\83гие Ñ\81еÑ\80виÑ\81Ñ\8b Ð½Ð°Ñ\87али Ð¿Ð¾Ð»Ñ\8cзоваÑ\82Ñ\8cÑ\81Ñ\8f Ð¸Ð¼. Ð\98 Ð´Ð»Ñ\8f Ñ\82акиÑ\85 Ð¿Ñ\80оиÑ\81Ñ\88еÑ\81Ñ\82вий Ð²ы можете захотеть иметь дополнительные ресурсы.
 
\9fÑ\80и Ð½Ð°Ñ\81Ñ\82Ñ\80ойке Ð»Ð¾Ð³Ð¸ÐºÐ¸ Ñ\80азвÑ\91Ñ\80Ñ\82Ñ\8bваний, Ð\92ы можете указать **целевое значение** утилизации ресурсов, допустим, **от 50% до 90%**. Обычно эти метрики и используют.
\9fÑ\80и Ð½Ð°Ñ\81Ñ\82Ñ\80ойке Ð»Ð¾Ð³Ð¸ÐºÐ¸ Ñ\80азвÑ\91Ñ\80Ñ\82Ñ\8bваний, Ð²ы можете указать **целевое значение** утилизации ресурсов, допустим, **от 50% до 90%**. Обычно эти метрики и используют.
 
 Вы можете использовать простые инструменты, такие как `htop`, для отслеживания загрузки центрального процессора и оперативной памяти сервера, в том числе каждым процессом. Или более сложные системы мониторинга нескольких серверов.
 
 
 Осознание этих идей и того, как их применять, должно дать Вам интуитивное понимание, необходимое для принятия решений при настройке развертываний. 🤓
 
\92 Ñ\81ледÑ\83Ñ\8eÑ\89иÑ\85 Ñ\80азделаÑ\85 Ñ\8f Ð¿Ñ\80иведÑ\83 Ð±Ð¾Ð»ÐµÐµ ÐºÐ¾Ð½ÐºÑ\80еÑ\82нÑ\8bе Ð¿Ñ\80имеÑ\80Ñ\8b Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ñ\8bÑ\85 Ñ\81Ñ\82Ñ\80аÑ\82егий, ÐºÐ¾Ñ\82оÑ\80Ñ\8bм Ð\92ы можете следовать. 🚀
\92 Ñ\81ледÑ\83Ñ\8eÑ\89иÑ\85 Ñ\80азделаÑ\85 Ñ\8f Ð¿Ñ\80иведÑ\83 Ð±Ð¾Ð»ÐµÐµ ÐºÐ¾Ð½ÐºÑ\80еÑ\82нÑ\8bе Ð¿Ñ\80имеÑ\80Ñ\8b Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ñ\8bÑ\85 Ñ\81Ñ\82Ñ\80аÑ\82егий, ÐºÐ¾Ñ\82оÑ\80Ñ\8bм Ð²ы можете следовать. 🚀
index f045ca944811f07b0aa6b5f3c966b87bb47e8e91..78d3ec1b4d362baea5d034d32fc347923cc490d4 100644 (file)
@@ -70,19 +70,19 @@ Docker является одним оз основных инструменто
 
 и т.п.
 
\98Ñ\81полÑ\8cзование Ð¿Ð¾Ð´Ð³Ð¾Ñ\82овленнÑ\8bÑ\85 Ð¾Ð±Ñ\80азов Ð·Ð½Ð°Ñ\87иÑ\82елÑ\8cно Ñ\83пÑ\80оÑ\89аеÑ\82 **комбиниÑ\80ование** Ð¸ Ð¸Ñ\81полÑ\8cзование Ñ\80азнÑ\8bÑ\85 Ð¸Ð½Ñ\81Ñ\82Ñ\80Ñ\83менÑ\82ов. Ð\9dапÑ\80имеÑ\80, Ð\92ы можете попытаться использовать новую базу данных. В большинстве случаев можно использовать **официальный образ** и всего лишь указать переменные окружения.
\98Ñ\81полÑ\8cзование Ð¿Ð¾Ð´Ð³Ð¾Ñ\82овленнÑ\8bÑ\85 Ð¾Ð±Ñ\80азов Ð·Ð½Ð°Ñ\87иÑ\82елÑ\8cно Ñ\83пÑ\80оÑ\89аеÑ\82 **комбиниÑ\80ование** Ð¸ Ð¸Ñ\81полÑ\8cзование Ñ\80азнÑ\8bÑ\85 Ð¸Ð½Ñ\81Ñ\82Ñ\80Ñ\83менÑ\82ов. Ð\9dапÑ\80имеÑ\80, Ð²ы можете попытаться использовать новую базу данных. В большинстве случаев можно использовать **официальный образ** и всего лишь указать переменные окружения.
 
-Таким Ð¾Ð±Ñ\80азом, Ð\92ы можете изучить, что такое контейнеризация и Docker, и использовать полученные знания с разными инструментами и компонентами.
+Таким Ð¾Ð±Ñ\80азом, Ð²ы можете изучить, что такое контейнеризация и Docker, и использовать полученные знания с разными инструментами и компонентами.
 
-Так, Ð\92ы можете запустить одновременно **множество контейнеров** с базой данных, Python-приложением, веб-сервером, React-приложением и соединить их вместе через внутреннюю сеть.
+Так, Ð²ы можете запустить одновременно **множество контейнеров** с базой данных, Python-приложением, веб-сервером, React-приложением и соединить их вместе через внутреннюю сеть.
 
 Все системы управления контейнерами (такие, как Docker или Kubernetes) имеют встроенные возможности для организации такого сетевого взаимодействия.
 
 ## Контейнеры и процессы
 
\9eбÑ\8bÑ\87но **обÑ\80аз ÐºÐ¾Ð½Ñ\82ейнеÑ\80а** Ñ\81одеÑ\80жиÑ\82 Ð¼ÐµÑ\82аданнÑ\8bе Ð¿Ñ\80едÑ\83Ñ\81Ñ\82ановленной Ð¿Ñ\80огÑ\80аммÑ\8b Ð¸Ð»Ð¸ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ\83, ÐºÐ¾Ñ\82оÑ\80Ñ\83Ñ\8e Ñ\81ледÑ\83еÑ\82 Ð²Ñ\8bполниÑ\82Ñ\8c Ð¿Ñ\80и Ð·Ð°Ð¿Ñ\83Ñ\81ке **конÑ\82ейнеÑ\80а**. Ð¢Ð°ÐºÐ¶Ðµ Ð¾Ð½ Ð¼Ð¾Ð¶ÐµÑ\82 Ñ\81одеÑ\80жаÑ\82Ñ\8c Ð¿Ð°Ñ\80амеÑ\82Ñ\80Ñ\8b, Ð¿ÐµÑ\80едаваемÑ\8bе Ð¿Ñ\80едÑ\83Ñ\81Ñ\82ановленной Ð¿Ñ\80огÑ\80амме. Ð\9fоÑ\85оже Ð½Ð° Ñ\82о, ÐºÐ°Ðº ÐµÑ\81ли Ð±Ñ\8b Ð\92ы запускали такую программу через терминал.
\9eбÑ\8bÑ\87но **обÑ\80аз ÐºÐ¾Ð½Ñ\82ейнеÑ\80а** Ñ\81одеÑ\80жиÑ\82 Ð¼ÐµÑ\82аданнÑ\8bе Ð¿Ñ\80едÑ\83Ñ\81Ñ\82ановленной Ð¿Ñ\80огÑ\80аммÑ\8b Ð¸Ð»Ð¸ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ\83, ÐºÐ¾Ñ\82оÑ\80Ñ\83Ñ\8e Ñ\81ледÑ\83еÑ\82 Ð²Ñ\8bполниÑ\82Ñ\8c Ð¿Ñ\80и Ð·Ð°Ð¿Ñ\83Ñ\81ке **конÑ\82ейнеÑ\80а**. Ð¢Ð°ÐºÐ¶Ðµ Ð¾Ð½ Ð¼Ð¾Ð¶ÐµÑ\82 Ñ\81одеÑ\80жаÑ\82Ñ\8c Ð¿Ð°Ñ\80амеÑ\82Ñ\80Ñ\8b, Ð¿ÐµÑ\80едаваемÑ\8bе Ð¿Ñ\80едÑ\83Ñ\81Ñ\82ановленной Ð¿Ñ\80огÑ\80амме. Ð\9fоÑ\85оже Ð½Ð° Ñ\82о, ÐºÐ°Ðº ÐµÑ\81ли Ð±Ñ\8b Ð²ы запускали такую программу через терминал.
 
\9aогда **конÑ\82ейнеÑ\80** Ð·Ð°Ð¿Ñ\83Ñ\89ен, Ð¾Ð½ Ð±Ñ\83деÑ\82 Ð²Ñ\8bполнÑ\8fÑ\82Ñ\8c Ð¿Ñ\80опиÑ\81аннÑ\8bе Ð² Ð½Ñ\91м ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ\8b Ð¸ Ð¿Ñ\80огÑ\80аммÑ\8b. Ð\9dо Ð\92ы можете изменить его так, чтоб он выполнял другие команды и программы.
\9aогда **конÑ\82ейнеÑ\80** Ð·Ð°Ð¿Ñ\83Ñ\89ен, Ð¾Ð½ Ð±Ñ\83деÑ\82 Ð²Ñ\8bполнÑ\8fÑ\82Ñ\8c Ð¿Ñ\80опиÑ\81аннÑ\8bе Ð² Ð½Ñ\91м ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ\8b Ð¸ Ð¿Ñ\80огÑ\80аммÑ\8b. Ð\9dо Ð²ы можете изменить его так, чтоб он выполнял другие команды и программы.
 
 Контейнер буде работать до тех пор, пока выполняется его **главный процесс** (команда или программа).
 
@@ -100,11 +100,11 @@ Docker является одним оз основных инструменто
 
 * Использование с **Kubernetes** или аналогичным инструментом
 * Запуск в **Raspberry Pi**
-* Ð\98Ñ\81полÑ\8cзование Ð² Ð¾Ð±Ð»Ð°Ñ\87нÑ\8bÑ\85 Ñ\81еÑ\80виÑ\81аÑ\85, Ð·Ð°Ð¿Ñ\83Ñ\81каÑ\8eÑ\89иÑ\85 Ð¾Ð±Ñ\80азÑ\8b ÐºÐ¾Ð½Ñ\82ейнеÑ\80ов Ð´Ð»Ñ\8f Ð\92ас и т.п.
+* Ð\98Ñ\81полÑ\8cзование Ð² Ð¾Ð±Ð»Ð°Ñ\87нÑ\8bÑ\85 Ñ\81еÑ\80виÑ\81аÑ\85, Ð·Ð°Ð¿Ñ\83Ñ\81каÑ\8eÑ\89иÑ\85 Ð¾Ð±Ñ\80азÑ\8b ÐºÐ¾Ð½Ñ\82ейнеÑ\80ов Ð´Ð»Ñ\8f Ð²ас и т.п.
 
 ### Установить зависимости
 
\9eбÑ\8bÑ\87но Ð\92ашему приложению необходимы **дополнительные библиотеки**, список которых находится в отдельном файле.
\9eбÑ\8bÑ\87но Ð²ашему приложению необходимы **дополнительные библиотеки**, список которых находится в отдельном файле.
 
 На название и содержание такого файла влияет выбранный Вами инструмент **установки** этих библиотек (зависимостей).
 
@@ -135,7 +135,7 @@ Successfully installed fastapi pydantic uvicorn
 !!! info "Информация"
     Существуют и другие инструменты управления зависимостями.
 
-    Ð\92 Ñ\8dÑ\82ом Ð¶Ðµ Ñ\80азделе, Ð½Ð¾ Ð¿Ð¾Ð·Ð¶Ðµ, Ñ\8f Ð¿Ð¾ÐºÐ°Ð¶Ñ\83 Ð\92ам пример использования Poetry. 👇
+    Ð\92 Ñ\8dÑ\82ом Ð¶Ðµ Ñ\80азделе, Ð½Ð¾ Ð¿Ð¾Ð·Ð¶Ðµ, Ñ\8f Ð¿Ð¾ÐºÐ°Ð¶Ñ\83 Ð²ам пример использования Poetry. 👇
 
 ### Создать приложение **FastAPI**
 
@@ -195,7 +195,7 @@ CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "80"]
 
     Сначала копируйте **только** файл с зависимостями.
 
-    Ð­Ñ\82оÑ\82 Ñ\84айл **изменÑ\8fеÑ\82Ñ\81Ñ\8f Ð´Ð¾Ð²Ð¾Ð»Ñ\8cно Ñ\80едко**, Docker Ð¸Ñ\89еÑ\82 Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ\8f Ð¿Ñ\80и Ð¿Ð¾Ñ\81Ñ\82Ñ\80ойке Ð¾Ð±Ñ\80аза Ð¸ ÐµÑ\81ли Ð½Ðµ Ð½Ð°Ñ\85одиÑ\82, Ñ\82о Ð¸Ñ\81полÑ\8cзÑ\83еÑ\82 **кÑ\8dÑ\88**, Ð² ÐºÐ¾Ñ\82оÑ\80ом Ñ\85Ñ\80анÑ\8fÑ\82Ñ\81Ñ\8f Ð¿Ñ\80едÑ\8bдÑ\83Ñ\89ии версии сборки образа.
+    Ð­Ñ\82оÑ\82 Ñ\84айл **изменÑ\8fеÑ\82Ñ\81Ñ\8f Ð´Ð¾Ð²Ð¾Ð»Ñ\8cно Ñ\80едко**, Docker Ð¸Ñ\89еÑ\82 Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ\8f Ð¿Ñ\80и Ð¿Ð¾Ñ\81Ñ\82Ñ\80ойке Ð¾Ð±Ñ\80аза Ð¸ ÐµÑ\81ли Ð½Ðµ Ð½Ð°Ñ\85одиÑ\82, Ñ\82о Ð¸Ñ\81полÑ\8cзÑ\83еÑ\82 **кÑ\8dÑ\88**, Ð² ÐºÐ¾Ñ\82оÑ\80ом Ñ\85Ñ\80анÑ\8fÑ\82Ñ\81Ñ\8f Ð¿Ñ\80едÑ\8bдÑ\83Ñ\89ие версии сборки образа.
 
 4. Установите библиотеки перечисленные в файле с зависимостями.
 
@@ -208,7 +208,7 @@ CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "80"]
 
     Ка и в предыдущем шаге с копированием файла, этот шаг также будет использовать **кэш Docker** в случае отсутствия изменений.
 
-    Использрвание кэша, особенно на этом шаге, позволит Вам **сэкономить** кучу времени при повторной сборке образа, так как зависимости будут сохранены в кеше, а не **загружаться и устанавливаться каждый раз**.
+    Использование кэша, особенно на этом шаге, позволит вам **сэкономить** кучу времени при повторной сборке образа, так как зависимости будут сохранены в кеше, а не **загружаться и устанавливаться каждый раз**.
 
 5. Скопируйте директорию `./app` внутрь директории `/code` (в контейнере).
 
@@ -216,11 +216,11 @@ CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "80"]
 
 6. Укажите **команду**, запускающую сервер `uvicorn`.
 
-    `CMD` Ð¿Ñ\80инимаеÑ\82 Ñ\81пиÑ\81ок Ñ\81Ñ\82Ñ\80ок, Ñ\80азделÑ\91ннÑ\8bÑ\85 Ð·Ð°Ð¿Ñ\8fÑ\82Ñ\8bми, Ð½Ð¾ Ð¿Ñ\80и Ð²Ñ\8bполнении Ð¾Ð±Ñ\8aединиÑ\82 Ð¸Ñ\85 Ñ\87еÑ\80ез Ð¿Ñ\80обел, Ñ\81обÑ\80ав Ð¸Ð· Ð½Ð¸Ñ\85 Ð¾Ð´Ð½Ñ\83 ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ\83, ÐºÐ¾Ñ\82оÑ\80Ñ\83Ñ\8e Ð\92ы могли бы написать в терминале.
+    `CMD` Ð¿Ñ\80инимаеÑ\82 Ñ\81пиÑ\81ок Ñ\81Ñ\82Ñ\80ок, Ñ\80азделÑ\91ннÑ\8bÑ\85 Ð·Ð°Ð¿Ñ\8fÑ\82Ñ\8bми, Ð½Ð¾ Ð¿Ñ\80и Ð²Ñ\8bполнении Ð¾Ð±Ñ\8aединиÑ\82 Ð¸Ñ\85 Ñ\87еÑ\80ез Ð¿Ñ\80обел, Ñ\81обÑ\80ав Ð¸Ð· Ð½Ð¸Ñ\85 Ð¾Ð´Ð½Ñ\83 ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ\83, ÐºÐ¾Ñ\82оÑ\80Ñ\83Ñ\8e Ð²ы могли бы написать в терминале.
 
-    Эта команда будет выполнена в **текущей рабочей директории**, а именно в директории `/code`, котоая указана командой `WORKDIR /code`.
+    Эта команда будет выполнена в **текущей рабочей директории**, а именно в директории `/code`, которая указана в команде `WORKDIR /code`.
 
-    Так как команда выполняется внутрии директории `/code`, в которую мы поместили папку `./app` с приложением, то **Uvicorn** сможет найти и **импортировать** объект `app` из файла `app.main`.
+    Так как команда выполняется внутри директории `/code`, в которую мы поместили папку `./app` с приложением, то **Uvicorn** сможет найти и **импортировать** объект `app` из файла `app.main`.
 
 !!! tip "Подсказка"
     Если ткнёте на кружок с плюсом, то увидите пояснения. 👆
@@ -238,7 +238,7 @@ CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "80"]
 
 #### Использование прокси-сервера
 
\95Ñ\81ли Ð\92ы запускаете контейнер за прокси-сервером завершения TLS (балансирующего нагрузку), таким как Nginx или Traefik, добавьте опцию `--proxy-headers`, которая укажет Uvicorn, что он работает позади прокси-сервера и может доверять заголовкам отправляемым им.
\95Ñ\81ли Ð²ы запускаете контейнер за прокси-сервером завершения TLS (балансирующего нагрузку), таким как Nginx или Traefik, добавьте опцию `--proxy-headers`, которая укажет Uvicorn, что он работает позади прокси-сервера и может доверять заголовкам отправляемым им.
 
 ```Dockerfile
 CMD ["uvicorn", "app.main:app", "--proxy-headers", "--host", "0.0.0.0", "--port", "80"]
@@ -269,7 +269,7 @@ RUN pip install --no-cache-dir --upgrade -r /code/requirements.txt
 
 Для загрузки и установки необходимых библиотек **может понадобиться несколько минут**, но использование **кэша** занимает несколько **секунд** максимум.
 
\98 Ñ\82ак ÐºÐ°Ðº Ð²Ð¾ Ð²Ñ\80емÑ\8f Ñ\80азÑ\80абоÑ\82ки Ð\92ы будете часто пересобирать контейнер для проверки работоспособности внесённых изменений, то сэкономленные минуты сложатся в часы, а то и дни.
\98 Ñ\82ак ÐºÐ°Ðº Ð²Ð¾ Ð²Ñ\80емÑ\8f Ñ\80азÑ\80абоÑ\82ки Ð²ы будете часто пересобирать контейнер для проверки работоспособности внесённых изменений, то сэкономленные минуты сложатся в часы, а то и дни.
 
 Так как папка с кодом приложения **изменяется чаще всего**, то мы расположили её в конце `Dockerfile`, ведь после внесённых в код изменений кэш не будет использован на этом и следующих шагах.
 
@@ -301,7 +301,7 @@ $ docker build -t myimage .
 
 ### Запуск Docker-контейнера
 
-* Ð\97апÑ\83Ñ\81Ñ\82иÑ\82е ÐºÐ¾Ð½Ñ\82ейнеÑ\80, Ð¾Ñ\81нованнÑ\8bй Ð½Ð° Ð\92ашем образе:
+* Ð\97апÑ\83Ñ\81Ñ\82иÑ\82е ÐºÐ¾Ð½Ñ\82ейнеÑ\80, Ð¾Ñ\81нованнÑ\8bй Ð½Ð° Ð²ашем образе:
 
 <div class="termy">
 
@@ -315,7 +315,7 @@ $ docker run -d --name mycontainer -p 80:80 myimage
 
 Вы можете проверить, что Ваш Docker-контейнер работает перейдя по ссылке: <a href="http://192.168.99.100/items/5?q=somequery" class="external-link" target="_blank">http://192.168.99.100/items/5?q=somequery</a> или <a href="http://127.0.0.1/items/5?q=somequery" class="external-link" target="_blank">http://127.0.0.1/items/5?q=somequery</a> (или похожей, которую использует Ваш Docker-хост).
 
-Там Ð\92ы увидите:
+Там Ð²ы увидите:
 
 ```JSON
 {"item_id": 5, "q": "somequery"}
@@ -325,21 +325,21 @@ $ docker run -d --name mycontainer -p 80:80 myimage
 
 Теперь перейдите по ссылке <a href="http://192.168.99.100/docs" class="external-link" target="_blank">http://192.168.99.100/docs</a> или <a href="http://127.0.0.1/docs" class="external-link" target="_blank">http://127.0.0.1/docs</a> (или похожей, которую использует Ваш Docker-хост).
 
\97деÑ\81Ñ\8c Ð\92ы увидите автоматическую интерактивную документацию API (предоставляемую <a href="https://github.com/swagger-api/swagger-ui" class="external-link" target="_blank">Swagger UI</a>):
\97деÑ\81Ñ\8c Ð²ы увидите автоматическую интерактивную документацию API (предоставляемую <a href="https://github.com/swagger-api/swagger-ui" class="external-link" target="_blank">Swagger UI</a>):
 
 ![Swagger UI](https://fastapi.tiangolo.com/img/index/index-01-swagger-ui-simple.png)
 
 ## Альтернативная документация API
 
-Также Ð\92ы можете перейти по ссылке <a href="http://192.168.99.100/redoc" class="external-link" target="_blank">http://192.168.99.100/redoc</a> or <a href="http://127.0.0.1/redoc" class="external-link" target="_blank">http://127.0.0.1/redoc</a> (или похожей, которую использует Ваш Docker-хост).
+Также Ð²ы можете перейти по ссылке <a href="http://192.168.99.100/redoc" class="external-link" target="_blank">http://192.168.99.100/redoc</a> or <a href="http://127.0.0.1/redoc" class="external-link" target="_blank">http://127.0.0.1/redoc</a> (или похожей, которую использует Ваш Docker-хост).
 
\97деÑ\81Ñ\8c Ð\92ы увидите альтернативную автоматическую документацию API (предоставляемую <a href="https://github.com/Rebilly/ReDoc" class="external-link" target="_blank">ReDoc</a>):
\97деÑ\81Ñ\8c Ð²ы увидите альтернативную автоматическую документацию API (предоставляемую <a href="https://github.com/Rebilly/ReDoc" class="external-link" target="_blank">ReDoc</a>):
 
 ![ReDoc](https://fastapi.tiangolo.com/img/index/index-02-redoc-simple.png)
 
 ## Создание Docker-образа на основе однофайлового приложения FastAPI
 
\95Ñ\81ли Ð\92аше приложение FastAPI помещено в один файл, например, `main.py` и структура Ваших файлов похожа на эту:
\95Ñ\81ли Ð²аше приложение FastAPI помещено в один файл, например, `main.py` и структура Ваших файлов похожа на эту:
 
 ```
 .
@@ -376,7 +376,7 @@ CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "80"]
 
 Давайте вспомним о [Концепциях развёртывания](./concepts.md){.internal-link target=_blank} и применим их к контейнерам.
 
-Контейнеры - это, в основном, инструмент упрощающий **сборку и развёртывание** приложения и они не обязыают к применению какой-то определённой **концепции развёртывания**, а значит мы можем выбирать нужную стратегию.
\9aонÑ\82ейнеÑ\80Ñ\8b - Ñ\8dÑ\82о, Ð² Ð¾Ñ\81новном, Ð¸Ð½Ñ\81Ñ\82Ñ\80Ñ\83менÑ\82 Ñ\83пÑ\80оÑ\89аÑ\8eÑ\89ий **Ñ\81боÑ\80кÑ\83 Ð¸ Ñ\80азвÑ\91Ñ\80Ñ\82Ñ\8bвание** Ð¿Ñ\80иложениÑ\8f Ð¸ Ð¾Ð½Ð¸ Ð½Ðµ Ð¾Ð±Ñ\8fзÑ\8bваÑ\8eÑ\82 Ðº Ð¿Ñ\80именениÑ\8e ÐºÐ°ÐºÐ¾Ð¹-Ñ\82о Ð¾Ð¿Ñ\80еделÑ\91нной **конÑ\86епÑ\86ии Ñ\80азвÑ\91Ñ\80Ñ\82Ñ\8bваниÑ\8f**, Ð° Ð·Ð½Ð°Ñ\87иÑ\82 Ð¼Ñ\8b Ð¼Ð¾Ð¶ÐµÐ¼ Ð²Ñ\8bбиÑ\80аÑ\82Ñ\8c Ð½Ñ\83жнÑ\83Ñ\8e Ñ\81Ñ\82Ñ\80аÑ\82егиÑ\8e.
 
 **Хорошая новость** в том, что независимо от выбранной стратегии, мы всё равно можем покрыть все концепции развёртывания. 🎉
 
@@ -412,7 +412,7 @@ CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "80"]
 
 ## Запуск нескольких экземпляров приложения - Указание количества процессов
 
\95Ñ\81ли Ñ\83 Ð\92аÑ\81 ÐµÑ\81Ñ\82Ñ\8c <abbr title="Ð\9dеÑ\81колÑ\8cко Ñ\81еÑ\80веÑ\80ов Ð½Ð°Ñ\81Ñ\82Ñ\80оеннÑ\8bÑ\85 Ð´Ð»Ñ\8f Ñ\81овмеÑ\81Ñ\82ной Ñ\80абоÑ\82Ñ\8b.">клаÑ\81Ñ\82еÑ\80</abbr> Ð¼Ð°Ñ\88ин Ð¿Ð¾Ð´ Ñ\83пÑ\80авлением **Kubernetes**, Docker Swarm Mode, Nomad Ð¸Ð»Ð¸ Ð°Ð½Ð°Ð»Ð¾Ð³Ð¸Ñ\87ной Ñ\81ложной Ñ\81иÑ\81Ñ\82емой Ð¾Ñ\80кеÑ\81Ñ\82Ñ\80аÑ\86ии ÐºÐ¾Ð½Ñ\82ейнеÑ\80ов, Ñ\81коÑ\80ее Ð²Ñ\81его, Ð²Ð¼ÐµÑ\81Ñ\82о Ð¸Ñ\81полÑ\8cзованиÑ\8f Ð¼ÐµÐ½ÐµÐ´Ð¶ÐµÑ\80а Ð¿Ñ\80оÑ\86еÑ\81Ñ\81ов (Ñ\82ипа Gunicorn Ð¸ ÐµÐ³Ð¾ Ð²Ð¾Ñ\80кеÑ\80Ñ\8b) Ð² ÐºÐ°Ð¶Ð´Ð¾Ð¼ ÐºÐ¾Ð½Ñ\82ейнеÑ\80е, Ð\92ы захотите **управлять количеством запущенных экземпляров приложения** на **уровне кластера**.
\95Ñ\81ли Ñ\83 Ð²Ð°Ñ\81 ÐµÑ\81Ñ\82Ñ\8c <abbr title="Ð\9dеÑ\81колÑ\8cко Ñ\81еÑ\80веÑ\80ов Ð½Ð°Ñ\81Ñ\82Ñ\80оеннÑ\8bÑ\85 Ð´Ð»Ñ\8f Ñ\81овмеÑ\81Ñ\82ной Ñ\80абоÑ\82Ñ\8b.">клаÑ\81Ñ\82еÑ\80</abbr> Ð¼Ð°Ñ\88ин Ð¿Ð¾Ð´ Ñ\83пÑ\80авлением **Kubernetes**, Docker Swarm Mode, Nomad Ð¸Ð»Ð¸ Ð°Ð½Ð°Ð»Ð¾Ð³Ð¸Ñ\87ной Ñ\81ложной Ñ\81иÑ\81Ñ\82емой Ð¾Ñ\80кеÑ\81Ñ\82Ñ\80аÑ\86ии ÐºÐ¾Ð½Ñ\82ейнеÑ\80ов, Ñ\81коÑ\80ее Ð²Ñ\81его, Ð²Ð¼ÐµÑ\81Ñ\82о Ð¸Ñ\81полÑ\8cзованиÑ\8f Ð¼ÐµÐ½ÐµÐ´Ð¶ÐµÑ\80а Ð¿Ñ\80оÑ\86еÑ\81Ñ\81ов (Ñ\82ипа Gunicorn Ð¸ ÐµÐ³Ð¾ Ð²Ð¾Ñ\80кеÑ\80Ñ\8b) Ð² ÐºÐ°Ð¶Ð´Ð¾Ð¼ ÐºÐ¾Ð½Ñ\82ейнеÑ\80е, Ð²ы захотите **управлять количеством запущенных экземпляров приложения** на **уровне кластера**.
 
 В любую из этих систем управления контейнерами обычно встроен способ управления **количеством запущенных контейнеров** для распределения **нагрузки** от входящих запросов на **уровне кластера**.
 
@@ -427,17 +427,17 @@ CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "80"]
 !!! tip "Подсказка"
     **Прокси-сервер завершения работы TLS** одновременно может быть **балансировщиком нагрузки**.
 
-СиÑ\81Ñ\82ема Ð¾Ñ\80кеÑ\81Ñ\82Ñ\80аÑ\86ии, ÐºÐ¾Ñ\82оÑ\80Ñ\83Ñ\8e Ð\92ы используете для запуска и управления контейнерами, имеет встроенный инструмент **сетевого взаимодействия** (например, для передачи HTTP-запросов) между контейнерами с Вашими приложениями и **балансировщиком нагрузки** (который также может быть **прокси-сервером**).
+СиÑ\81Ñ\82ема Ð¾Ñ\80кеÑ\81Ñ\82Ñ\80аÑ\86ии, ÐºÐ¾Ñ\82оÑ\80Ñ\83Ñ\8e Ð²ы используете для запуска и управления контейнерами, имеет встроенный инструмент **сетевого взаимодействия** (например, для передачи HTTP-запросов) между контейнерами с Вашими приложениями и **балансировщиком нагрузки** (который также может быть **прокси-сервером**).
 
 ### Один балансировщик - Множество контейнеров
 
\9fÑ\80и Ñ\80абоÑ\82е Ñ\81 **Kubernetes** Ð¸Ð»Ð¸ Ð°Ð½Ð°Ð»Ð¾Ð³Ð¸Ñ\87нÑ\8bми Ñ\81иÑ\81Ñ\82емами Ð¾Ñ\80кеÑ\81Ñ\82Ñ\80аÑ\86ии Ð¸Ñ\81полÑ\8cзование Ð¸Ñ\85 Ð²Ð½Ñ\83Ñ\82Ñ\80еннней Ñ\81еÑ\82и Ð¿Ð¾Ð·Ð²Ð¾Ð»Ñ\8fеÑ\82 Ð¸Ð¼ÐµÑ\82Ñ\8c Ð¾Ð´Ð¸Ð½ **баланÑ\81иÑ\80овÑ\89ик Ð½Ð°Ð³Ñ\80Ñ\83зки**, ÐºÐ¾Ñ\82оÑ\80Ñ\8bй Ð¿Ñ\80оÑ\81лÑ\83Ñ\88иваеÑ\82 **главнÑ\8bй** Ð¿Ð¾Ñ\80Ñ\82 Ð¸ Ð¿ÐµÑ\80едаÑ\91Ñ\82 Ð·Ð°Ð¿Ñ\80оÑ\81Ñ\8b **множеÑ\81Ñ\82вÑ\83 Ð·Ð°Ð¿Ñ\83Ñ\89еннÑ\8bÑ\85 ÐºÐ¾Ð½Ñ\82ейнеÑ\80ов** Ñ\81 Ð\92аÑ\88ими Ð¿Ñ\80иложениÑ\8fми.
+При работе с **Kubernetes** или аналогичными системами оркестрации использование их внутренней сети позволяет иметь один **балансировщик нагрузки**, который прослушивает **главный** порт и передаёт запросы **множеству запущенных контейнеров** с Вашими приложениями.
 
 В каждом из контейнеров обычно работает **только один процесс** (например, процесс Uvicorn управляющий Вашим приложением FastAPI). Контейнеры могут быть **идентичными**, запущенными на основе одного и того же образа, но у каждого будут свои отдельные процесс, память и т.п. Таким образом мы получаем преимущества **распараллеливания** работы по **разным ядрам** процессора или даже **разным машинам**.
 
 Система управления контейнерами с **балансировщиком нагрузки** будет **распределять запросы** к контейнерам с приложениями **по очереди**. То есть каждый запрос будет обработан одним из множества **одинаковых контейнеров** с одним и тем же приложением.
 
-**Ð\91аланÑ\81иÑ\80овÑ\89ик Ð½Ð°Ð³Ñ\80Ñ\83зки** Ð¼Ð¾Ð¶ÐµÑ\82 Ð¾Ð±Ñ\80абаÑ\82Ñ\8bваÑ\82Ñ\8c Ð·Ð°Ð¿Ñ\80оÑ\81Ñ\8b Ðº *Ñ\80азнÑ\8bм* Ð¿Ñ\80иложениÑ\8fм, Ñ\80аÑ\81положеннÑ\8bм Ð² Ð\92ашем кластере (например, если у них разные домены или префиксы пути) и передавать запросы нужному контейнеру с требуемым приложением.
+**Ð\91аланÑ\81иÑ\80овÑ\89ик Ð½Ð°Ð³Ñ\80Ñ\83зки** Ð¼Ð¾Ð¶ÐµÑ\82 Ð¾Ð±Ñ\80абаÑ\82Ñ\8bваÑ\82Ñ\8c Ð·Ð°Ð¿Ñ\80оÑ\81Ñ\8b Ðº *Ñ\80азнÑ\8bм* Ð¿Ñ\80иложениÑ\8fм, Ñ\80аÑ\81положеннÑ\8bм Ð² Ð²ашем кластере (например, если у них разные домены или префиксы пути) и передавать запросы нужному контейнеру с требуемым приложением.
 
 ### Один процесс на контейнер
 
@@ -449,35 +449,35 @@ CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "80"]
 
 ### <a name="special-cases"></a>Множество процессов внутри контейнера для особых случаев</a>
 
-Безусловно, бывают **особые случаи**, когда может понадобится внутри контейнера запускать **менеджер процессов Gunicorn**, управляющий несколькими **процессами Uvicorn**.
\91езÑ\83Ñ\81ловно, Ð±Ñ\8bваÑ\8eÑ\82 **оÑ\81обÑ\8bе Ñ\81лÑ\83Ñ\87аи**, ÐºÐ¾Ð³Ð´Ð° Ð¼Ð¾Ð¶ÐµÑ\82 Ð¿Ð¾Ð½Ð°Ð´Ð¾Ð±Ð¸Ñ\82Ñ\8cÑ\81Ñ\8f Ð²Ð½Ñ\83Ñ\82Ñ\80и ÐºÐ¾Ð½Ñ\82ейнеÑ\80а Ð·Ð°Ð¿Ñ\83Ñ\81каÑ\82Ñ\8c **менеджеÑ\80 Ð¿Ñ\80оÑ\86еÑ\81Ñ\81ов Gunicorn**, Ñ\83пÑ\80авлÑ\8fÑ\8eÑ\89ий Ð½ÐµÑ\81колÑ\8cкими **пÑ\80оÑ\86еÑ\81Ñ\81ами Uvicorn**.
 
\94лÑ\8f Ñ\82акиÑ\85 Ñ\81лÑ\83Ñ\87аев Ð\92Ñ\8b Ð¼Ð¾Ð¶ÐµÑ\82е Ð¸Ñ\81полÑ\8cзоваÑ\82Ñ\8c **оÑ\84иÑ\86иалÑ\8cнÑ\8bй Docker-обÑ\80аз** (пÑ\80им. Ð¿ÐµÑ\80: - *здеÑ\81Ñ\8c Ð¸ Ð´Ð°Ð»ÐµÐµ Ð½Ð° Ñ\8dÑ\82ой Ñ\81Ñ\82Ñ\80аниÑ\86е, ÐµÑ\81ли Ð\92Ñ\8b Ð²Ñ\81Ñ\82Ñ\80еÑ\82иÑ\82е Ñ\81оÑ\87еÑ\82ание "оÑ\84иÑ\86иалÑ\8cнÑ\8bй Docker-обÑ\80аз" Ð±ÐµÐ· Ñ\83Ñ\82оÑ\87нений, Ñ\82о Ð°Ð²Ñ\82оÑ\80 Ð¸Ð¼ÐµÐµÑ\82 Ð² Ð²Ð¸Ð´Ñ\83 Ð¸Ð¼ÐµÐ½Ð½Ð¾ Ð¿Ñ\80едоÑ\81Ñ\82авлÑ\8fемÑ\8bй Ð¸Ð¼ Ð¾Ð±Ñ\80аз*), Ð³Ð´Ðµ Ð² ÐºÐ°Ñ\87еÑ\81Ñ\82ве Ð¼ÐµÐ½ÐµÐ´Ð¶ÐµÑ\80а Ð¿Ñ\80оÑ\86еÑ\81Ñ\81ов Ð¸Ñ\81полÑ\8cзÑ\83еÑ\82Ñ\81Ñ\8f **Gunicorn**, Ð·Ð°Ð¿Ñ\83Ñ\81каÑ\8eÑ\89ий Ð½ÐµÑ\81колÑ\8cко **пÑ\80оÑ\86еÑ\81Ñ\81ов Uvicorn** Ð¸ Ð½ÐµÐºÐ¾Ñ\82оÑ\80Ñ\8bе Ð½Ð°Ñ\81Ñ\82Ñ\80ойки Ð¿Ð¾ Ñ\83молÑ\87аниÑ\8e, Ð°Ð²Ñ\82омаÑ\82иÑ\87еÑ\81ки Ñ\83Ñ\81Ñ\82анавливаÑ\8eÑ\89ие ÐºÐ¾Ð»Ð¸Ñ\87еÑ\81Ñ\82во Ð·Ð°Ð¿Ñ\83Ñ\89еннÑ\8bÑ\85 Ð¿Ñ\80оÑ\86еÑ\81Ñ\81ов Ð² Ð·Ð°Ð²Ð¸Ñ\81имоÑ\81Ñ\82и Ð¾Ñ\82 ÐºÐ¾Ð»Ð¸Ñ\87еÑ\81Ñ\82ва Ñ\8fдеÑ\80 Ð\92аÑ\88его Ð¿Ñ\80оÑ\86еÑ\81Ñ\81оÑ\80а. Ð¯ Ñ\80аÑ\81Ñ\81кажÑ\83 Ð\92ам об этом подробнее тут: [Официальный Docker-образ со встроенными Gunicorn и Uvicorn](#docker-gunicorn-uvicorn).
\94лÑ\8f Ñ\82акиÑ\85 Ñ\81лÑ\83Ñ\87аев Ð²Ñ\8b Ð¼Ð¾Ð¶ÐµÑ\82е Ð¸Ñ\81полÑ\8cзоваÑ\82Ñ\8c **оÑ\84иÑ\86иалÑ\8cнÑ\8bй Docker-обÑ\80аз** (пÑ\80им. Ð¿ÐµÑ\80: - *здеÑ\81Ñ\8c Ð¸ Ð´Ð°Ð»ÐµÐµ Ð½Ð° Ñ\8dÑ\82ой Ñ\81Ñ\82Ñ\80аниÑ\86е, ÐµÑ\81ли Ð²Ñ\8b Ð²Ñ\81Ñ\82Ñ\80еÑ\82иÑ\82е Ñ\81оÑ\87еÑ\82ание "оÑ\84иÑ\86иалÑ\8cнÑ\8bй Docker-обÑ\80аз" Ð±ÐµÐ· Ñ\83Ñ\82оÑ\87нений, Ñ\82о Ð°Ð²Ñ\82оÑ\80 Ð¸Ð¼ÐµÐµÑ\82 Ð² Ð²Ð¸Ð´Ñ\83 Ð¸Ð¼ÐµÐ½Ð½Ð¾ Ð¿Ñ\80едоÑ\81Ñ\82авлÑ\8fемÑ\8bй Ð¸Ð¼ Ð¾Ð±Ñ\80аз*), Ð³Ð´Ðµ Ð² ÐºÐ°Ñ\87еÑ\81Ñ\82ве Ð¼ÐµÐ½ÐµÐ´Ð¶ÐµÑ\80а Ð¿Ñ\80оÑ\86еÑ\81Ñ\81ов Ð¸Ñ\81полÑ\8cзÑ\83еÑ\82Ñ\81Ñ\8f **Gunicorn**, Ð·Ð°Ð¿Ñ\83Ñ\81каÑ\8eÑ\89ий Ð½ÐµÑ\81колÑ\8cко **пÑ\80оÑ\86еÑ\81Ñ\81ов Uvicorn** Ð¸ Ð½ÐµÐºÐ¾Ñ\82оÑ\80Ñ\8bе Ð½Ð°Ñ\81Ñ\82Ñ\80ойки Ð¿Ð¾ Ñ\83молÑ\87аниÑ\8e, Ð°Ð²Ñ\82омаÑ\82иÑ\87еÑ\81ки Ñ\83Ñ\81Ñ\82анавливаÑ\8eÑ\89ие ÐºÐ¾Ð»Ð¸Ñ\87еÑ\81Ñ\82во Ð·Ð°Ð¿Ñ\83Ñ\89еннÑ\8bÑ\85 Ð¿Ñ\80оÑ\86еÑ\81Ñ\81ов Ð² Ð·Ð°Ð²Ð¸Ñ\81имоÑ\81Ñ\82и Ð¾Ñ\82 ÐºÐ¾Ð»Ð¸Ñ\87еÑ\81Ñ\82ва Ñ\8fдеÑ\80 Ð²Ð°Ñ\88его Ð¿Ñ\80оÑ\86еÑ\81Ñ\81оÑ\80а. Ð¯ Ñ\80аÑ\81Ñ\81кажÑ\83 Ð²ам об этом подробнее тут: [Официальный Docker-образ со встроенными Gunicorn и Uvicorn](#docker-gunicorn-uvicorn).
 
 Некоторые примеры подобных случаев:
 
 #### Простое приложение
 
\92Ñ\8b Ð¼Ð¾Ð¶ÐµÑ\82е Ð¸Ñ\81полÑ\8cзоваÑ\82Ñ\8c Ð¼ÐµÐ½ÐµÐ´Ð¶ÐµÑ\80 Ð¿Ñ\80оÑ\86еÑ\81Ñ\81ов Ð²Ð½Ñ\83Ñ\82Ñ\80и ÐºÐ¾Ð½Ñ\82ейнеÑ\80а, ÐµÑ\81ли Ð\92аÑ\88е Ð¿Ñ\80иложение **наÑ\81Ñ\82олÑ\8cко Ð¿Ñ\80оÑ\81Ñ\82ое**, Ñ\87Ñ\82о Ñ\83 Ð\92аÑ\81 Ð½ÐµÑ\82 Ð½ÐµÐ¾Ð±Ñ\85одимоÑ\81Ñ\82и (по ÐºÑ\80айней Ð¼ÐµÑ\80е, Ð¿Ð¾ÐºÐ° Ð½ÐµÑ\82) Ð² Ñ\82Ñ\89аÑ\82елÑ\8cнÑ\8bÑ\85 Ð½Ð°Ñ\81Ñ\82Ñ\80ойкаÑ\85 ÐºÐ¾Ð»Ð¸Ñ\87еÑ\81Ñ\82ва Ð¿Ñ\80оÑ\86еÑ\81Ñ\81ов Ð¸ Ð\92ам достаточно имеющихся настроек по умолчанию (если используется официальный Docker-образ) для запуска приложения **только на одном сервере**, а не в кластере.
\92Ñ\8b Ð¼Ð¾Ð¶ÐµÑ\82е Ð¸Ñ\81полÑ\8cзоваÑ\82Ñ\8c Ð¼ÐµÐ½ÐµÐ´Ð¶ÐµÑ\80 Ð¿Ñ\80оÑ\86еÑ\81Ñ\81ов Ð²Ð½Ñ\83Ñ\82Ñ\80и ÐºÐ¾Ð½Ñ\82ейнеÑ\80а, ÐµÑ\81ли Ð²Ð°Ñ\88е Ð¿Ñ\80иложение **наÑ\81Ñ\82олÑ\8cко Ð¿Ñ\80оÑ\81Ñ\82ое**, Ñ\87Ñ\82о Ñ\83 Ð²Ð°Ñ\81 Ð½ÐµÑ\82 Ð½ÐµÐ¾Ð±Ñ\85одимоÑ\81Ñ\82и (по ÐºÑ\80айней Ð¼ÐµÑ\80е, Ð¿Ð¾ÐºÐ° Ð½ÐµÑ\82) Ð² Ñ\82Ñ\89аÑ\82елÑ\8cнÑ\8bÑ\85 Ð½Ð°Ñ\81Ñ\82Ñ\80ойкаÑ\85 ÐºÐ¾Ð»Ð¸Ñ\87еÑ\81Ñ\82ва Ð¿Ñ\80оÑ\86еÑ\81Ñ\81ов Ð¸ Ð²ам достаточно имеющихся настроек по умолчанию (если используется официальный Docker-образ) для запуска приложения **только на одном сервере**, а не в кластере.
 
 #### Docker Compose
 
-С Ð¿Ð¾Ð¼Ð¾Ñ\89Ñ\8cÑ\8e **Docker Compose** Ð¼Ð¾Ð¶Ð½Ð¾ Ñ\80азвоÑ\80аÑ\87иваÑ\82Ñ\8c Ð½ÐµÑ\81колÑ\8cко ÐºÐ¾Ð½Ñ\82ейнеÑ\80ов Ð½Ð° **одном Ñ\81еÑ\80веÑ\80е** (не ÐºÐ»Ð°Ñ\81Ñ\82еÑ\80е), Ð½Ð¾ Ð¿Ñ\80и Ñ\8dÑ\82о Ñ\83 Ð\92ас не будет простого способа управления количеством запущенных контейнеров с одновременным сохранением общей сети и **балансировки нагрузки**.
+С Ð¿Ð¾Ð¼Ð¾Ñ\89Ñ\8cÑ\8e **Docker Compose** Ð¼Ð¾Ð¶Ð½Ð¾ Ñ\80азвоÑ\80аÑ\87иваÑ\82Ñ\8c Ð½ÐµÑ\81колÑ\8cко ÐºÐ¾Ð½Ñ\82ейнеÑ\80ов Ð½Ð° **одном Ñ\81еÑ\80веÑ\80е** (не ÐºÐ»Ð°Ñ\81Ñ\82еÑ\80е), Ð½Ð¾ Ð¿Ñ\80и Ñ\8dÑ\82о Ñ\83 Ð²ас не будет простого способа управления количеством запущенных контейнеров с одновременным сохранением общей сети и **балансировки нагрузки**.
 
 В этом случае можно использовать **менеджер процессов**, управляющий **несколькими процессами**, внутри **одного контейнера**.
 
 #### Prometheus и прочие причины
 
-У Ð\92ас могут быть и **другие причины**, когда использование **множества процессов** внутри **одного контейнера** будет проще, нежели запуск **нескольких контейнеров** с **единственным процессом** в каждом из них.
+У Ð²ас могут быть и **другие причины**, когда использование **множества процессов** внутри **одного контейнера** будет проще, нежели запуск **нескольких контейнеров** с **единственным процессом** в каждом из них.
 
\9dапÑ\80имеÑ\80 (в Ð·Ð°Ð²Ð¸Ñ\81имоÑ\81Ñ\82и Ð¾Ñ\82 ÐºÐ¾Ð½Ñ\84игÑ\83Ñ\80аÑ\86ии), Ñ\83 Ð\92ас могут быть инструменты подобные экспортёру Prometheus, которые должны иметь доступ к **каждому запросу** приходящему в контейнер.
\9dапÑ\80имеÑ\80 (в Ð·Ð°Ð²Ð¸Ñ\81имоÑ\81Ñ\82и Ð¾Ñ\82 ÐºÐ¾Ð½Ñ\84игÑ\83Ñ\80аÑ\86ии), Ñ\83 Ð²ас могут быть инструменты подобные экспортёру Prometheus, которые должны иметь доступ к **каждому запросу** приходящему в контейнер.
 
\95Ñ\81ли Ñ\83 Ð\92ас будет **несколько контейнеров**, то Prometheus, по умолчанию,  **при сборе метрик** получит их **только с одного контейнера**, который обрабатывает конкретный запрос, вместо **сбора метрик** со всех работающих контейнеров.
\95Ñ\81ли Ñ\83 Ð²ас будет **несколько контейнеров**, то Prometheus, по умолчанию,  **при сборе метрик** получит их **только с одного контейнера**, который обрабатывает конкретный запрос, вместо **сбора метрик** со всех работающих контейнеров.
 
 В таком случае может быть проще иметь **один контейнер** со **множеством процессов**, с нужным инструментом (таким как экспортёр Prometheus) в этом же контейнере и собирающем метрики со всех внутренних процессов этого контейнера.
 
 ---
 
-Самое Ð³Ð»Ð°Ð²Ð½Ð¾Ðµ - **ни Ð¾Ð´Ð½Ð¾** Ð¸Ð· Ð¿ÐµÑ\80еÑ\87иÑ\81леннÑ\8bÑ\85 Ð¿Ñ\80авил Ð½Ðµ Ñ\8fвлÑ\8fеÑ\82Ñ\81Ñ\8f **вÑ\8bÑ\81еÑ\87еннÑ\8bм Ð² ÐºÐ°Ð¼Ð½Ðµ** Ð¸ Ð\92Ñ\8b Ð½Ðµ Ð¾Ð±Ñ\8fзанÑ\8b Ñ\81лепо Ð¸Ñ\85 Ð¿Ð¾Ð²Ñ\82оÑ\80Ñ\8fÑ\82Ñ\8c. Ð\92Ñ\8b Ð¼Ð¾Ð¶ÐµÑ\82е Ð¸Ñ\81полÑ\8cзоваÑ\82Ñ\8c Ñ\8dÑ\82и Ð¸Ð´ÐµÐ¸ Ð¿Ñ\80и **Ñ\80аÑ\81Ñ\81моÑ\82Ñ\80ении Ð\92ашего конкретного случая** и самостоятельно решать, какая из концепции подходит лучше:
+Самое Ð³Ð»Ð°Ð²Ð½Ð¾Ðµ - **ни Ð¾Ð´Ð½Ð¾** Ð¸Ð· Ð¿ÐµÑ\80еÑ\87иÑ\81леннÑ\8bÑ\85 Ð¿Ñ\80авил Ð½Ðµ Ñ\8fвлÑ\8fеÑ\82Ñ\81Ñ\8f **вÑ\8bÑ\81еÑ\87еннÑ\8bм Ð½Ð° ÐºÐ°Ð¼Ð½Ðµ** Ð¸ Ð²Ñ\8b Ð½Ðµ Ð¾Ð±Ñ\8fзанÑ\8b Ñ\81лепо Ð¸Ñ\85 Ð¿Ð¾Ð²Ñ\82оÑ\80Ñ\8fÑ\82Ñ\8c. Ð²Ñ\8b Ð¼Ð¾Ð¶ÐµÑ\82е Ð¸Ñ\81полÑ\8cзоваÑ\82Ñ\8c Ñ\8dÑ\82и Ð¸Ð´ÐµÐ¸ Ð¿Ñ\80и **Ñ\80аÑ\81Ñ\81моÑ\82Ñ\80ении Ð²ашего конкретного случая** и самостоятельно решать, какая из концепции подходит лучше:
 
 * Использование более безопасного протокола HTTPS
 * Настройки запуска приложения
@@ -488,41 +488,41 @@ CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "80"]
 
 ## Управление памятью
 
\9fÑ\80и **запÑ\83Ñ\81ке Ð¾Ð´Ð½Ð¾Ð³Ð¾ Ð¿Ñ\80оÑ\86еÑ\81Ñ\81а Ð½Ð° ÐºÐ¾Ð½Ñ\82ейнеÑ\80** Ð\92ы получаете относительно понятный, стабильный и ограниченный объём памяти, потребляемый одним контейнером.
\9fÑ\80и **запÑ\83Ñ\81ке Ð¾Ð´Ð½Ð¾Ð³Ð¾ Ð¿Ñ\80оÑ\86еÑ\81Ñ\81а Ð½Ð° ÐºÐ¾Ð½Ñ\82ейнеÑ\80** Ð²ы получаете относительно понятный, стабильный и ограниченный объём памяти, потребляемый одним контейнером.
 
 Вы можете установить аналогичные ограничения по памяти при конфигурировании своей системы управления контейнерами (например, **Kubernetes**). Таким образом система сможет **изменять количество контейнеров** на **доступных ей машинах** приводя в соответствие количество памяти нужной контейнерам с количеством памяти доступной в кластере (наборе доступных машин).
 
\95Ñ\81ли Ñ\83 Ð\92аÑ\81 **пÑ\80оÑ\81Ñ\82енÑ\8cкое** Ð¿Ñ\80иложение, Ð²ÐµÑ\80оÑ\8fÑ\82но Ñ\83 Ð\92аÑ\81 Ð½Ðµ Ð±Ñ\83деÑ\82 **необÑ\85одимоÑ\81Ñ\82и** Ñ\83Ñ\81Ñ\82анавливаÑ\82Ñ\8c Ð¶Ñ\91Ñ\81Ñ\82кие Ð¾Ð³Ñ\80аниÑ\87ениÑ\8f Ð½Ð° Ð²Ñ\8bделÑ\8fемÑ\83Ñ\8e ÐµÐ¼Ñ\83 Ð¿Ð°Ð¼Ñ\8fÑ\82Ñ\8c. Ð\9dо ÐµÑ\81ли Ð¿Ñ\80иложение **иÑ\81полÑ\8cзÑ\83еÑ\82 Ð¼Ð½Ð¾Ð³Ð¾ Ð¿Ð°Ð¼Ñ\8fÑ\82и** (напÑ\80имеÑ\80, Ð¾Ð½Ð¾ Ð¸Ñ\81полÑ\8cзÑ\83еÑ\82 Ð¼Ð¾Ð´ÐµÐ»Ð¸ **маÑ\88инного Ð¾Ð±Ñ\83Ñ\87ениÑ\8f**), Ð\92ам следует проверить, как много памяти ему требуется и отрегулировать **количество контейнеров** запущенных на **каждой машине** (может быть даже добавить машин в кластер).
\95Ñ\81ли Ñ\83 Ð²Ð°Ñ\81 **пÑ\80оÑ\81Ñ\82енÑ\8cкое** Ð¿Ñ\80иложение, Ð²ÐµÑ\80оÑ\8fÑ\82но Ñ\83 Ð²Ð°Ñ\81 Ð½Ðµ Ð±Ñ\83деÑ\82 **необÑ\85одимоÑ\81Ñ\82и** Ñ\83Ñ\81Ñ\82анавливаÑ\82Ñ\8c Ð¶Ñ\91Ñ\81Ñ\82кие Ð¾Ð³Ñ\80аниÑ\87ениÑ\8f Ð½Ð° Ð²Ñ\8bделÑ\8fемÑ\83Ñ\8e ÐµÐ¼Ñ\83 Ð¿Ð°Ð¼Ñ\8fÑ\82Ñ\8c. Ð\9dо ÐµÑ\81ли Ð¿Ñ\80иложение **иÑ\81полÑ\8cзÑ\83еÑ\82 Ð¼Ð½Ð¾Ð³Ð¾ Ð¿Ð°Ð¼Ñ\8fÑ\82и** (напÑ\80имеÑ\80, Ð¾Ð½Ð¾ Ð¸Ñ\81полÑ\8cзÑ\83еÑ\82 Ð¼Ð¾Ð´ÐµÐ»Ð¸ **маÑ\88инного Ð¾Ð±Ñ\83Ñ\87ениÑ\8f**), Ð²ам следует проверить, как много памяти ему требуется и отрегулировать **количество контейнеров** запущенных на **каждой машине** (может быть даже добавить машин в кластер).
 
\95Ñ\81ли Ð\92ы запускаете **несколько процессов в контейнере**, то должны быть уверены, что эти процессы не **займут памяти больше**, чем доступно для контейнера.
\95Ñ\81ли Ð²ы запускаете **несколько процессов в контейнере**, то должны быть уверены, что эти процессы не **займут памяти больше**, чем доступно для контейнера.
 
 ## Подготовительные шаги при запуске контейнеров
 
\95Ñ\81Ñ\82Ñ\8c Ð´Ð²Ð° Ð¾Ñ\81новнÑ\8bÑ\85 Ð¿Ð¾Ð´Ñ\85ода, ÐºÐ¾Ñ\82оÑ\80Ñ\8bе Ð\92ы можете использовать при запуске контейнеров (Docker, Kubernetes и т.п.).
\95Ñ\81Ñ\82Ñ\8c Ð´Ð²Ð° Ð¾Ñ\81новнÑ\8bÑ\85 Ð¿Ð¾Ð´Ñ\85ода, ÐºÐ¾Ñ\82оÑ\80Ñ\8bе Ð²ы можете использовать при запуске контейнеров (Docker, Kubernetes и т.п.).
 
 ### Множество контейнеров
 
\9aогда Ð\92ы запускаете **множество контейнеров**, в каждом из которых работает **только один процесс** (например, в кластере **Kubernetes**), может возникнуть необходимость иметь **отдельный контейнер**, который осуществит **предварительные шаги перед запуском** остальных контейнеров (например, применяет миграции к базе данных).
\9aогда Ð²ы запускаете **множество контейнеров**, в каждом из которых работает **только один процесс** (например, в кластере **Kubernetes**), может возникнуть необходимость иметь **отдельный контейнер**, который осуществит **предварительные шаги перед запуском** остальных контейнеров (например, применяет миграции к базе данных).
 
 !!! info "Информация"
     При использовании Kubernetes, это может быть <a href="https://kubernetes.io/docs/concepts/workloads/pods/init-containers/" class="external-link" target="_blank">Инициализирующий контейнер</a>.
 
\9fÑ\80и Ð¾Ñ\82Ñ\81Ñ\83Ñ\82Ñ\81Ñ\82вии Ñ\82акой Ð½ÐµÐ¾Ð±Ñ\85одимоÑ\81Ñ\82и (допÑ\83Ñ\81Ñ\82им, Ð½Ðµ Ð½Ñ\83жно Ð¿Ñ\80именÑ\8fÑ\82Ñ\8c Ð¼Ð¸Ð³Ñ\80аÑ\86ии Ðº Ð±Ð°Ð·Ðµ Ð´Ð°Ð½Ð½Ñ\8bÑ\85, Ð° Ñ\82олÑ\8cко Ð¿Ñ\80овеÑ\80иÑ\82Ñ\8c, Ñ\87Ñ\82о Ð¾Ð½Ð° Ð³Ð¾Ñ\82ова Ð¿Ñ\80инимаÑ\82Ñ\8c Ñ\81оединениÑ\8f), Ð\92ы можете проводить такую проверку в каждом контейнере перед запуском его основного процесса и запускать все контейнеры **одновременно**.
\9fÑ\80и Ð¾Ñ\82Ñ\81Ñ\83Ñ\82Ñ\81Ñ\82вии Ñ\82акой Ð½ÐµÐ¾Ð±Ñ\85одимоÑ\81Ñ\82и (допÑ\83Ñ\81Ñ\82им, Ð½Ðµ Ð½Ñ\83жно Ð¿Ñ\80именÑ\8fÑ\82Ñ\8c Ð¼Ð¸Ð³Ñ\80аÑ\86ии Ðº Ð±Ð°Ð·Ðµ Ð´Ð°Ð½Ð½Ñ\8bÑ\85, Ð° Ñ\82олÑ\8cко Ð¿Ñ\80овеÑ\80иÑ\82Ñ\8c, Ñ\87Ñ\82о Ð¾Ð½Ð° Ð³Ð¾Ñ\82ова Ð¿Ñ\80инимаÑ\82Ñ\8c Ñ\81оединениÑ\8f), Ð²ы можете проводить такую проверку в каждом контейнере перед запуском его основного процесса и запускать все контейнеры **одновременно**.
 
 ### Только один контейнер
 
\95Ñ\81ли Ñ\83 Ð\92ас несложное приложение для работы которого достаточно **одного контейнера**, но в котором работает **несколько процессов** (или один процесс), то прохождение предварительных шагов можно осуществить в этом же контейнере до запуска основного процесса. Официальный Docker-образ поддерживает такие действия.
\95Ñ\81ли Ñ\83 Ð²ас несложное приложение для работы которого достаточно **одного контейнера**, но в котором работает **несколько процессов** (или один процесс), то прохождение предварительных шагов можно осуществить в этом же контейнере до запуска основного процесса. Официальный Docker-образ поддерживает такие действия.
 
 ## Официальный Docker-образ с Gunicorn и Uvicorn
 
-Я Ð¿Ð¾Ð´Ð³Ð¾Ñ\82овил Ð´Ð»Ñ\8f Ð\92ас Docker-образ, в который включён Gunicorn управляющий процессами (воркерами) Uvicorn, в соответствии с концепциями рассмотренными в предыдущей главе: [Рабочие процессы сервера (воркеры) - Gunicorn совместно с Uvicorn](./server-workers.md){.internal-link target=_blank}.
+Я Ð¿Ð¾Ð´Ð³Ð¾Ñ\82овил Ð´Ð»Ñ\8f Ð²ас Docker-образ, в который включён Gunicorn управляющий процессами (воркерами) Uvicorn, в соответствии с концепциями рассмотренными в предыдущей главе: [Рабочие процессы сервера (воркеры) - Gunicorn совместно с Uvicorn](./server-workers.md){.internal-link target=_blank}.
 
 Этот образ может быть полезен для ситуаций описанных тут: [Множество процессов внутри контейнера для особых случаев](#special-cases).
 
 * <a href="https://github.com/tiangolo/uvicorn-gunicorn-fastapi-docker" class="external-link" target="_blank">tiangolo/uvicorn-gunicorn-fastapi</a>.
 
 !!! warning "Предупреждение"
-    Ð¡ÐºÐ¾Ñ\80ее Ð²Ñ\81его Ñ\83 Ð\92ас **нет необходимости** в использовании этого образа или подобного ему и лучше создать свой образ с нуля как описано тут: [Создать Docker-образ для FastAPI](#docker-fastapi).
+    Ð¡ÐºÐ¾Ñ\80ее Ð²Ñ\81его Ñ\83 Ð²ас **нет необходимости** в использовании этого образа или подобного ему и лучше создать свой образ с нуля как описано тут: [Создать Docker-образ для FastAPI](#docker-fastapi).
 
 В этом образе есть **автоматический** механизм подстройки для запуска **необходимого количества процессов** в соответствии с доступным количеством ядер процессора.
 
@@ -539,11 +539,11 @@ CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "80"]
 
 Это означает, что он будет пытаться **выжать** из процессора как можно больше **производительности**.
 
\9dо Ð\92ы можете изменять и обновлять конфигурацию с помощью **переменных окружения** и т.п.
\9dо Ð²ы можете изменять и обновлять конфигурацию с помощью **переменных окружения** и т.п.
 
 Поскольку количество процессов зависит от процессора, на котором работает контейнер, **объём потребляемой памяти** также будет зависеть от этого.
 
\90 Ð·Ð½Ð°Ñ\87иÑ\82, ÐµÑ\81ли Ð\92ашему приложению требуется много оперативной памяти (например, оно использует модели машинного обучения) и Ваш сервер имеет центральный процессор с большим количеством ядер, но **не слишком большим объёмом оперативной памяти**, то может дойти до того, что контейнер попытается занять памяти больше, чем доступно, из-за чего будет падение производительности (или сервер вовсе упадёт). 🚨
\90 Ð·Ð½Ð°Ñ\87иÑ\82, ÐµÑ\81ли Ð²ашему приложению требуется много оперативной памяти (например, оно использует модели машинного обучения) и Ваш сервер имеет центральный процессор с большим количеством ядер, но **не слишком большим объёмом оперативной памяти**, то может дойти до того, что контейнер попытается занять памяти больше, чем доступно, из-за чего будет падение производительности (или сервер вовсе упадёт). 🚨
 
 
 ### Написание  `Dockerfile`
@@ -562,7 +562,7 @@ COPY ./app /app
 
 ### Большие приложения
 
\95Ñ\81ли Ð\92ы успели ознакомиться с разделом [Приложения содержащие много файлов](../tutorial/bigger-applications.md){.internal-link target=_blank}, состоящие из множества файлов, Ваш Dockerfile может выглядеть так:
\95Ñ\81ли Ð²ы успели ознакомиться с разделом [Приложения содержащие много файлов](../tutorial/bigger-applications.md){.internal-link target=_blank}, состоящие из множества файлов, Ваш Dockerfile может выглядеть так:
 
 ```Dockerfile hl_lines="7"
 FROM tiangolo/uvicorn-gunicorn-fastapi:python3.9
@@ -576,9 +576,9 @@ COPY ./app /app/app
 
 ### Как им пользоваться
 
\95Ñ\81ли Ð\92Ñ\8b Ð¸Ñ\81полÑ\8cзÑ\83еÑ\82е **Kubernetes** (или Ñ\87Ñ\82о-Ñ\82о Ð²Ñ\80оде Ñ\82ого), Ñ\81коÑ\80ее Ð²Ñ\81его Ð\92ам **не нужно** использовать официальный Docker-образ (или другой похожий) в качестве основы, так как управление **количеством запущенных контейнеров** должно быть настроено на уровне кластера. В таком случае лучше **создать образ с нуля**, как описано в разделе Создать [Docker-образ для FastAPI](#docker-fastapi).
\95Ñ\81ли Ð²Ñ\8b Ð¸Ñ\81полÑ\8cзÑ\83еÑ\82е **Kubernetes** (или Ñ\87Ñ\82о-Ñ\82о Ð²Ñ\80оде Ñ\82ого), Ñ\81коÑ\80ее Ð²Ñ\81его Ð²ам **не нужно** использовать официальный Docker-образ (или другой похожий) в качестве основы, так как управление **количеством запущенных контейнеров** должно быть настроено на уровне кластера. В таком случае лучше **создать образ с нуля**, как описано в разделе Создать [Docker-образ для FastAPI](#docker-fastapi).
 
\9eÑ\84иÑ\86иалÑ\8cнÑ\8bй Ð¾Ð±Ñ\80аз Ð¼Ð¾Ð¶ÐµÑ\82 Ð±Ñ\8bÑ\82Ñ\8c Ð¿Ð¾Ð»ÐµÐ·ÐµÐ½ Ð² Ð¾Ñ\82делÑ\8cнÑ\8bÑ\85 Ñ\81лÑ\83Ñ\87аÑ\8fÑ\85, Ð¾Ð¿Ð¸Ñ\81аннÑ\8bÑ\85 Ð²Ñ\8bÑ\88е Ð² Ñ\80азделе [Ð\9cножеÑ\81Ñ\82во Ð¿Ñ\80оÑ\86еÑ\81Ñ\81ов Ð²Ð½Ñ\83Ñ\82Ñ\80и ÐºÐ¾Ð½Ñ\82ейнеÑ\80а Ð´Ð»Ñ\8f Ð¾Ñ\81обÑ\8bÑ\85 Ñ\81лÑ\83Ñ\87аев](#special-cases). Ð\9dапÑ\80имеÑ\80, ÐµÑ\81ли Ð\92аÑ\88е Ð¿Ñ\80иложение **доÑ\81Ñ\82аÑ\82оÑ\87но Ð¿Ñ\80оÑ\81Ñ\82ое**, Ð½Ðµ Ñ\82Ñ\80ебÑ\83еÑ\82 Ð·Ð°Ð¿Ñ\83Ñ\81ка Ð² ÐºÐ»Ð°Ñ\81Ñ\82еÑ\80е Ð¸ Ñ\81поÑ\81обно Ñ\83меÑ\81Ñ\82иÑ\82Ñ\8cÑ\81Ñ\8f Ð² Ð¾Ð´Ð¸Ð½ ÐºÐ¾Ð½Ñ\82ейнеÑ\80, Ñ\82о ÐµÐ³Ð¾ Ð½Ð°Ñ\81Ñ\82Ñ\80ойки Ð¿Ð¾ Ñ\83молÑ\87аниÑ\8e Ð±Ñ\83дÑ\83Ñ\82 Ñ\80абоÑ\82аÑ\82Ñ\8c Ð´Ð¾Ð²Ð¾Ð»Ñ\8cно Ñ\85оÑ\80оÑ\88о. Ð\98ли Ð¶Ðµ Ð\92ы развертываете его с помощью **Docker Compose**, работаете на одном сервере и т. д
\9eÑ\84иÑ\86иалÑ\8cнÑ\8bй Ð¾Ð±Ñ\80аз Ð¼Ð¾Ð¶ÐµÑ\82 Ð±Ñ\8bÑ\82Ñ\8c Ð¿Ð¾Ð»ÐµÐ·ÐµÐ½ Ð² Ð¾Ñ\82делÑ\8cнÑ\8bÑ\85 Ñ\81лÑ\83Ñ\87аÑ\8fÑ\85, Ð¾Ð¿Ð¸Ñ\81аннÑ\8bÑ\85 Ð²Ñ\8bÑ\88е Ð² Ñ\80азделе [Ð\9cножеÑ\81Ñ\82во Ð¿Ñ\80оÑ\86еÑ\81Ñ\81ов Ð²Ð½Ñ\83Ñ\82Ñ\80и ÐºÐ¾Ð½Ñ\82ейнеÑ\80а Ð´Ð»Ñ\8f Ð¾Ñ\81обÑ\8bÑ\85 Ñ\81лÑ\83Ñ\87аев](#special-cases). Ð\9dапÑ\80имеÑ\80, ÐµÑ\81ли Ð²Ð°Ñ\88е Ð¿Ñ\80иложение **доÑ\81Ñ\82аÑ\82оÑ\87но Ð¿Ñ\80оÑ\81Ñ\82ое**, Ð½Ðµ Ñ\82Ñ\80ебÑ\83еÑ\82 Ð·Ð°Ð¿Ñ\83Ñ\81ка Ð² ÐºÐ»Ð°Ñ\81Ñ\82еÑ\80е Ð¸ Ñ\81поÑ\81обно Ñ\83меÑ\81Ñ\82иÑ\82Ñ\8cÑ\81Ñ\8f Ð² Ð¾Ð´Ð¸Ð½ ÐºÐ¾Ð½Ñ\82ейнеÑ\80, Ñ\82о ÐµÐ³Ð¾ Ð½Ð°Ñ\81Ñ\82Ñ\80ойки Ð¿Ð¾ Ñ\83молÑ\87аниÑ\8e Ð±Ñ\83дÑ\83Ñ\82 Ñ\80абоÑ\82аÑ\82Ñ\8c Ð´Ð¾Ð²Ð¾Ð»Ñ\8cно Ñ\85оÑ\80оÑ\88о. Ð\98ли Ð¶Ðµ Ð²ы развертываете его с помощью **Docker Compose**, работаете на одном сервере и т. д
 
 ## Развёртывание образа контейнера
 
@@ -590,11 +590,11 @@ COPY ./app /app/app
 * С использованием **Kubernetes** в кластере
 * С использованием режима Docker Swarm в кластере
 * С использованием других инструментов, таких как Nomad
-* Ð¡ Ð¸Ñ\81полÑ\8cзованием Ð¾Ð±Ð»Ð°Ñ\87ного Ñ\81еÑ\80виÑ\81а, ÐºÐ¾Ñ\82оÑ\80Ñ\8bй Ð±Ñ\83деÑ\82 Ñ\83пÑ\80авлÑ\8fÑ\82Ñ\8c Ñ\80азвоÑ\80аÑ\87иванием Ð\92ашего контейнера
+* Ð¡ Ð¸Ñ\81полÑ\8cзованием Ð¾Ð±Ð»Ð°Ñ\87ного Ñ\81еÑ\80виÑ\81а, ÐºÐ¾Ñ\82оÑ\80Ñ\8bй Ð±Ñ\83деÑ\82 Ñ\83пÑ\80авлÑ\8fÑ\82Ñ\8c Ñ\80азвоÑ\80аÑ\87иванием Ð²ашего контейнера
 
 ## Docker-образ и Poetry
 
\95Ñ\81ли Ð\92Ñ\8b Ð¿Ð¾Ð»Ñ\8cзÑ\83еÑ\82еÑ\81Ñ\8c <a href="https://python-poetry.org/" class="external-link" target="_blank">Poetry</a> Ð´Ð»Ñ\8f Ñ\83пÑ\80авлениÑ\8f Ð·Ð°Ð²Ð¸Ñ\81имоÑ\81Ñ\82Ñ\8fми Ð\92ашего проекта, то можете использовать многоэтапную сборку образа:
\95Ñ\81ли Ð²Ñ\8b Ð¿Ð¾Ð»Ñ\8cзÑ\83еÑ\82еÑ\81Ñ\8c <a href="https://python-poetry.org/" class="external-link" target="_blank">Poetry</a> Ð´Ð»Ñ\8f Ñ\83пÑ\80авлениÑ\8f Ð·Ð°Ð²Ð¸Ñ\81имоÑ\81Ñ\82Ñ\8fми Ð²ашего проекта, то можете использовать многоэтапную сборку образа:
 
 ```{ .dockerfile .annotate }
 # (1)
@@ -664,19 +664,19 @@ CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "80"]
 
 **Этапы сборки Docker-образа** являются частью `Dockerfile` и работают как **временные образы контейнеров**. Они нужны только для создания файлов, используемых в дальнейших этапах.
 
\9fеÑ\80вÑ\8bй Ñ\8dÑ\82ап Ð±Ñ\8bл Ð½Ñ\83жен Ñ\82олÑ\8cко Ð´Ð»Ñ\8f **Ñ\83Ñ\81Ñ\82ановки Poetry** Ð¸ **Ñ\81озданиÑ\8f Ñ\84айла `requirements.txt`**, Ð² ÐºÐ¾Ñ\82оÑ\80Ñ\8bм Ð¿Ñ\80опиÑ\81анÑ\8b Ð·Ð°Ð²Ð¸Ñ\81имоÑ\81Ñ\82и Ð\92ашего проекта, взятые из файла `pyproject.toml`.
\9fеÑ\80вÑ\8bй Ñ\8dÑ\82ап Ð±Ñ\8bл Ð½Ñ\83жен Ñ\82олÑ\8cко Ð´Ð»Ñ\8f **Ñ\83Ñ\81Ñ\82ановки Poetry** Ð¸ **Ñ\81озданиÑ\8f Ñ\84айла `requirements.txt`**, Ð² ÐºÐ¾Ñ\82оÑ\80Ñ\8bм Ð¿Ñ\80опиÑ\81анÑ\8b Ð·Ð°Ð²Ð¸Ñ\81имоÑ\81Ñ\82и Ð²ашего проекта, взятые из файла `pyproject.toml`.
 
 На **следующем этапе** `pip` будет использовать файл `requirements.txt`.
 
 В итоговом образе будет содержаться **только последний этап сборки**, предыдущие этапы будут отброшены.
 
\9fÑ\80и Ð¸Ñ\81полÑ\8cзовании Poetry, Ð¸Ð¼ÐµÐµÑ\82 Ñ\81мÑ\8bÑ\81л Ð¸Ñ\81полÑ\8cзоваÑ\82Ñ\8c **многоÑ\8dÑ\82апнÑ\83Ñ\8e Ñ\81боÑ\80кÑ\83 Docker-обÑ\80аза**, Ð¿Ð¾Ñ\82омÑ\83 Ñ\87Ñ\82о Ð½Ð° Ñ\81амом Ð´ÐµÐ»Ðµ Ð\92ам Ð½Ðµ Ð½Ñ\83жен Poetry Ð¸ ÐµÐ³Ð¾ Ð·Ð°Ð²Ð¸Ñ\81имоÑ\81Ñ\82и Ð² Ð¾ÐºÐ¾Ð½Ñ\87аÑ\82елÑ\8cном Ð¾Ð±Ñ\80азе ÐºÐ¾Ð½Ñ\82ейнеÑ\80а, Ð\92ам **нÑ\83жен Ñ\82олÑ\8cко** Ñ\81генеÑ\80иÑ\80ованнÑ\8bй Ñ\84айл `requirements.txt` Ð´Ð»Ñ\8f Ñ\83Ñ\81Ñ\82ановки Ð·Ð°Ð²Ð¸Ñ\81имоÑ\81Ñ\82ей Ð\92ашего проекта.
\9fÑ\80и Ð¸Ñ\81полÑ\8cзовании Poetry, Ð¸Ð¼ÐµÐµÑ\82 Ñ\81мÑ\8bÑ\81л Ð¸Ñ\81полÑ\8cзоваÑ\82Ñ\8c **многоÑ\8dÑ\82апнÑ\83Ñ\8e Ñ\81боÑ\80кÑ\83 Docker-обÑ\80аза**, Ð¿Ð¾Ñ\82омÑ\83 Ñ\87Ñ\82о Ð½Ð° Ñ\81амом Ð´ÐµÐ»Ðµ Ð²Ð°Ð¼ Ð½Ðµ Ð½Ñ\83жен Poetry Ð¸ ÐµÐ³Ð¾ Ð·Ð°Ð²Ð¸Ñ\81имоÑ\81Ñ\82и Ð² Ð¾ÐºÐ¾Ð½Ñ\87аÑ\82елÑ\8cном Ð¾Ð±Ñ\80азе ÐºÐ¾Ð½Ñ\82ейнеÑ\80а, Ð²Ð°Ð¼ **нÑ\83жен Ñ\82олÑ\8cко** Ñ\81генеÑ\80иÑ\80ованнÑ\8bй Ñ\84айл `requirements.txt` Ð´Ð»Ñ\8f Ñ\83Ñ\81Ñ\82ановки Ð·Ð°Ð²Ð¸Ñ\81имоÑ\81Ñ\82ей Ð²ашего проекта.
 
 А на последнем этапе, придерживаясь описанных ранее правил, создаётся итоговый образ
 
 ### Использование прокси-сервера завершения TLS и Poetry
 
-И снова повторюсь, если используете прокси-сервер (балансировщик нагрузки), такой, как Nginx или Traefik, добавьте в команду запуска опцию `--proxy-headers`:
+И снова повторюсь, если используете прокси-сервер (балансировщик нагрузки), такой как Nginx или Traefik, добавьте в команду запуска опцию `--proxy-headers`:
 
 ```Dockerfile
 CMD ["uvicorn", "app.main:app", "--proxy-headers", "--host", "0.0.0.0", "--port", "80"]
@@ -695,6 +695,6 @@ CMD ["uvicorn", "app.main:app", "--proxy-headers", "--host", "0.0.0.0", "--port"
 
 В большинстве случаев Вам, вероятно, не нужно использовать какой-либо базовый образ, **лучше создать образ контейнера с нуля** на основе официального Docker-образа Python.
 
\9fозабоÑ\82ивÑ\88иÑ\81Ñ\8c Ð¾ **поÑ\80Ñ\8fдке Ð½Ð°Ð¿Ð¸Ñ\81аниÑ\8f** Ð¸Ð½Ñ\81Ñ\82Ñ\80Ñ\83кÑ\86ий Ð² `Dockerfile`, Ð\92Ñ\8b Ñ\81можеÑ\82е Ð¸Ñ\81полÑ\8cзоваÑ\82Ñ\8c **кÑ\8dÑ\88 Docker'а**, **минимизиÑ\80овав Ð²Ñ\80емÑ\8f Ñ\81боÑ\80ки**, Ð¼Ð°ÐºÑ\81ималÑ\8cно Ð¿Ð¾Ð²Ñ\8bÑ\81ив Ñ\81воÑ\8e Ð¿Ñ\80оизводиÑ\82елÑ\8cноÑ\81Ñ\82Ñ\8c (и Ð¸Ð·Ð±ÐµÐ¶Ð°Ñ\82Ñ\8c Ñ\81кÑ\83ки). 😎
\9fозабоÑ\82ивÑ\88иÑ\81Ñ\8c Ð¾ **поÑ\80Ñ\8fдке Ð½Ð°Ð¿Ð¸Ñ\81аниÑ\8f** Ð¸Ð½Ñ\81Ñ\82Ñ\80Ñ\83кÑ\86ий Ð² `Dockerfile`, Ð²Ñ\8b Ñ\81можеÑ\82е Ð¸Ñ\81полÑ\8cзоваÑ\82Ñ\8c **кÑ\8dÑ\88 Docker'а**, **минимизиÑ\80овав Ð²Ñ\80емÑ\8f Ñ\81боÑ\80ки**, Ð¼Ð°ÐºÑ\81ималÑ\8cно Ð¿Ð¾Ð²Ñ\8bÑ\81ив Ñ\81воÑ\8e Ð¿Ñ\80оизводиÑ\82елÑ\8cноÑ\81Ñ\82Ñ\8c (и Ð½Ðµ Ð·Ð°Ñ\81кÑ\83Ñ\87аÑ\82Ñ\8c). 😎
 
 В некоторых особых случаях вы можете использовать официальный образ Docker для FastAPI. 🤓
index a53ab69272143235a88a02cda8ebd5ba86968dfe..5aa300331009e5bded8abbc8eacf3dbad5d39d08 100644 (file)
@@ -1,11 +1,11 @@
 # Об HTTPS
 
-Обычно представляется, что HTTPS это некая  опция, которая либо "включена", либо нет.
+Обычно представляется, что HTTPS это некая опция, которая либо "включена", либо нет.
 
 Но всё несколько сложнее.
 
 !!! tip "Заметка"
-    Ð\95Ñ\81ли Ð\92Ñ\8b Ñ\82оÑ\80опиÑ\82еÑ\81Ñ\8c Ð¸Ð»Ð¸ Ð\92ам не интересно, можете перейти на следующую страницу этого пошагового руководства по размещению приложений на серверах с использованием различных технологий.
+    Ð\95Ñ\81ли Ð²Ñ\8b Ñ\82оÑ\80опиÑ\82еÑ\81Ñ\8c Ð¸Ð»Ð¸ Ð²ам не интересно, можете перейти на следующую страницу этого пошагового руководства по размещению приложений на серверах с использованием различных технологий.
 
 Чтобы **изучить основы HTTPS** для клиента, перейдите по ссылке <a href="https://howhttps.works/" class="external-link" target="_blank">https://howhttps.works/</a>.
 
@@ -22,8 +22,8 @@
 * **TCP не знает о "доменах"**, но знает об IP-адресах.
     * Информация о **запрашиваемом домене** извлекается из запроса **на уровне HTTP**.
 * **Сертификаты HTTPS** "сертифицируют" **конкретный домен**, но проверка сертификатов и шифрование данных происходит на уровне протокола TCP, то есть **до того**, как станет известен домен-получатель данных.
-* **Ð\9fо Ñ\83молÑ\87аниÑ\8e** Ñ\8dÑ\82о Ð¾Ð·Ð½Ð°Ñ\87аеÑ\82, Ñ\87Ñ\82о Ñ\83 Ð\92ас может быть **только один сертификат HTTPS на один IP-адрес**.
-    * Ð\9dе Ð²Ð°Ð¶Ð½Ð¾, Ð½Ð°Ñ\81колÑ\8cко Ð±Ð¾Ð»Ñ\8cÑ\88ой Ñ\83 Ð\92ас сервер и насколько маленькие приложения на нём могут быть.
+* **Ð\9fо Ñ\83молÑ\87аниÑ\8e** Ñ\8dÑ\82о Ð¾Ð·Ð½Ð°Ñ\87аеÑ\82, Ñ\87Ñ\82о Ñ\83 Ð²ас может быть **только один сертификат HTTPS на один IP-адрес**.
+    * Ð\9dе Ð²Ð°Ð¶Ð½Ð¾, Ð½Ð°Ñ\81колÑ\8cко Ð±Ð¾Ð»Ñ\8cÑ\88ой Ñ\83 Ð²ас сервер и насколько маленькие приложения на нём могут быть.
     * Однако, у этой проблемы есть **решение**.
 * Существует **расширение** протокола **TLS** (который работает на уровне TCP, то есть до HTTP) называемое **<a href="https://en.wikipedia.org/wiki/Server_Name_Indication" class="external-link" target="_blank"><abbr title="Указание имени сервера">SNI</abbr></a>**.
     * Расширение SNI позволяет одному серверу (с **одним IP-адресом**) иметь **несколько сертификатов HTTPS** и обслуживать **множество HTTPS-доменов/приложений**.
 
 * получение **зашифрованных HTTPS-запросов**
 * отправка **расшифрованных HTTP запросов** в соответствующее HTTP-приложение, работающее на том же сервере (в нашем случае, это приложение **FastAPI**)
-* получние **HTTP-ответа** от приложения
+* Ð¿Ð¾Ð»Ñ\83Ñ\87ение **HTTP-оÑ\82веÑ\82а** Ð¾Ñ\82 Ð¿Ñ\80иложениÑ\8f
 * **шифрование ответа** используя подходящий **сертификат HTTPS**
 * отправка зашифрованного **HTTPS-ответа клиенту**.
 Такой сервер часто называют **<a href="https://en.wikipedia.org/wiki/TLS_termination_proxy" class="external-link" target="_blank">Прокси-сервер завершения работы TLS</a>** или просто "прокси-сервер".
 
\92оÑ\82 Ð½ÐµÐºÐ¾Ñ\82оÑ\80Ñ\8bе Ð²Ð°Ñ\80ианÑ\82Ñ\8b, ÐºÐ¾Ñ\82оÑ\80Ñ\8bе Ð\92ы можете использовать в качестве такого прокси-сервера:
\92оÑ\82 Ð½ÐµÐºÐ¾Ñ\82оÑ\80Ñ\8bе Ð²Ð°Ñ\80ианÑ\82Ñ\8b, ÐºÐ¾Ñ\82оÑ\80Ñ\8bе Ð²ы можете использовать в качестве такого прокси-сервера:
 
 * Traefik (может обновлять сертификаты)
 * Caddy (может обновлять сертификаты)
 
 ### Имя домена
 
-ЧаÑ\89е Ð²Ñ\81его, Ð²Ñ\81Ñ\91 Ð½Ð°Ñ\87инаеÑ\82Ñ\81Ñ\8f Ñ\81 **пÑ\80иобÑ\80еÑ\82ениÑ\8f Ð¸Ð¼ÐµÐ½Ð¸ Ð´Ð¾Ð¼ÐµÐ½Ð°**. Ð\97аÑ\82ем Ð½Ñ\83жно Ð½Ð°Ñ\81Ñ\82Ñ\80оиÑ\82Ñ\8c DNS-Ñ\81еÑ\80веÑ\80 (веÑ\80оÑ\8fÑ\82но Ñ\83 Ñ\82ого Ð¶Ðµ Ð¿Ñ\80овайдеÑ\80а, ÐºÐ¾Ñ\82оÑ\80Ñ\8bй Ð²Ñ\8bдал Ð\92ам домен).
+ЧаÑ\89е Ð²Ñ\81его, Ð²Ñ\81Ñ\91 Ð½Ð°Ñ\87инаеÑ\82Ñ\81Ñ\8f Ñ\81 **пÑ\80иобÑ\80еÑ\82ениÑ\8f Ð¸Ð¼ÐµÐ½Ð¸ Ð´Ð¾Ð¼ÐµÐ½Ð°**. Ð\97аÑ\82ем Ð½Ñ\83жно Ð½Ð°Ñ\81Ñ\82Ñ\80оиÑ\82Ñ\8c DNS-Ñ\81еÑ\80веÑ\80 (веÑ\80оÑ\8fÑ\82но Ñ\83 Ñ\82ого Ð¶Ðµ Ð¿Ñ\80овайдеÑ\80а, ÐºÐ¾Ñ\82оÑ\80Ñ\8bй Ð²Ñ\8bдал Ð²ам домен).
 
\94алее, Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾, Ð\92ы получаете "облачный" сервер (виртуальную машину) или что-то типа этого, у которого есть <abbr title="Не изменяемый">постоянный</abbr> **публичный IP-адрес**.
\94алее, Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾, Ð²ы получаете "облачный" сервер (виртуальную машину) или что-то типа этого, у которого есть <abbr title="Не изменяемый">постоянный</abbr> **публичный IP-адрес**.
 
\9dа DNS-Ñ\81еÑ\80веÑ\80е (Ñ\81еÑ\80веÑ\80аÑ\85) Ð\92ам Ñ\81ледÑ\83еÑ\82 Ð½Ð°Ñ\81Ñ\82Ñ\80оиÑ\82Ñ\8c Ñ\81ооÑ\82веÑ\82Ñ\81Ñ\82вÑ\83Ñ\8eÑ\89Ñ\83Ñ\8e Ñ\80еÑ\81Ñ\83Ñ\80Ñ\81нÑ\83Ñ\8e Ð·Ð°Ð¿Ð¸Ñ\81Ñ\8c ("`запиÑ\81Ñ\8c A`"), Ñ\83казав, Ñ\87Ñ\82о  **Ð\92аÑ\88 Ð´Ð¾Ð¼ÐµÐ½** Ñ\81вÑ\8fзан Ñ\81 Ð¿Ñ\83блиÑ\87нÑ\8bм **IP-адÑ\80еÑ\81ом Ð\92ашего сервера**.
\9dа DNS-Ñ\81еÑ\80веÑ\80е (Ñ\81еÑ\80веÑ\80аÑ\85) Ð²Ð°Ð¼ Ñ\81ледÑ\83еÑ\82 Ð½Ð°Ñ\81Ñ\82Ñ\80оиÑ\82Ñ\8c Ñ\81ооÑ\82веÑ\82Ñ\81Ñ\82вÑ\83Ñ\8eÑ\89Ñ\83Ñ\8e Ñ\80еÑ\81Ñ\83Ñ\80Ñ\81нÑ\83Ñ\8e Ð·Ð°Ð¿Ð¸Ñ\81Ñ\8c ("`запиÑ\81Ñ\8c A`"), Ñ\83казав, Ñ\87Ñ\82о  **Ð\92аÑ\88 Ð´Ð¾Ð¼ÐµÐ½** Ñ\81вÑ\8fзан Ñ\81 Ð¿Ñ\83блиÑ\87нÑ\8bм **IP-адÑ\80еÑ\81ом Ð²ашего сервера**.
 
 Обычно эту запись достаточно указать один раз, при первоначальной настройке всего сервера.
 
@@ -82,9 +82,9 @@
 
 Теперь давайте сфокусируемся на работе с HTTPS.
 
-Всё начинается с того, что браузер спрашивает у **DNS-серверов**, какой **IP-адрес связан с доменом**,  для примера возьмём домен `someapp.example.com`.
+Всё начинается с того, что браузер спрашивает у **DNS-серверов**, какой **IP-адрес связан с доменом**, для примера возьмём домен `someapp.example.com`.
 
-DNS-Ñ\81еÑ\80веÑ\80а Ð¿Ñ\80иÑ\81Ñ\8bлаÑ\8eÑ\82 Ð±Ñ\80аÑ\83зеÑ\80Ñ\83 Ð¾Ð¿Ñ\80еделÑ\91ннÑ\8bй **IP-адÑ\80еÑ\81**, Ñ\82оÑ\82 Ñ\81амÑ\8bй Ð¿Ñ\83блиÑ\87нÑ\8bй IP-адÑ\80еÑ\81 Ð\92аÑ\88его Ñ\81еÑ\80веÑ\80а, ÐºÐ¾Ñ\82оÑ\80Ñ\8bй Ð\92ы указали в ресурсной "записи А" при настройке.
+DNS-Ñ\81еÑ\80веÑ\80а Ð¿Ñ\80иÑ\81Ñ\8bлаÑ\8eÑ\82 Ð±Ñ\80аÑ\83зеÑ\80Ñ\83 Ð¾Ð¿Ñ\80еделÑ\91ннÑ\8bй **IP-адÑ\80еÑ\81**, Ñ\82оÑ\82 Ñ\81амÑ\8bй Ð¿Ñ\83блиÑ\87нÑ\8bй IP-адÑ\80еÑ\81 Ð²Ð°Ñ\88его Ñ\81еÑ\80веÑ\80а, ÐºÐ¾Ñ\82оÑ\80Ñ\8bй Ð²ы указали в ресурсной "записи А" при настройке.
 
 <img src="/img/deployment/https/https01.svg">
 
@@ -96,7 +96,7 @@ DNS-сервера присылают браузеру определённый
 
 <img src="/img/deployment/https/https02.svg">
 
-Эта часть клиент-серверного взаимодействия устанавливает TLS-соединение и называется  **TLS-рукопожатием**.
+Эта часть клиент-серверного взаимодействия устанавливает TLS-соединение и называется **TLS-рукопожатием**.
 
 ### TLS с расширением SNI
 
@@ -185,7 +185,7 @@ DNS-сервера присылают браузеру определённый
 * **Запуск в качестве программы-сервера** (как минимум, на время обновления сертификатов) на публичном IP-адресе домена.
     * Как уже не раз упоминалось, только один процесс может прослушивать определённый порт определённого IP-адреса.
     * Это одна из причин использования прокси-сервера ещё и в качестве программы обновления сертификатов.
-    * Ð\92 Ñ\81лÑ\83Ñ\87ае, ÐµÑ\81ли Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸ÐµÐ¼ Ñ\81еÑ\80Ñ\82иÑ\84икаÑ\82ов Ð·Ð°Ð½Ð¸Ð¼Ð°ÐµÑ\82Ñ\81Ñ\8f Ð´Ñ\80Ñ\83гаÑ\8f Ð¿Ñ\80огÑ\80амма, Ð\92ам понадобится остановить прокси-сервер, запустить программу обновления сертификатов на сокете, предназначенном для прокси-сервера, настроить прокси-сервер на работу с новыми сертификатами и перезапустить его. Эта схема далека от идеальной, так как Ваши приложения будут недоступны на время отключения прокси-сервера.
+    * Ð\92 Ñ\81лÑ\83Ñ\87ае, ÐµÑ\81ли Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸ÐµÐ¼ Ñ\81еÑ\80Ñ\82иÑ\84икаÑ\82ов Ð·Ð°Ð½Ð¸Ð¼Ð°ÐµÑ\82Ñ\81Ñ\8f Ð´Ñ\80Ñ\83гаÑ\8f Ð¿Ñ\80огÑ\80амма, Ð²ам понадобится остановить прокси-сервер, запустить программу обновления сертификатов на сокете, предназначенном для прокси-сервера, настроить прокси-сервер на работу с новыми сертификатами и перезапустить его. Эта схема далека от идеальной, так как Ваши приложения будут недоступны на время отключения прокси-сервера.
 
 Весь этот процесс обновления, одновременный с обслуживанием запросов, является одной из основных причин, по которой желательно иметь **отдельную систему для работы с HTTPS** в виде прокси-сервера завершения TLS, а не просто использовать сертификаты TLS непосредственно с сервером приложений (например, Uvicorn).
 
@@ -193,6 +193,6 @@ DNS-сервера присылают браузеру определённый
 
 Наличие **HTTPS** очень важно и довольно **критично** в большинстве случаев. Однако, Вам, как разработчику, не нужно тратить много сил на это, достаточно **понимать эти концепции** и принципы их работы.
 
\9dо Ñ\83знав Ð±Ð°Ð·Ð¾Ð²Ñ\8bе Ð¾Ñ\81новÑ\8b **HTTPS** Ð\92Ñ\8b Ð¼Ð¾Ð¶ÐµÑ\82е Ð»ÐµÐ³ÐºÐ¾ Ñ\81овмеÑ\89аÑ\82Ñ\8c Ñ\80азнÑ\8bе Ð¸Ð½Ñ\81Ñ\82Ñ\80Ñ\83менÑ\82Ñ\8b, ÐºÐ¾Ñ\82оÑ\80Ñ\8bе Ð¿Ð¾Ð¼Ð¾Ð³Ñ\83Ñ\82 Ð\92ам в дальнейшей разработке.
\9dо Ñ\83знав Ð±Ð°Ð·Ð¾Ð²Ñ\8bе Ð¾Ñ\81новÑ\8b **HTTPS** Ð²Ñ\8b Ð¼Ð¾Ð¶ÐµÑ\82е Ð»ÐµÐ³ÐºÐ¾ Ñ\81овмеÑ\89аÑ\82Ñ\8c Ñ\80азнÑ\8bе Ð¸Ð½Ñ\81Ñ\82Ñ\80Ñ\83менÑ\82Ñ\8b, ÐºÐ¾Ñ\82оÑ\80Ñ\8bе Ð¿Ð¾Ð¼Ð¾Ð³Ñ\83Ñ\82 Ð²ам в дальнейшей разработке.
 
\92 Ñ\81ледÑ\83Ñ\8eÑ\89иÑ\85 Ð³Ð»Ð°Ð²Ð°Ñ\85 Ñ\8f Ð¿Ð¾ÐºÐ°Ð¶Ñ\83 Ð\92ам несколько примеров, как настраивать **HTTPS** для приложений **FastAPI**. 🔒
\92 Ñ\81ледÑ\83Ñ\8eÑ\89иÑ\85 Ð³Ð»Ð°Ð²Ð°Ñ\85 Ñ\8f Ð¿Ð¾ÐºÐ°Ð¶Ñ\83 Ð²ам несколько примеров, как настраивать **HTTPS** для приложений **FastAPI**. 🔒
index d214a9d62e8525d53879038ae2d1b2993316921e..e88ddc3e2ce9bd53cd19a127918bd150c6ab44e5 100644 (file)
@@ -8,7 +8,7 @@
 
 Обычно **веб-приложения** размещают на удалённом компьютере с серверной программой, которая обеспечивает хорошую производительность, стабильность и т. д., Чтобы ваши пользователи могли эффективно, беспрерывно и беспроблемно обращаться к приложению.
 
-Это отличется от **разработки**, когда вы постоянно меняете код, делаете в нём намеренные ошибки и исправляете их, останавливаете и перезапускаете сервер разработки и т. д.
+ЭÑ\82о Ð¾Ñ\82лиÑ\87аеÑ\82Ñ\81Ñ\8f Ð¾Ñ\82 **Ñ\80азÑ\80абоÑ\82ки**, ÐºÐ¾Ð³Ð´Ð° Ð²Ñ\8b Ð¿Ð¾Ñ\81Ñ\82оÑ\8fнно Ð¼ÐµÐ½Ñ\8fеÑ\82е ÐºÐ¾Ð´, Ð´ÐµÐ»Ð°ÐµÑ\82е Ð² Ð½Ñ\91м Ð½Ð°Ð¼ÐµÑ\80еннÑ\8bе Ð¾Ñ\88ибки Ð¸ Ð¸Ñ\81пÑ\80авлÑ\8fеÑ\82е Ð¸Ñ\85, Ð¾Ñ\81Ñ\82анавливаеÑ\82е Ð¸ Ð¿ÐµÑ\80езапÑ\83Ñ\81каеÑ\82е Ñ\81еÑ\80веÑ\80 Ñ\80азÑ\80абоÑ\82ки Ð¸ Ñ\82. Ð´.
 
 ## Стратегии развёртывания
 
index 1d00b308602533ccd12e8fb4835e74b9c09c2341..a245804896331543bad1aa628cf71c02ac94631d 100644 (file)
@@ -1,6 +1,6 @@
 # Запуск сервера вручную - Uvicorn
 
\94лÑ\8f Ð·Ð°Ð¿Ñ\83Ñ\81ка Ð¿Ñ\80иложениÑ\8f **FastAPI** Ð½Ð° Ñ\83далÑ\91нной Ñ\81еÑ\80веÑ\80ной Ð¼Ð°Ñ\88ине Ð\92ам необходим программный сервер, поддерживающий протокол ASGI, такой как **Uvicorn**.
\94лÑ\8f Ð·Ð°Ð¿Ñ\83Ñ\81ка Ð¿Ñ\80иложениÑ\8f **FastAPI** Ð½Ð° Ñ\83далÑ\91нной Ñ\81еÑ\80веÑ\80ной Ð¼Ð°Ñ\88ине Ð²ам необходим программный сервер, поддерживающий протокол ASGI, такой как **Uvicorn**.
 
 Существует три наиболее распространённые альтернативы:
 
 
 ## Сервер как машина и сервер как программа
 
\92 Ñ\8dÑ\82иÑ\85 Ñ\82еÑ\80минаÑ\85 ÐµÑ\81Ñ\82Ñ\8c Ð½ÐµÐºÐ¾Ñ\82оÑ\80Ñ\8bе Ñ\80азлиÑ\87иÑ\8f Ð¸ Ð\92ам следует запомнить их. 💡
\92 Ñ\8dÑ\82иÑ\85 Ñ\82еÑ\80минаÑ\85 ÐµÑ\81Ñ\82Ñ\8c Ð½ÐµÐºÐ¾Ñ\82оÑ\80Ñ\8bе Ñ\80азлиÑ\87иÑ\8f Ð¸ Ð²ам следует запомнить их. 💡
 
 Слово "**сервер**" чаще всего используется в двух контекстах:
 
 - удалённый или расположенный в "облаке" компьютер (физическая или виртуальная машина).
 - программа, запущенная на таком компьютере (например, Uvicorn).
 
\9fÑ\80оÑ\81Ñ\82о Ð·Ð°Ð¿Ð¾Ð¼Ð½Ð¸Ñ\82е, ÐµÑ\81ли Ð\92ам встретился термин "сервер", то обычно он подразумевает что-то из этих двух смыслов.
\9fÑ\80оÑ\81Ñ\82о Ð·Ð°Ð¿Ð¾Ð¼Ð½Ð¸Ñ\82е, ÐµÑ\81ли Ð²ам встретился термин "сервер", то обычно он подразумевает что-то из этих двух смыслов.
 
\9aогда Ð¸Ð¼ÐµÑ\8eÑ\82 Ð² Ð²Ð¸Ð´Ñ\83 Ð¸Ð¼ÐµÐ½Ð½Ð¾ Ñ\83далÑ\91ннÑ\8bй ÐºÐ¾Ð¼Ð¿Ñ\8cÑ\8eÑ\82еÑ\80, Ñ\87аÑ\81Ñ\82о Ð³Ð¾Ð²Ð¾Ñ\80Ñ\8fÑ\82 Ð¿Ñ\80оÑ\81Ñ\82о **Ñ\81еÑ\80веÑ\80**, Ð½Ð¾ ÐµÑ\89Ñ\91 ÐµÐ³Ð¾ Ð½Ð°Ð·Ñ\8bваÑ\8eÑ\82 **маÑ\88ина**, **Ð\92Ð\9c** (виÑ\80Ñ\82Ñ\83алÑ\8cнаÑ\8f Ð¼Ð°Ñ\88ина), **нода**. Ð\92Ñ\81е Ñ\8dÑ\82и Ñ\82еÑ\80минÑ\8b Ð¾Ð±Ð¾Ð·Ð½Ð°Ñ\87аÑ\8eÑ\82 Ð¾Ð´Ð½Ð¾ Ð¸ Ñ\82о Ð¶Ðµ - Ñ\83далÑ\91ннÑ\8bй ÐºÐ¾Ð¼Ð¿Ñ\8cÑ\8eÑ\82еÑ\80, Ð¾Ð±Ñ\8bÑ\87но Ð¿Ð¾Ð´ Ñ\83пÑ\80авлением Linux, Ð½Ð° ÐºÐ¾Ñ\82оÑ\80ом Ð\92ы запускаете программы.
\9aогда Ð¸Ð¼ÐµÑ\8eÑ\82 Ð² Ð²Ð¸Ð´Ñ\83 Ð¸Ð¼ÐµÐ½Ð½Ð¾ Ñ\83далÑ\91ннÑ\8bй ÐºÐ¾Ð¼Ð¿Ñ\8cÑ\8eÑ\82еÑ\80, Ñ\87аÑ\81Ñ\82о Ð³Ð¾Ð²Ð¾Ñ\80Ñ\8fÑ\82 Ð¿Ñ\80оÑ\81Ñ\82о **Ñ\81еÑ\80веÑ\80**, Ð½Ð¾ ÐµÑ\89Ñ\91 ÐµÐ³Ð¾ Ð½Ð°Ð·Ñ\8bваÑ\8eÑ\82 **маÑ\88ина**, **Ð\92Ð\9c** (виÑ\80Ñ\82Ñ\83алÑ\8cнаÑ\8f Ð¼Ð°Ñ\88ина), **нода**. Ð\92Ñ\81е Ñ\8dÑ\82и Ñ\82еÑ\80минÑ\8b Ð¾Ð±Ð¾Ð·Ð½Ð°Ñ\87аÑ\8eÑ\82 Ð¾Ð´Ð½Ð¾ Ð¸ Ñ\82о Ð¶Ðµ - Ñ\83далÑ\91ннÑ\8bй ÐºÐ¾Ð¼Ð¿Ñ\8cÑ\8eÑ\82еÑ\80, Ð¾Ð±Ñ\8bÑ\87но Ð¿Ð¾Ð´ Ñ\83пÑ\80авлением Linux, Ð½Ð° ÐºÐ¾Ñ\82оÑ\80ом Ð²ы запускаете программы.
 
 ## Установка программного сервера
 
@@ -27,7 +27,7 @@
 
 === "Uvicorn"
 
-    * <a href="https://www.uvicorn.org/" class="external-link" target="_blank">Uvicorn</a>, Ð¼Ð¾Ð»Ð½Ð¸ÐµÑ\81ный ASGI сервер, основанный на библиотеках uvloop и httptools.
+    * <a href="https://www.uvicorn.org/" class="external-link" target="_blank">Uvicorn</a>, Ð¾Ñ\87енÑ\8c Ð±Ñ\8bÑ\81Ñ\82Ñ\80ый ASGI сервер, основанный на библиотеках uvloop и httptools.
 
     <div class="termy">
 
@@ -40,7 +40,7 @@
     </div>
 
     !!! tip "Подсказка"
-        Ð¡ Ð¾Ð¿Ñ\86ией `standard`, Uvicorn Ð±Ñ\83деÑ\82 Ñ\83Ñ\81Ñ\82ановливаться и использоваться с некоторыми дополнительными рекомендованными зависимостями.
+        Ð¡ Ð¾Ð¿Ñ\86ией `standard`, Uvicorn Ð±Ñ\83деÑ\82 Ñ\83Ñ\81Ñ\82анавливаться и использоваться с некоторыми дополнительными рекомендованными зависимостями.
 
         В них входит `uvloop`, высокопроизводительная замена `asyncio`, которая значительно ускоряет работу асинхронных программ.
 
@@ -62,7 +62,7 @@
 
 ## Запуск серверной программы
 
\97аÑ\82ем Ð·Ð°Ð¿Ñ\83Ñ\81Ñ\82иÑ\82е Ð\92аше приложение так же, как было указано в руководстве ранее, но без опции `--reload`:
\97аÑ\82ем Ð·Ð°Ð¿Ñ\83Ñ\81Ñ\82иÑ\82е Ð²аше приложение так же, как было указано в руководстве ранее, но без опции `--reload`:
 
 === "Uvicorn"
 
@@ -103,11 +103,11 @@ Starlette и **FastAPI** основаны на <a href="https://anyio.readthedoc
 
 Тем не менее Uvicorn совместим только с asyncio и обычно используется совместно с <a href="https://github.com/MagicStack/uvloop" class="external-link" target="_blank">`uvloop`</a>, высокопроизводительной заменой `asyncio`.
 
\9dо ÐµÑ\81ли Ð\92ы хотите использовать **Trio** напрямую, то можете воспользоваться **Hypercorn**, так как они совместимы. ✨
\9dо ÐµÑ\81ли Ð²ы хотите использовать **Trio** напрямую, то можете воспользоваться **Hypercorn**, так как они совместимы. ✨
 
 ### Установка Hypercorn с Trio
 
\94лÑ\8f Ð½Ð°Ñ\87ала, Ð\92ам нужно установить Hypercorn с поддержкой Trio:
\94лÑ\8f Ð½Ð°Ñ\87ала, Ð²ам нужно установить Hypercorn с поддержкой Trio:
 
 <div class="termy">
 
@@ -130,15 +130,15 @@ $ hypercorn main:app --worker-class trio
 
 </div>
 
-Hypercorn, Ð² Ñ\81воÑ\8e Ð¾Ñ\87еÑ\80едÑ\8c, Ð·Ð°Ð¿Ñ\83Ñ\81Ñ\82иÑ\82 Ð\92аше приложение использующее Trio.
+Hypercorn, Ð² Ñ\81воÑ\8e Ð¾Ñ\87еÑ\80едÑ\8c, Ð·Ð°Ð¿Ñ\83Ñ\81Ñ\82иÑ\82 Ð²аше приложение использующее Trio.
 
-Таким Ð¾Ð±Ñ\80азом, Ð\92ы сможете использовать Trio в своём приложении. Но лучше использовать AnyIO, для сохранения совместимости и с Trio, и с asyncio. 🎉
+Таким Ð¾Ð±Ñ\80азом, Ð²ы сможете использовать Trio в своём приложении. Но лучше использовать AnyIO, для сохранения совместимости и с Trio, и с asyncio. 🎉
 
 ## Концепции развёртывания
 
 В вышеприведённых примерах серверные программы (например Uvicorn) запускали только **один процесс**, принимающий входящие запросы с любого IP (на это указывал аргумент `0.0.0.0`) на определённый порт (в примерах мы указывали порт `80`).
 
-ЭÑ\82о Ð¾Ñ\81новнаÑ\8f Ð¸Ð´ÐµÑ\8f. Ð\9dо Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾, Ð\92ы озаботитесь добавлением дополнительных возможностей, таких как:
+ЭÑ\82о Ð¾Ñ\81новнаÑ\8f Ð¸Ð´ÐµÑ\8f. Ð\9dо Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾, Ð²ы озаботитесь добавлением дополнительных возможностей, таких как:
 
 * Использование более безопасного протокола HTTPS
 * Настройки запуска приложения
@@ -147,4 +147,4 @@ Hypercorn, в свою очередь, запустит Ваше приложе
 * Управление памятью
 * Использование перечисленных функций перед запуском приложения.
 
-Я поведаю Вам больше о каждой из этих концепций в следующих главах, с конкретными примерами стратегий работы с ними. 🚀
+Я расскажу вам больше о каждой из этих концепций в следующих главах, с конкретными примерами стратегий работы с ними. 🚀