---
title: "Configurer votre application"
description: "Injecter de la configuration et des secrets dans vos conteneurs avec les ConfigMaps et Secrets : variables d'environnement, fichiers montés, bonnes pratiques."
source_url:
  html: https://docs.blackswift.cloud/deployer/configmaps-et-secrets/
  md: https://docs.blackswift.cloud/deployer/configmaps-et-secrets.md
---

# Configurer votre application

> Injecter de la configuration et des secrets dans vos conteneurs avec les ConfigMaps et Secrets : variables d'environnement, fichiers montés, bonnes pratiques.

Une même image de conteneur doit pouvoir tourner en dev et en prod : la
configuration ne se met pas dans l'image, elle s'injecte au déploiement. Kubernetes
fournit deux objets pour ça :

- **ConfigMap** : configuration non sensible (URLs, options, fichiers de conf) ;
- **Secret** : données sensibles (mots de passe, tokens, clés d'API).

Exemple complet, prêt à copier :

```yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: mon-app-config
data:
  APP_ENV: "production"
  nginx.conf: |
    server {
      listen 8080;
    }
---
apiVersion: v1
kind: Secret
metadata:
  name: mon-app-secrets
stringData:
  DB_PASSWORD: "changez-moi"
```

## Créer une ConfigMap et un Secret

<Tabs>
<TabItem label="Via Rancher">

<Steps>

1. Dans votre namespace, ouvrez **Storage › ConfigMaps** (ou **Storage › Secrets**).

2. Cliquez sur **Create**, nommez l'objet, puis saisissez vos paires clé/valeur.

3. Validez avec **Create**.

</Steps>

</TabItem>
<TabItem label="Via kubectl">

```bash
# ConfigMap depuis des littéraux
kubectl create configmap mon-app-config \
  --from-literal=APP_ENV=production -n <namespace>

# ConfigMap depuis un fichier
kubectl create configmap mon-app-config \
  --from-file=nginx.conf -n <namespace>

# Secret
kubectl create secret generic mon-app-secrets \
  --from-literal=DB_PASSWORD='changez-moi' -n <namespace>
```

</TabItem>
</Tabs>

## Les injecter dans un conteneur

### En variables d'environnement

```yaml
containers:
  - name: web
    image: mon-app:1.0
    env:
      # Une clé précise d'un Secret
      - name: DB_PASSWORD
        valueFrom:
          secretKeyRef:
            name: mon-app-secrets
            key: DB_PASSWORD
    # Toutes les clés d'une ConfigMap d'un coup
    envFrom:
      - configMapRef:
          name: mon-app-config
```

### En fichiers montés

Idéal pour les fichiers de configuration complets :

```yaml
containers:
  - name: web
    image: nginx:alpine
    volumeMounts:
      - name: config
        mountPath: /etc/nginx/conf.d
volumes:
  - name: config
    configMap:
      name: mon-app-config
      items:
        - key: nginx.conf
          path: default.conf
```

<Aside type="caution">
**Une modification de ConfigMap ou de Secret n'est pas vue par les pods qui
tournent.** Les variables d'environnement sont figées au démarrage du conteneur ;
les fichiers montés se mettent à jour avec un délai, mais la plupart des
applications ne relisent pas leur configuration. Après un changement :

```bash
kubectl rollout restart deployment/mon-app -n <namespace>
```
</Aside>

## Bonnes pratiques

- **Jamais de secrets dans l'image ni dans le YAML committé.** Utilisez
  `stringData` localement, ou créez les Secrets via `kubectl create secret` /
  Rancher, hors de votre dépôt Git.
- **Un objet par application** plutôt qu'une ConfigMap géante partagée : les
  rollouts restent ciblés.
- **Quotas** : 50 ConfigMaps et 50 Secrets par namespace
  ([détails](https://docs.blackswift.cloud/reference/quotas-et-limites.md)).

<Aside type="note" title="💡 Débutant Kubernetes ?">
Documentation officielle :
[ConfigMaps](https://kubernetes.io/docs/concepts/configuration/configmap/) et
[Secrets](https://kubernetes.io/docs/concepts/configuration/secret/).
</Aside>

## Étapes suivantes

- [Exposer votre application](https://docs.blackswift.cloud/deployer/exposer-en-https.md) ;
- [Migrer depuis un docker-compose](https://docs.blackswift.cloud/migrer/depuis-un-docker-compose.md) — la
  conversion `environment:`/`env_file:` → ConfigMap/Secret y est détaillée.
