diff --git a/docs/fr/docs/deployment/manually.md b/docs/fr/docs/deployment/manually.md index 3f99ccd9f6..c0c388b02c 100644 --- a/docs/fr/docs/deployment/manually.md +++ b/docs/fr/docs/deployment/manually.md @@ -1,33 +1,82 @@ -# Exécuter un serveur manuellement - Uvicorn +# Exécuter un serveur manuellement { #run-a-server-manually } -La principale chose dont vous avez besoin pour exécuter une application **FastAPI** sur une machine serveur distante est un programme serveur ASGI tel que **Uvicorn**. +## Utiliser la commande `fastapi run` { #use-the-fastapi-run-command } -Il existe 3 principales alternatives : +En bref, utilisez `fastapi run` pour servir votre application FastAPI : + +
+ +```console +$ fastapi run main.py + + FastAPI Starting production server 🚀 + + Searching for package file structure from directories + with __init__.py files + Importing from /home/user/code/awesomeapp + + module 🐍 main.py + + code Importing the FastAPI app object from the module with + the following code: + + from main import app + + app Using import string: main:app + + server Server started at http://0.0.0.0:8000 + server Documentation at http://0.0.0.0:8000/docs + + Logs: + + INFO Started server process [2306215] + INFO Waiting for application startup. + INFO Application startup complete. + INFO Uvicorn running on http://0.0.0.0:8000 (Press CTRL+C + to quit) +``` + +
+ +Cela fonctionnerait pour la plupart des cas. 😎 + +Vous pourriez utiliser cette commande par exemple pour démarrer votre application **FastAPI** dans un conteneur, sur un serveur, etc. + +## Serveurs ASGI { #asgi-servers } + +Allons un peu plus en détail. + +FastAPI utilise un standard pour construire des frameworks web Python et des serveurs appelé ASGI. FastAPI est un framework web ASGI. + +La principale chose dont vous avez besoin pour exécuter une application **FastAPI** (ou toute autre application ASGI) sur une machine serveur distante est un programme serveur ASGI comme **Uvicorn**, c'est celui utilisé par défaut par la commande `fastapi`. + +Il existe plusieurs alternatives, notamment : * Uvicorn : un serveur ASGI haute performance. -* Hypercorn : un serveur - ASGI compatible avec HTTP/2 et Trio entre autres fonctionnalités. -* Daphne : le serveur ASGI - conçu pour Django Channels. +* Hypercorn : un serveur ASGI compatible avec HTTP/2 et Trio entre autres fonctionnalités. +* Daphne : le serveur ASGI conçu pour Django Channels. +* Granian : un serveur HTTP Rust pour les applications Python. +* NGINX Unit : NGINX Unit est un environnement d'exécution d'applications web léger et polyvalent. -## Machine serveur et programme serveur +## Machine serveur et programme serveur { #server-machine-and-server-program } Il y a un petit détail sur les noms à garder à l'esprit. 💡 -Le mot "**serveur**" est couramment utilisé pour désigner à la fois l'ordinateur distant/cloud (la machine physique ou virtuelle) et également le programme qui s'exécute sur cette machine (par exemple, Uvicorn). +Le mot « serveur » est couramment utilisé pour désigner à la fois l'ordinateur distant/cloud (la machine physique ou virtuelle) et également le programme qui s'exécute sur cette machine (par exemple, Uvicorn). -Gardez cela à l'esprit lorsque vous lisez "serveur" en général, cela pourrait faire référence à l'une de ces deux choses. +Gardez cela à l'esprit lorsque vous lisez « serveur » en général, cela pourrait faire référence à l'une de ces deux choses. -Lorsqu'on se réfère à la machine distante, il est courant de l'appeler **serveur**, mais aussi **machine**, **VM** (machine virtuelle), **nœud**. Tout cela fait référence à un type de machine distante, exécutant Linux, en règle générale, sur laquelle vous exécutez des programmes. +Lorsqu'on se réfère à la machine distante, il est courant de l'appeler **serveur**, mais aussi **machine**, **VM** (machine virtuelle), **nœud**. Tout cela fait référence à un type de machine distante, exécutant normalement Linux, sur laquelle vous exécutez des programmes. +## Installer le programme serveur { #install-the-server-program } -## Installer le programme serveur +Lorsque vous installez FastAPI, il est fourni avec un serveur de production, Uvicorn, et vous pouvez le démarrer avec la commande `fastapi run`. -Vous pouvez installer un serveur compatible ASGI avec : +Mais vous pouvez également installer un serveur ASGI manuellement. -//// tab | Uvicorn +Vous devez créer un [environnement virtuel](../virtual-environments.md){.internal-link target=_blank}, l'activer, puis vous pouvez installer l'application serveur. -* Uvicorn, un serveur ASGI rapide comme l'éclair, basé sur uvloop et httptools. +Par exemple, pour installer Uvicorn :
@@ -39,39 +88,21 @@ $ pip install "uvicorn[standard]"
+Un processus similaire s'appliquerait à tout autre programme de serveur ASGI. + /// tip | Astuce En ajoutant `standard`, Uvicorn va installer et utiliser quelques dépendances supplémentaires recommandées. -Cela inclut `uvloop`, le remplaçant performant de `asyncio`, qui fournit le gros gain de performance en matière de concurrence. +Cela inclut `uvloop`, le remplaçant hautes performances de `asyncio`, qui fournit le gros gain de performance en matière de concurrence. + +Lorsque vous installez FastAPI avec quelque chose comme `pip install "fastapi[standard]"`, vous obtenez déjà `uvicorn[standard]` aussi. /// -//// +## Exécuter le programme serveur { #run-the-server-program } -//// tab | Hypercorn - -* Hypercorn, un serveur ASGI également compatible avec HTTP/2. - -
- -```console -$ pip install hypercorn - ----> 100% -``` - -
- -...ou tout autre serveur ASGI. - -//// - -## Exécutez le programme serveur - -Vous pouvez ensuite exécuter votre application de la même manière que vous l'avez fait dans les tutoriels, mais sans l'option `--reload`, par exemple : - -//// tab | Uvicorn +Si vous avez installé un serveur ASGI manuellement, vous devrez normalement passer une chaîne d'import dans un format spécial pour qu'il importe votre application FastAPI :
@@ -83,85 +114,44 @@ $ uvicorn main:app --host 0.0.0.0 --port 80
-//// +/// note | Remarque -//// tab | Hypercorn +La commande `uvicorn main:app` fait référence à : -
+* `main` : le fichier `main.py` (le « module » Python). +* `app` : l'objet créé dans `main.py` avec la ligne `app = FastAPI()`. -```console -$ hypercorn main:app --bind 0.0.0.0:80 +C'est équivalent à : -Running on 0.0.0.0:8080 over http (CTRL + C to quit) +```Python +from main import app ``` -
- -//// - -/// warning - -N'oubliez pas de supprimer l'option `--reload` si vous l'utilisiez. - - L'option `--reload` consomme beaucoup plus de ressources, est plus instable, etc. - - Cela aide beaucoup pendant le **développement**, mais vous **ne devriez pas** l'utiliser en **production**. - /// -## Hypercorn avec Trio +Chaque programme de serveur ASGI alternatif aurait une commande similaire, vous pouvez en lire plus dans leur documentation respective. -Starlette et **FastAPI** sont basés sur -AnyIO, qui les rend -compatibles avec asyncio, de la bibliothèque standard Python et -Trio. +/// warning | Alertes -Néanmoins, Uvicorn n'est actuellement compatible qu'avec asyncio, et il utilise normalement `uvloop`, le remplaçant hautes performances de `asyncio`. +Uvicorn et d'autres serveurs prennent en charge une option `--reload` utile pendant le développement. -Mais si vous souhaitez utiliser directement **Trio**, vous pouvez utiliser **Hypercorn** car il le prend en charge. ✨ +L'option `--reload` consomme beaucoup plus de ressources, est plus instable, etc. -### Installer Hypercorn avec Trio +Cela aide beaucoup pendant le **développement**, mais vous **ne devriez pas** l'utiliser en **production**. -Vous devez d'abord installer Hypercorn avec le support Trio : +/// -
+## Concepts de déploiement { #deployment-concepts } -```console -$ pip install "hypercorn[trio]" ----> 100% -``` +Ces exemples exécutent le programme serveur (par exemple Uvicorn), en démarrant **un seul processus**, à l'écoute sur toutes les IP (`0.0.0.0`) sur un port prédéfini (par exemple `80`). -
+C'est l'idée de base. Mais vous voudrez probablement vous occuper de certaines choses supplémentaires, comme : -### Exécuter avec Trio +* Sécurité - HTTPS +* Exécution au démarrage +* Redémarrages +* Réplication (le nombre de processus en cours d'exécution) +* Mémoire +* Étapes précédant le démarrage -Ensuite, vous pouvez passer l'option de ligne de commande `--worker-class` avec la valeur `trio` : - -
- -```console -$ hypercorn main:app --worker-class trio -``` - -
- -Et cela démarrera Hypercorn avec votre application en utilisant Trio comme backend. - -Vous pouvez désormais utiliser Trio en interne dans votre application. Ou mieux encore, vous pouvez utiliser AnyIO pour que votre code reste compatible avec Trio et asyncio. 🎉 - -## Concepts de déploiement - -Ces exemples lancent le programme serveur (e.g. Uvicorn), démarrant **un seul processus**, sur toutes les IPs (`0.0. -0.0`) sur un port prédéfini (par example, `80`). - -C'est l'idée de base. Mais vous vous préoccuperez probablement de certains concepts supplémentaires, tels que ... : - -* la sécurité - HTTPS -* l'exécution au démarrage -* les redémarrages -* la réplication (le nombre de processus en cours d'exécution) -* la mémoire -* les étapes précédant le démarrage - -Je vous en dirai plus sur chacun de ces concepts, sur la façon de les aborder, et donnerai quelques exemples concrets avec des stratégies pour les traiter dans les prochains chapitres. 🚀 +Je vous en dirai plus sur chacun de ces concepts, sur la manière d'y réfléchir, et donnerai quelques exemples concrets avec des stratégies pour les gérer dans les prochains chapitres. 🚀