---
title: "Déploiement en région européenne"
description: "Mettre une application en service sur un hébergement européen, avec ses secrets et ses journaux."
url: https://meridal.fr/apprendre/deploiement-en-europe/
language: fr
written: 2026-10-07
verified: 2026-10-07
license: CC BY 4.0
---

[Apprendre](https://meridal.fr/apprendre/) › [Construction et programmation](https://meridal.fr/apprendre/dossier/construire/)

Faire · Niveau 3, Construire · 18 minutes

# Déploiement en région européenne

Mettre une petite application d'IA en service chez un hébergeur européen, avec sa clé d'API gardée hors du code, une adresse protégée et des journaux lisibles ; puis les mêmes gestes chez les autres hébergeurs, et ce que chacun garde hors d'Europe.

Écrit le 7 octobre 2026 · Vérifié le 7 octobre 2026

## Vous saurez

- Déployer une application Python chez un hébergeur français, en une commande
- Ranger la clé et le code d'accès dans les variables de l'hébergeur
- Lire les journaux, et savoir combien de temps ils restent
- Repérer ce qui sort d'Europe : l'appel au modèle, les secrets, les journaux

## Dans le parcours

[Premiers pas en développement](https://meridal.fr/apprendre/parcours/dev-debut/)

Étape 7 sur 8

Aussi dans : [Développement d'applications d'IA](https://meridal.fr/apprendre/deploiement-en-europe/)

- [← Avant Préparer son poste de développement](https://meridal.fr/apprendre/poste-de-developpement/)
- [↑ Plus général Hébergement en Europe](https://meridal.fr/apprendre/hebergement-en-europe/)
- [↓ Plus concret Premier appel à un modèle](https://meridal.fr/apprendre/premier-appel/)
- [→ Ensuite Projet : extraction de factures vers un fichier vérifié](https://meridal.fr/apprendre/projet-extraction-de-factures/)

Rappel de la page précédente

Répondez de tête, puis ouvrez. [Préparer son poste de développement](https://meridal.fr/apprendre/poste-de-developpement/)

**1 Votre programme a besoin d'une clé d'API. Où la mettre ?**

Dans une variable d'environnement, ou un fichier .env exclu de git ; jamais dans le code, ni dans une page web ou une application.

**2 Une clé est partie par erreur dans un dépôt. Que faire d'abord ?**

La supprimer dans la console de l'éditeur, puis en créer une autre : l'effacer du fichier ne suffit pas, elle reste dans l'historique de git.

L'essentiel

1. Un hébergeur fait tourner l'application ; la clé d'API se range dans ses variables d'environnement, jamais dans le dépôt envoyé.
2. Une application en ligne a une adresse publique : sans contrôle, n'importe qui peut l'appeler et dépenser votre crédit.
3. Clever Cloud, Scaleway, OVHcloud et Scalingo sont des sociétés françaises, avec des régions à Paris ou en France.
4. Héberger à Paris ne suffit pas : l'appel au modèle, les secrets et les journaux peuvent partir ailleurs, chacun selon ses réglages.
5. Aucun des services de déploiement décrits ici n'est qualifié SecNumCloud au 15 septembre 2026, d'après le catalogue de l'ANSSI.

## Prérequis

- Le poste de [la page du poste de développement](https://meridal.fr/apprendre/poste-de-developpement/) : uv, git, et la clé de Mistral dans un fichier .env exclu de git.
- Un compte chez l'hébergeur, créé par vous ; Clever Cloud donne des crédits à l'inscription, sans carte.
- Un code d'accès pour protéger l'application, une longue chaîne tirée au hasard, ajouté au fichier .env sous le nom `CODE_ACCES` :

`Terminal`

```
python3 -c "import secrets; print(secrets.token_urlsafe(32))"
```

Le déploiement suit la documentation de Clever Cloud lue le 7 octobre 2026 ; il n'a pas encore été fait par Meridal, qui n'ouvre pas de compte sans l'accord du dirigeant. Les sorties ne sont donc pas montrées.

Pourquoi Clever Cloud ici : une société française, Paris par défaut, et un déploiement natif des projets uv. Les autres hébergeurs sont dans les variantes.

## Étapes

1. Écrire l'application **Ce qu'on voit :** `uv.lock` à la racine du projet, à côté de `app.py` : sa présence déclenche le déploiement natif par uv.

   Une application web minimale : une route `/sante`, que l'hébergeur interroge pour savoir si elle tourne, et une route `/question`, qui transmet la question à Mistral si l'appel porte le bon code d'accès dans l'en-tête `x-code-acces`.

   `Terminal`

   ```
   uv init assistant-web
   cd assistant-web
   uv add fastapi uvicorn mistralai
   ```

   `app.py`

   ```
   import os
   import secrets
   from typing import Annotated

   from fastapi import FastAPI, Header, HTTPException
   from mistralai.client import Mistral
   from pydantic import BaseModel

   app = FastAPI()
   client = Mistral(api_key=os.environ["MISTRAL_API_KEY"])

   class Question(BaseModel):
       texte: str

   @app.get("/sante")
   def sante():
       return {"etat": "ok"}

   @app.post("/question")
   def question(q: Question, x_code_acces: Annotated[str, Header()]):
       # l'adresse est publique : sans le bon code d'accès, rien ne part chez Mistral
       if not secrets.compare_digest(x_code_acces, os.environ["CODE_ACCES"]):
           raise HTTPException(status_code=401)
       r = client.chat.complete(model="mistral-large-latest",
                                messages=[{"role": "user", "content": q.texte}])
       return {"reponse": r.choices[0].message.content}
   ```
2. Installer Clever Tools et se connecter **Ce qu'on voit :** `clever login` ouvre le navigateur ; une fois connecté, Clever Tools garde ses identifiants de connexion dans votre dossier personnel.

   `Mac`

   ```
   brew install CleverCloud/homebrew-tap/clever-tools
   clever login
   ```

   `Windows, PowerShell`

   ```
   winget install CleverTools
   clever login
   ```

   Autre voie : `npm install -g clever-tools`, avec Node.js 24 ou plus récent.
3. Créer l'application, à Paris **Ce qu'on voit :** l'application liée au dossier ; `par`, les centres de données de Clever Cloud à Paris, est la région par défaut.

   `Terminal`

   ```
   clever create --type python --region par assistant-web
   ```
4. Ranger la clé, le code d'accès et la commande de démarrage **Ce qu'on voit :** `clever env` liste les variables : `MISTRAL_API_KEY`, `CODE_ACCES`, et les deux de Clever Cloud. **À vérifier :** Clever Cloud n'a pas de gestionnaire de secrets dédié dans les pages lues : les variables d'environnement en tiennent lieu. Anthropic conseille, dans le nuage, un stockage chiffré des secrets plutôt qu'un fichier .env.

   Les variables de l'hébergeur remplacent le fichier .env, qui ne part pas avec le code.

   `Mac`

   ```
   clever env import < .env
   clever env set CC_PYTHON_UV_RUN_COMMAND "uv run uvicorn --host 0.0.0.0 --port 8080 app:app"
   clever env set CC_HEALTH_CHECK_PATH /sante
   ```

   `Windows, PowerShell`

   ```
   Get-Content .env | clever env import
   clever env set CC_PYTHON_UV_RUN_COMMAND "uv run uvicorn --host 0.0.0.0 --port 8080 app:app"
   clever env set CC_HEALTH_CHECK_PATH /sante
   ```

   La commande de démarrage s'exécute sans substitution de variables : le port s'écrit en chiffres, 8080, celui que Clever Cloud ouvre par défaut.
5. Déployer **Ce qu'on voit :** `clever deploy` envoie le code par git et affiche la construction : `uv sync`, puis le démarrage. La santé est vérifiée sur `/sante` avant que l'application reçoive du trafic. **À vérifier :** `git status` ne doit pas montrer `.env` : le fichier reste exclu de git, comme dans la préparation du poste.

   `Terminal`

   ```
   git add .
   git commit -m "Première version"
   clever deploy
   ```
6. Appeler l'application **Ce qu'on voit :** `{"etat":"ok"}` pour la santé ; une réponse de Mistral avec le bon code d'accès ; une erreur 401 sans lui.

   `Terminal`

   ```
   clever open
   curl https://ADRESSE/sante
   curl -X POST https://ADRESSE/question -H "Content-Type: application/json" -H "x-code-acces: VOTRE_CODE" -d '{"texte": "Bonjour"}'
   ```

   Remplacez ADRESSE par celle que montre `clever open` ou `clever applications`.
7. Lire les journaux **Ce qu'on voit :** les lignes de démarrage d'uvicorn, puis une ligne par appel. Clever Cloud garde les journaux 7 jours par défaut. **À vérifier :** n'écrivez jamais la clé ni le code d'accès dans un journal. La CNIL conseille, pour les journaux de sécurité, une conservation de six mois à un an : à prévoir hors de l'hébergeur si vous en avez besoin.

   `Terminal`

   ```
   clever logs
   clever logs --since 2h
   ```

## Contrôle du résultat

![Le trajet d'une question : le visiteur appelle l'application avec le code d'accès ; l'application tourne à Paris ; l'appel au modèle, les secrets et les journaux peuvent partir ailleurs, chacun selon son réglage.](https://meridal.fr/assets/apprendre/medias/apprendre-deploiement-trajet.svg)

*Ce qu'il faut contrôler au-delà de l'hébergeur : où part l'appel au modèle, où sont gardés les secrets, où sont rangés les journaux. Le détail par hébergeur est dans « Variantes par outil », la correction dans « Problèmes fréquents ».*

- `/sante` répond `{"etat":"ok"}` à l'adresse de l'application
- `/question` sans code d'accès répond 401, et rien n'apparaît dans la console de Mistral l'adresse publique ne dépense pas votre crédit
- `/question` avec le code d'accès répond
- Le dépôt envoyé ne contient ni `.env`, ni clé, ni code d'accès
- `clever logs` montre les appels, sans clé ni code d'accès
- Un plafond de dépense est fixé chez Mistral il n'y en a aucun par défaut

## Problèmes fréquents

**« Your application is listening on localhost instead of publicly »**

**Cause**Le serveur écoute sur 127.0.0.1 au lieu de l'interface publique.

**À faire**Démarrez uvicorn avec `--host 0.0.0.0`, comme dans la commande de l'étape 4.

**L'application part en déploiement « ancien », avec uWSGI**

**Cause**Il manque `uv.lock` à la racine, ou la variable `CC_PYTHON_UV_RUN_COMMAND`.

**À faire**Commitez `uv.lock`, vérifiez la variable, puis `clever deploy`.

**Une variable changée n'est pas prise en compte**

**Cause**Les variables se lisent au démarrage.

**À faire**Redéployez, ou `clever restart`.

**Le déploiement échoue au contrôle de santé**

**Cause**`/sante` ne répond pas par un code 2xx.

**À faire**Appelez `/sante` en local avec `uv run uvicorn app:app`, et lisez `clever logs`.

**Les appels au modèle partent hors d'Europe**

**Cause**L'hébergeur est à Paris, mais l'appel à Mistral passe par son point d'accès mondial, qui ne s'engage pas sur le lieu du calcul.

**À faire**Pointez la bibliothèque sur `api.eu.mistral.ai`, facturé 1,1 fois le tarif. L'API de Claude n'offre que « global » ou « us » ; celle d'OpenAI a une région Europe, sur accord commercial.

## Retour en arrière

- **Revenir à une version précédente** : `clever restart --commit` suivi de l'identifiant de la version, lu dans `git log`.
- **Arrêter tout** : `clever delete --yes` supprime l'application ; changez aussi le code d'accès, et la clé dans la console de Mistral.

## Variantes par outil

Sept hébergeurs pour la même application, relevés le 7 octobre 2026 ; la qualification SecNumCloud d'après le catalogue de l'ANSSI du 15 septembre 2026.

Un avantage À savoir

| Outil et offre | Siège | Région en France | Pour démarrer | SecNumCloud | À savoir |
|---|---|---|---|---|---|
| Clever Cloud application Python, déployée par git | Un avantage : Nantes, France | Un avantage : Paris par défaut (zone par) | Instance pico : 0,00625 € de l'heure ; crédits offerts à l'inscription, sans carte | À savoir : Non qualifié ; l'éditeur dit s'y engager | À savoir : Pas de gestionnaire de secrets dédié trouvé : les variables d'environnement en tiennent lieu |
| Scaleway conteneurs sans serveur | Un avantage : Paris, France | Un avantage : Paris (fr-par) par défaut | Gratuit sous 200 000 vCPU-secondes et 400 000 Go-secondes par mois ; puis 0,00001 € la vCPU-seconde, hors taxe | À savoir : En cours de qualification | À savoir : Un conteneur est public par défaut ; ses secrets ne sont pas ceux du gestionnaire de secrets |
| OVHcloud AI Deploy, à partir d'une image Docker | Un avantage : Roubaix, France | Un avantage : Gravelines (GRA) | 0,033 € de l'heure hors taxe pour 1 vCPU, facturé à la minute | À savoir : Qualifiés : des offres d'infrastructure (IaaS), pas AI Deploy | À savoir : Web PaaS, l'ancienne offre de déploiement simple, est fermé depuis le 31 janvier 2025 |
| Scalingo application Python, déployée par git | Un avantage : Strasbourg, France | Un avantage : Paris, sur Outscale ; une région SecNumCloud sur demande | Conteneur S : 7,20 € hors taxe pour 30 jours | À savoir : La plateforme n'est pas qualifiée ; l'infrastructure Outscale l'est, jusqu'au 30 novembre 2026 | Garde les journaux un an |
| Microsoft Azure App Service | À savoir : Redmond, États-Unis | Un avantage : Paris (francecentral) | Plan F1 gratuit ; B1 Linux : 0,0158 € de l'heure | À savoir : Non qualifié ; « Cloud de Confiance Bleu », de Bleu SAS, en cours de qualification | À savoir : Devant le Sénat, en juin 2025, Microsoft France n'a pas pu garantir que des données ne seraient jamais transmises aux autorités américaines |
| Google Cloud Cloud Run | À savoir : Mountain View, États-Unis | Un avantage : Paris (europe-west9) | Gratuit sous 180 000 vCPU-secondes et 2 millions de requêtes par mois ; prix publiés en dollars | À savoir : Non qualifié ; « S3NS », offre de Thales, qualifiée jusqu'au 17 décembre 2028 | À savoir : Par défaut, les secrets sont répliqués dans le monde et les journaux rangés en zone mondiale |
| AWS ECS Express Mode | À savoir : Seattle, États-Unis ; contrat EMEA au Luxembourg | Un avantage : Paris (eu-west-3) | Fargate : 0,0486 $ par vCPU-heure, plus le répartiteur de charge | À savoir : Non qualifié | À savoir : App Runner, le service simple, est fermé aux nouveaux clients depuis le 30 avril 2026 |

Scaleway OVHcloud Azure Google Cloud AWS

`scw container deploy` construit et déploie depuis les sources, en une commande, à Paris par défaut, sur le port 8080.

Un conteneur est public par défaut ; privé, il s'appelle avec un en-tête `X-Auth-Token`. Les secrets s'ajoutent dans l'onglet Deployment du conteneur, section Secrets ; ils ne sont pas ceux du gestionnaire de secrets de Scaleway. Les journaux sont dans Cockpit, gardés 7 jours gratuitement.

AI Deploy lance une image Docker avec `ovhai app run`, à Gravelines ; une application exige une authentification, sauf lancée avec `--unsecure-http`. Les variables se passent au lancement avec `--env` ; les journaux se lisent avec `ovhai app logs`.

`az webapp up --location francecentral` crée et déploie en une étape, à Paris. Les secrets vont dans les paramètres de l'application, chiffrés au repos ; Microsoft conseille d'y mettre des références à Key Vault. Le flux de journaux est dans le portail, sous Monitoring.

`gcloud run deploy --source .` construit et déploie ; la région se choisit au lancement, Paris étant europe-west9. Les secrets viennent de Secret Manager.

Par défaut, un secret est répliqué dans plusieurs régions du monde, et les journaux sont rangés en zone mondiale : pour rester en Europe, il faut une réplication choisie et des journaux régionalisés, réglés à la création.

App Runner est fermé aux nouveaux clients depuis le 30 avril 2026 ; AWS oriente vers ECS Express Mode, qui demande une image et deux rôles, et crée le répartiteur de charge. Les secrets viennent de Secrets Manager, lus au démarrage du conteneur.

## Vérification

**1 Appliquer Votre application tourne chez un hébergeur. Où mettre la clé de l'API ?**

Dans les variables d'environnement de l'hébergeur, ou son gestionnaire de secrets ; jamais dans le dépôt envoyé.

**2 Comprendre L'hébergeur est à Paris. Les données restent-elles en Europe ?**

Pas forcément : l'appel au modèle part chez son éditeur, et certains hébergeurs gardent secrets et journaux hors de la région par défaut. Chaque maillon se vérifie.

**3 Appliquer Pourquoi protéger l'adresse de l'application ?**

Parce qu'elle est publique : sans contrôle, n'importe qui peut l'appeler et dépenser votre crédit chez l'éditeur du modèle.

## Lectures suivantes

↑ Plus général [Hébergement en Europe Comprendre · Niveau 2 · 12 minutes](https://meridal.fr/apprendre/hebergement-en-europe/)

← Avant [Préparer son poste de développement Faire · Niveau 3 · 14 minutes](https://meridal.fr/apprendre/poste-de-developpement/)

Vous êtes ici

Déploiement en région européenne

→ Ensuite [Projet : extraction de factures vers un fichier vérifié S'exercer · Niveau 3 · 30 minutes](https://meridal.fr/apprendre/projet-extraction-de-factures/)

Premiers pas en développement · étape 8 sur 8

↓ Plus concret [Premier appel à un modèle S'exercer · Niveau 3 · 15 minutes](https://meridal.fr/apprendre/premier-appel/)

[Tout le dossier « Construction et programmation »](https://meridal.fr/apprendre/dossier/construire/)

Les pages qui renvoient ici

- [Interface de discussion et connexion d'entreprise](https://meridal.fr/apprendre/interface-et-connexion-d-entreprise/)
- [Projet : une application déployée en Europe avec connexion d'entreprise](https://meridal.fr/apprendre/projet-application-en-europe/)
- [Sécurité d'une application d'IA](https://meridal.fr/apprendre/securite-d-une-application-d-ia/)

**Limites et sources**

Le déploiement suit la documentation de Clever Cloud du 7 octobre 2026 et n'a pas encore été fait par Meridal. Les prix sont ceux affichés par les éditeurs ce jour, hors taxe quand ils le disent.

La qualification SecNumCloud se lit dans le catalogue de l'ANSSI, mis à jour au moins une fois par mois : une offre hébergée sur une infrastructure qualifiée n'est pas qualifiée elle-même.

Cette page ne remplace pas l'analyse d'un transfert de données hors de l'Union : voir l'hébergement en Europe et la CNIL.

1. La synthèse des hébergeurs : `apprendre/donnees/hebergeurs.json`, chaque case avec sa source.
2. Clever Cloud : [Deploy Python with uv](https://www.clever.cloud/developers/doc/deploy/applications/python/uv/) ; [Clever Tools, Applications](https://www.clever.cloud/developers/doc/manage/cli/applications/).
3. Le relevé complet : `apprendre/recherches/2026-10-07-deploiement-europe.json` (139 sources).
4. L'image d'ouverture : Un métier à tisser Jacquard, ses cartes perforées au-dessus du métier, G. Bruno, Le Tour de la France par deux enfants, édition de 1904 ; domaine public, [Wikimedia Commons, d'après l'exemplaire de l'Université de Toronto](https://commons.wikimedia.org/wiki/File:G._Bruno_-_Le_Tour_de_la_France_par_deux_enfants_p152.jpg).

Écrit par Meridal, avec l'aide de l'IA ; chaque fait vérifié à sa source et relu avant publication. Texte et schémas sous licence [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/deed.fr) : reprenez-les en citant Meridal. Le code sous licence MIT.

Service correspondant

Outiller un métier de bout en bout

à partir de 8 250 €, sur devis

[Voir le service](https://meridal.fr/offre/#metier)

## Un premier échange de 30 minutes

En visio et sans frais : vous décrivez votre situation, nous vous indiquons ce qui est réalisable, avec quels outils et pour quel ordre de prix. Vous pouvez aussi nous écrire ; chaque message reçoit une réponse écrite.

[Réserver 30 minutes](https://meridal.fr/contact/#reserver) [Écrire un message](https://meridal.fr/contact/)
