> ## Documentation Index
> Fetch the complete documentation index at: https://docs.squarecloud.app/llms.txt
> Use this file to discover all available pages before exploring further.

# Variables d'environnement et secrets

> Stockez tokens, clés d'API et chaînes de connexion en variables d'environnement via le tableau de bord, la CLI ou l'API, et lisez-les dans votre code.

Gardez tokens de bot, clés d'API et mots de passe de base de données hors de votre code source. Définissez-les comme variables d'environnement de l'application : votre code les lit à l'exécution comme n'importe quelle autre variable.

## Définir des variables

Les variables d'environnement appartiennent à une seule application. Elles survivent aux redémarrages et aux commits, mais un nouvel envoi crée une nouvelle application sans elles : définissez-les à nouveau sur celle-ci.

<Tabs>
  <Tab title="Tableau de bord">
    1. Ouvrez votre application dans le [tableau de bord](https://squarecloud.app/fr/dashboard) et allez dans **Paramètres** → **Variables d'environnement**.
    2. Ajoutez chaque clé et sa valeur, ou importez un fichier `.env` existant.
    3. Cliquez sur **Enregistrer**. Le tableau de bord vous propose de redémarrer l'application : redémarrez-la pour qu'elle prenne en compte les nouvelles valeurs.

    Lorsque vous envoyez une nouvelle application depuis le tableau de bord, vous pouvez aussi ajouter des variables sur l'écran d'envoi, avant le premier démarrage.
  </Tab>

  <Tab title="CLI">
    Lancez les commandes depuis le dossier de votre projet. La CLI cible l'application dont l'`ID` figure dans votre `squarecloud.app`. Pour en cibler une autre, passez `--app <ID de l'application>` (pour `list`, passez l'ID en argument).

    ```bash theme={"system"}
    # Ajouter ou modifier des variables (les autres restent inchangées)
    squarecloud app env set DISCORD_TOKEN=your-token LOG_LEVEL=info

    # Envoyer chaque ligne d'un fichier .env local
    squarecloud app env set --from-file .env

    # Lister les variables actuelles
    squarecloud app env list

    # Supprimer une variable
    squarecloud app env remove LOG_LEVEL

    # Redémarrer pour appliquer les changements
    squarecloud app restart
    ```

    `squarecloud app env replace` remplace l'ensemble des variables par celles que vous passez, après confirmation. Chaque commande et option est détaillée dans [les variables d'environnement depuis la CLI](/fr/cli-reference/environment-variables) ; pour installer la CLI et vous connecter, consultez le [démarrage rapide de la CLI](/fr/cli-reference/quickstart).
  </Tab>

  <Tab title="VS Code">
    Dans l'[extension Square Cloud](/fr/vscode-extension/features), faites un clic droit sur votre application dans la barre latérale et choisissez **Variables d'environnement** pour les lister, les ajouter, les modifier ou les supprimer. Redémarrez ensuite l'application pour appliquer les changements.
  </Tab>

  <Tab title="API">
    Envoyez les variables à [`POST /v2/apps/{app_id}/envs`](/fr/api-reference/endpoint/apps/envs/add_n_edit) avec une clé d'API disposant du scope `envs:write` :

    ```bash theme={"system"}
    curl -X POST "https://api.squarecloud.app/v2/apps/YOUR_APP_ID/envs" \
      -H "Authorization: YOUR_API_KEY" \
      -H "Content-Type: application/json" \
      -d '{"envs": {"DISCORD_TOKEN": "your-token"}}'
    ```

    Le même chemin permet aussi de [lister](/fr/api-reference/endpoint/apps/envs/get) (`GET`), de [remplacer](/fr/api-reference/endpoint/apps/envs/overwrite) (`PUT`) et de [supprimer](/fr/api-reference/endpoint/apps/envs/remove) (`DELETE`) des variables. L'API ne redémarre pas l'application : appelez ensuite l'[endpoint de redémarrage](/fr/api-reference/endpoint/apps/restart).
  </Tab>
</Tabs>

<Warning>Les variables sont chargées au démarrage de l'application. Après toute modification, redémarrez l'application, sinon elle continue de tourner avec les anciennes valeurs.</Warning>

## Les lire dans votre code

<CodeGroup>
  ```javascript Node.js theme={"system"}
  const token = process.env.DISCORD_TOKEN;

  if (!token) {
    throw new Error("DISCORD_TOKEN is not set");
  }
  ```

  ```python Python theme={"system"}
  import os

  token = os.environ.get("DISCORD_TOKEN")

  if not token:
      raise RuntimeError("DISCORD_TOKEN is not set")
  ```
</CodeGroup>

Échouer immédiatement quand une variable manque vous donne un message clair dans les logs, au lieu d'une erreur déroutante plus tard, comme un token invalide.

## Variables définies par Square Cloud

Votre application démarre avec ces variables déjà définies :

| Variable | Valeur | Sert à |
| - | - | - |
| `PORT` | `80` | Choisir le port sur lequel votre serveur web écoute. |
| `HOST` | `0.0.0.0` | Choisir l'adresse à laquelle votre serveur web se lie. |
| `SQUARECLOUD_APP_ID` | L'ID de votre application | Identifier l'application à l'exécution. |
| `NODE_ENV` | `production` | Indiquer aux bibliothèques Node.js qu'elles tournent en production (runtimes Node.js et TypeScript). |

<Warning>Ne redéfinissez pas `PORT` ni `HOST` sur un site web : la plateforme ne joint un serveur que sur le port 80 et l'hôte `0.0.0.0`.</Warning>

Comme `NODE_ENV` vaut `production`, `npm install` ignore les `devDependencies`. Si votre commande `START` compile le projet (par exemple avec `typescript` ou `vite`), listez ces outils de build dans les `dependencies` de `package.json`.

## Comment les variables parviennent à votre app

Square Cloud stocke les variables dans un fichier `.squarecloud/.env` à l'intérieur de l'application et les charge avec un shell à chaque démarrage, avant l'installation des dépendances et l'exécution de votre commande `START` ou de votre fichier `MAIN`. Deux conséquences :

* **Les noms** doivent utiliser des lettres, des chiffres et des tirets bas, et ne pas commencer par un chiffre.
* **Les valeurs** contenant des espaces ou des caractères spéciaux du shell comme `$`, `&`, `;` ou `|` doivent être entre guillemets, sinon le shell les coupe ou les interprète. Le tableau de bord et `squarecloud app env set` ajoutent les guillemets pour vous. Dans l'extension VS Code ou l'API, entourez vous-même une telle valeur de guillemets simples : saisissez `'p@ss word$1'`, ou envoyez `"PASSWORD": "'p@ss word$1'"` dans le corps de la requête API.

Les limites sont de 256 variables par application, 1 024 caractères par nom et 4 096 caractères par valeur. Les sites statiques (HTML/CSS) ne prennent pas en charge les variables d'environnement et renvoient `STATIC_APP_ENV_NOT_SUPPORTED`.

## Garder les secrets hors de votre envoi

Si votre code charge lui-même un fichier `.env` (par exemple avec `dotenv`), ce fichier doit faire partie de l'envoi. Lister `.env` dans [`squarecloud.ignore`](/fr/getting-started/squarecloud-ignore) démarre alors l'app sans ses secrets, et un bot échoue avec un token invalide.

La configuration la plus sûre : déplacez chaque valeur de votre `.env` dans les variables d'environnement de l'application, comme indiqué ci-dessus. Une fois qu'elles sont définies, vous pouvez exclure `.env` de l'envoi et de votre dépôt Git. `dotenv` n'écrase pas les variables qui existent déjà : le même code continue donc de fonctionner sur votre machine et sur Square Cloud.

<Warning>Ne commitez jamais de tokens ni de mots de passe dans un dépôt public. Si l'un d'eux a fuité, révoquez-le chez le fournisseur (par exemple, réinitialisez le token du bot dans le Developer Portal de Discord) et définissez la nouvelle valeur ici.</Warning>

## Étapes suivantes

<CardGroup cols={2}>
  <Card title="Fichier de configuration" icon="gear-complex-code" href="/fr/getting-started/config-file">
    Définissez `MAIN`, `MEMORY`, `START` et les autres champs de `squarecloud.app`.
  </Card>

  <Card title="Héberger un bot Discord" icon="discord" href="/fr/tutorials/bots/discord">
    Déployez un bot qui lit son token dans une variable d'environnement.
  </Card>

  <Card title="Erreurs des bots Discord" icon="bug" href="/fr/platform/troubleshooting/discord-bot-errors">
    Corrigez un token invalide, des intents manquants et les bots qui passent hors ligne.
  </Card>

  <Card title="Erreurs de connexion aux bases de données" icon="database" href="/fr/platform/troubleshooting/database-connection-errors">
    Connectez-vous avec un `DATABASE_URL` et les bons réglages SSL.
  </Card>
</CardGroup>
