Browse Source

🌐 Add Russian translation for `docs/ru/docs/deployment/manually.md` (#9417)

Co-authored-by: Artem Golicyn <[email protected]>
Co-authored-by: Sebastián Ramírez <[email protected]>
pull/9501/head
Vladislav Kramorenko 2 years ago
committed by GitHub
parent
commit
42ca1cb42d
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 150
      docs/ru/docs/deployment/manually.md
  2. 1
      docs/ru/mkdocs.yml

150
docs/ru/docs/deployment/manually.md

@ -0,0 +1,150 @@
# Запуск сервера вручную - Uvicorn
Для запуска приложения **FastAPI** на удалённой серверной машине Вам необходим программный сервер, поддерживающий протокол ASGI, такой как **Uvicorn**.
Существует три наиболее распространённые альтернативы:
* <a href="https://www.uvicorn.org/" class="external-link" target="_blank">Uvicorn</a>: высокопроизводительный ASGI сервер.
* <a href="https://pgjones.gitlab.io/hypercorn/" class="external-link" target="_blank">Hypercorn</a>: ASGI сервер, помимо прочего поддерживающий HTTP/2 и Trio.
* <a href="https://github.com/django/daphne" class="external-link" target="_blank">Daphne</a>: ASGI сервер, созданный для Django Channels.
## Сервер как машина и сервер как программа
В этих терминах есть некоторые различия и Вам следует запомнить их. 💡
Слово "**сервер**" чаще всего используется в двух контекстах:
- удалённый или расположенный в "облаке" компьютер (физическая или виртуальная машина).
- программа, запущенная на таком компьютере (например, Uvicorn).
Просто запомните, если Вам встретился термин "сервер", то обычно он подразумевает что-то из этих двух смыслов.
Когда имеют в виду именно удалённый компьютер, часто говорят просто **сервер**, но ещё его называют **машина**, **ВМ** (виртуальная машина), **нода**. Все эти термины обозначают одно и то же - удалённый компьютер, обычно под управлением Linux, на котором Вы запускаете программы.
## Установка программного сервера
Вы можете установить сервер, совместимый с протоколом ASGI, так:
=== "Uvicorn"
* <a href="https://www.uvicorn.org/" class="external-link" target="_blank">Uvicorn</a>, молниесный ASGI сервер, основанный на библиотеках uvloop и httptools.
<div class="termy">
```console
$ pip install "uvicorn[standard]"
---> 100%
```
</div>
!!! tip "Подсказка"
С опцией `standard`, Uvicorn будет установливаться и использоваться с некоторыми дополнительными рекомендованными зависимостями.
В них входит `uvloop`, высокопроизводительная замена `asyncio`, которая значительно ускоряет работу асинхронных программ.
=== "Hypercorn"
* <a href="https://gitlab.com/pgjones/hypercorn" class="external-link" target="_blank">Hypercorn</a>, ASGI сервер, поддерживающий протокол HTTP/2.
<div class="termy">
```console
$ pip install hypercorn
---> 100%
```
</div>
...или какой-либо другой ASGI сервер.
## Запуск серверной программы
Затем запустите Ваше приложение так же, как было указано в руководстве ранее, но без опции `--reload`:
=== "Uvicorn"
<div class="termy">
```console
$ uvicorn main:app --host 0.0.0.0 --port 80
<span style="color: green;">INFO</span>: Uvicorn running on http://0.0.0.0:80 (Press CTRL+C to quit)
```
</div>
=== "Hypercorn"
<div class="termy">
```console
$ hypercorn main:app --bind 0.0.0.0:80
Running on 0.0.0.0:8080 over http (CTRL + C to quit)
```
</div>
!!! warning "Предупреждение"
Не забудьте удалить опцию `--reload`, если ранее пользовались ею.
Включение опции `--reload` требует дополнительных ресурсов, влияет на стабильность работы приложения и может повлечь прочие неприятности.
Она сильно помогает во время **разработки**, но **не следует** использовать её при **реальной работе** приложения.
## Hypercorn с Trio
Starlette и **FastAPI** основаны на <a href="https://anyio.readthedocs.io/en/stable/" class="external-link" target="_blank">AnyIO</a>, которая делает их совместимыми как с <a href="https://docs.python.org/3/library/asyncio-task.html" class="external-link" target="_blank">asyncio</a> - стандартной библиотекой Python, так и с <a href="https://trio.readthedocs.io/en/stable/" class="external-link" target="_blank">Trio</a>.
Тем не менее Uvicorn совместим только с asyncio и обычно используется совместно с <a href="https://github.com/MagicStack/uvloop" class="external-link" target="_blank">`uvloop`</a>, высокопроизводительной заменой `asyncio`.
Но если Вы хотите использовать **Trio** напрямую, то можете воспользоваться **Hypercorn**, так как они совместимы. ✨
### Установка Hypercorn с Trio
Для начала, Вам нужно установить Hypercorn с поддержкой Trio:
<div class="termy">
```console
$ pip install "hypercorn[trio]"
---> 100%
```
</div>
### Запуск с Trio
Далее запустите Hypercorn с опцией `--worker-class` и аргументом `trio`:
<div class="termy">
```console
$ hypercorn main:app --worker-class trio
```
</div>
Hypercorn, в свою очередь, запустит Ваше приложение использующее Trio.
Таким образом, Вы сможете использовать Trio в своём приложении. Но лучше использовать AnyIO, для сохранения совместимости и с Trio, и с asyncio. 🎉
## Концепции развёртывания
В вышеприведённых примерах серверные программы (например Uvicorn) запускали только **один процесс**, принимающий входящие запросы с любого IP (на это указывал аргумент `0.0.0.0`) на определённый порт (в примерах мы указывали порт `80`).
Это основная идея. Но возможно, Вы озаботитесь добавлением дополнительных возможностей, таких как:
* Использование более безопасного протокола HTTPS
* Настройки запуска приложения
* Перезагрузка приложения
* Запуск нескольких экземпляров приложения
* Управление памятью
* Использование перечисленных функций перед запуском приложения.
Я поведаю Вам больше о каждой из этих концепций в следующих главах, с конкретными примерами стратегий работы с ними. 🚀

1
docs/ru/mkdocs.yml

@ -79,6 +79,7 @@ nav:
- deployment/index.md
- deployment/versions.md
- deployment/https.md
- deployment/manually.md
- project-generation.md
- alternatives.md
- history-design-future.md

Loading…
Cancel
Save