snapshot of https://github.com/twentyhq/twenty.git (main, 2026-09-17; blobs > 131072B omitted)
Some checks failed
App Prod-Parity E2E Dispatch / dispatch (push) Failing after 10s
CD Storybook UI / build (push) Failing after 3m25s
CD Storybook UI / dispatch (push) Has been skipped
CD deploy main / website-changed-files (push) Successful in 18m8s
CI Agent Skills / changed-files-check (push) Successful in 18m9s
CI Create App E2E minimal / changed-files-check (push) Successful in 24s
CI Create App / changed-files-check (push) Successful in 26s
CI Docs / changed-files-check (push) Successful in 26s
CI Emails / changed-files-check (push) Successful in 28s
CI Example App Hello World / changed-files-check (push) Successful in 23s
CI Front / changed-files-check (push) Has been skipped
CI Example App Postcard / changed-files-check (push) Successful in 27s
CI UI / changed-files-check (push) Has been skipped
CI Utils Test / changed-files-check (push) Successful in 45s
CI Twenty Apps / discover (push) Successful in 1m3s
CD deploy main / deploy-main (push) Failing after 3s
CI Agent Skills / agent-skills-validate (push) Has been skipped
CI Create App / create-app-test (lint) (push) Has been skipped
CI Emails / emails-test (push) Has been skipped
CI Front / front-task (lingui:compile) (push) Has been skipped
CI Front / front-task (lint) (push) Has been skipped
CI Example App Postcard / example-app-postcard (push) Has been skipped
CI UI / ui-task (lint) (push) Has been skipped
CI UI / ui-task (pack-size) (push) Has been skipped
CI UI / ui-task (size) (push) Has been skipped
CI UI / ui-task (test) (push) Has been skipped
CI UI / ui-task (typecheck) (push) Has been skipped
CI Utils Test / utils-test (push) Has been skipped
CI Twenty Apps / ${{ matrix.app.name }} (push) Has been skipped
CI Emails / ci-emails-status-check (push) Successful in 2s
CI Example App Hello World / ci-example-app-hello-world-status-check (push) Successful in 2s
CI Example App Postcard / ci-example-app-postcard-status-check (push) Successful in 3s
CI UI / ui-sb-test (push) Has been skipped
CI Utils Test / ci-utils-test-status-check (push) Successful in 2s
CI Twenty Apps / ci-twenty-apps-status-check (push) Successful in 2s
CI UI / ci-ui-status-check (push) Successful in 2s
CI Desktop / desktop (push) Failing after 1m8s
Push docs to Crowdin / Push documentation to Crowdin (push) Failing after 55s
Push translations to Crowdin / Extract and upload translations (push) Failing after 5s
Push website translations to Crowdin / Extract and upload website translations (push) Failing after 5s
CI Create App / create-app-test (test) (push) Has been skipped
CI Create App / create-app-test (typecheck) (push) Has been skipped
CI Docs / docs-lint (push) Has been skipped
CI Example App Hello World / example-app-hello-world (push) Has been skipped
CI Front / front-task (lingui:extract) (push) Has been skipped
CI Front / front-task (test) (push) Has been skipped
CI Front / front-task (typecheck) (push) Has been skipped
CI UI / ui-sb-build (push) Failing after 1m32s
CI Twenty Apps / ${{ matrix.app.name }} (${{ matrix.server-source }}) (push) Has been skipped
CI Agent Skills / agent-skills-publish (push) Has been skipped
CI Create App / ci-create-app-status-check (push) Successful in 2s
CI Agent Skills / agent-skills-remote-source (push) Has been skipped
CI Create App E2E minimal / create-app-e2e-minimal (push) Has been cancelled
CI E2E Main / e2e-test (push) Has been cancelled
CI Front / front-sb-build (push) Has been cancelled
CI Front / front-build (push) Has been cancelled
CI Create App E2E minimal / ci-create-app-e2e-minimal-status-check (push) Has been cancelled
CI E2E Main / ci-e2e-main-status-check (push) Has been cancelled
CI E2E Main / notify-main-ci-failure (push) Has been cancelled
CI E2E Main / qa-scout-comment (push) Has been cancelled
CI Front / front-sb-test (push) Has been cancelled
CI Front / front-sb-screenshots (push) Has been cancelled
CI Front / ci-front-status-check (push) Has been cancelled
DPA Sub-Processor Sync / sync-subprocessors (push) Failing after 3s
AI Catalog Sync / sync-catalog (push) Failing after 2s

This commit is contained in:
upstream-mirror
2026-09-17 23:28:13 +05:00
commit e7da97194a
32688 changed files with 4208681 additions and 0 deletions

View File

@@ -0,0 +1,262 @@
---
title: Docker Compose
icon: docker
---
<Warning>
Les conteneurs Docker sont destinés à l'hébergement en production ou à l'auto-hébergement. Pour contribuer, veuillez consulter la [configuration locale](/l/fr/developers/contribute/capabilities/local-setup).
</Warning>
## Vue d'ensemble
Ce guide fournit des instructions pas-à-pas pour installer et configurer l'application Twenty à l'aide de Docker Compose. L'objectif est de simplifier le processus et d'éviter les erreurs courantes qui pourraient compromettre votre configuration.
**Important :** Modifiez uniquement les paramètres explicitement mentionnés dans ce guide. Modifier d'autres configurations peut entraîner des problèmes.
Consultez [Configurer les variables d'environnement](/l/fr/developers/self-host/capabilities/setup) pour la configuration avancée. Toutes les variables d'environnement doivent être déclarées dans le fichier `docker-compose.yml` au niveau du serveur et/ou du worker, selon la variable.
## Exigences du Système
* RAM : Assurez-vous que votre environnement dispose d'au moins 2 Go de RAM. Une mémoire insuffisante peut provoquer des plantages des processus.
* Docker & Docker Compose : Assurez-vous que les deux sont installés et à jour.
## Option 1 : Script en une seule ligne
Installez la dernière version stable de Twenty avec une seule commande :
```bash
bash <(curl -sL https://raw.githubusercontent.com/twentyhq/twenty/main/packages/twenty-docker/scripts/install.sh)
```
Pour installer une version ou une branche spécifique :
```bash
VERSION=vx.y.z BRANCH=branch-name bash <(curl -sL https://raw.githubusercontent.com/twentyhq/twenty/main/packages/twenty-docker/scripts/install.sh)
```
* Remplacez x.y.z par le numéro de version désiré.
* Remplacez nom-branche par le nom de la branche que vous souhaitez installer.
## Option 2 : Étapes manuelles
Suivez ces étapes pour une installation manuelle.
### Étape 1 : Configurez le Fichier Environnement
1. **Créez le Fichier .env**
Copiez le fichier d'exemple d'environnement vers un nouveau fichier .env dans votre répertoire de travail :
```bash
curl -o .env https://raw.githubusercontent.com/twentyhq/twenty/refs/heads/main/packages/twenty-docker/.env.example
```
2. **Générer une clé de chiffrement**
Exécutez la commande suivante pour générer une chaîne aléatoire unique :
```bash
openssl rand -base64 32
```
**Important :** Gardez cette valeur secrète / ne la partagez pas. La perte de `ENCRYPTION_KEY` signifie la perte d’accès à chaque secret stocké dans la base de données (jetons OAuth, variables d’application, secrets TOTP, etc.).
3. **Mettez à jour le `.env`**
Remplacez la valeur de l'espace réservé dans votre fichier .env par le jeton généré :
```ini
ENCRYPTION_KEY=random_string
```
Voir le [guide de rotation des clés](/l/fr/developers/self-host/capabilities/key-rotation) pour obtenir des instructions sur la rotation de la clé sans interruption de service.
4. **Définissez le Mot de Passe de Postgres**
Mettez à jour la valeur `PG_DATABASE_PASSWORD` dans le fichier .env avec un mot de passe fort sans caractères spéciaux.
```ini
PG_DATABASE_PASSWORD=my_strong_password
```
### Étape 2 : Obtenez le Fichier Docker Compose
Téléchargez le fichier `docker-compose.yml` dans votre répertoire de travail :
```bash
curl -o docker-compose.yml https://raw.githubusercontent.com/twentyhq/twenty/refs/heads/main/packages/twenty-docker/docker-compose.yml
```
### Étape 3 : Lancer l'Application
Démarrez les conteneurs Docker :
```bash
docker compose up -d
```
### Étape 4 : Accéder à l'Application
Si vous hébergez twentyCRM sur votre ordinateur, ouvrez votre navigateur et allez à [http://localhost:3000](http://localhost:3000).
Si vous l'hébergez sur un serveur, vérifiez que le serveur fonctionne et que tout est en ordre avec
```bash
curl http://localhost:3000
```
## Configuration
### Exposer Twenty à un Accès Externe
Par défaut, Twenty fonctionne sur `localhost` au port `3000`. L’interface utilisateur résout l’API à partir de l’origine propre du navigateur, elle se charge donc à partir de n’importe quel nom d’hôte qui atteint le conteneur — mais définissez tout de même `SERVER_URL` sur votre URL publique : le serveur l’utilise pour les liens générés (e‑mails, callbacks OAuth) et pour détecter le HTTPS pour les cookies sécurisés.
#### Comprendre `SERVER_URL`
* **Protocole :** Utilisez `http` ou `https` selon votre configuration.
* Utilisez `http` si vous n'avez pas configuré SSL.
* Utilisez `https` si vous avez configuré SSL.
* **Domaine/IP :** Il s'agit du nom de domaine ou de l'adresse IP où votre application est accessible.
* **Port :** Incluez le numéro de port si vous n'utilisez pas les ports par défaut (`80` pour `http`, `443` pour `https`).
### Exigences SSL
Le SSL (HTTPS) est requis pour que certaines fonctionnalités des navigateurs fonctionnent correctement. Bien que ces fonctionnalités puissent fonctionner lors du développement local (car les navigateurs traitent localhost différemment), une configuration SSL appropriée est nécessaire lors de l'hébergement de Twenty sur un domaine régulier.
Par exemple, l'API du presse-papiers pourrait nécessiter un contexte sécurisé - certaines fonctionnalités comme les boutons de copie dans toute l'application pourraient ne pas fonctionner sans HTTPS activé.
Nous vous recommandons vivement de mettre en place Twenty derrière un proxy inverse avec terminaison SSL pour une sécurité et une fonctionnalité optimales.
#### Configurer `SERVER_URL`
1. **Déterminez Votre URL d'Accès**
* **Sans Proxy Inverse (Accès Direct):**
Si vous accédez directement à l'application sans un proxy inverse :
```ini
SERVER_URL=http://your-domain-or-ip:3000
```
* **Avec Proxy Inverse (Ports Standards):**
Si vous utilisez un proxy inverse comme Nginx ou Traefik et que vous avez SSL configuré :
```ini
SERVER_URL=https://your-domain-or-ip
```
* **Avec Proxy Inverse (Ports Personnalisés):**
Si vous utilisez des ports non standards :
```ini
SERVER_URL=https://your-domain-or-ip:custom-port
```
2. **Mettez à jour le Fichier `.env`**
Ouvrez votre fichier `.env` et mettez à jour le `SERVER_URL`:
```ini
SERVER_URL=http(s)://your-domain-or-ip:your-port
```
**Exemples :**
* Accès direct sans SSL :
```ini
SERVER_URL=http://123.45.67.89:3000
```
* Accès via domaine avec SSL :
```ini
SERVER_URL=https://mytwentyapp.com
```
3. **Redémarrez l'Application**
Pour que les changements prennent effet, redémarrez les conteneurs Docker :
```bash
docker compose down
docker compose up -d
```
#### Considérations
* **Configuration du Proxy Inverse :**
Assurez-vous que votre proxy inverse redirige les requêtes vers le port interne correct (`3000` par défaut). Configurez la terminaison SSL et tous les en-têtes nécessaires.
* **Paramètres de Pare-feu :**
Ouvrez les ports nécessaires dans votre pare-feu pour permettre l'accès externe.
* **Cohérence :**
Le `SERVER_URL` doit correspondre à la façon dont les utilisateurs accèdent à votre application dans leurs navigateurs.
#### Persistance
* **Volumes de Données :**
La configuration de Docker Compose utilise des volumes pour persister les données pour la base de données et le stockage du serveur.
* **Environnements sans État :**
Si vous déployez dans un environnement sans état (par exemple, certains services cloud), configurez un stockage externe pour persister les données.
## Sauvegarde et restauration
Des sauvegardes régulières protègent les données de votre CRM contre la perte.
### Créer une sauvegarde de la base de données
```bash
docker exec twenty-postgres pg_dump -U postgres twenty > backup_$(date +%Y%m%d).sql
```
### Automatiser les sauvegardes quotidiennes
Ajoutez à votre crontab (`crontab -e`) :
```bash
0 2 * * * docker exec twenty-postgres pg_dump -U postgres twenty > /backups/twenty_$(date +\%Y\%m\%d).sql
```
### Restaurer à partir d'une sauvegarde
1. Arrêtez l'application :
```bash
docker compose stop server worker
```
2. Restaurez la base de données :
```bash
docker exec -i twenty-postgres psql -U postgres twenty < backup_20240115.sql
```
3. Redémarrez les services :
```bash
docker compose up -d
```
### Bonnes pratiques de sauvegarde
* **Testez les restaurations régulièrement** — vérifiez que les sauvegardes fonctionnent réellement
* **Stockez les sauvegardes hors site** — utilisez un stockage cloud (S3, GCS, etc.)
* **Chiffrez les données sensibles** — protégez les sauvegardes à l'aide du chiffrement
* **Conservez plusieurs copies** — gardez des sauvegardes quotidiennes, hebdomadaires et mensuelles
## Résolution des problèmes
Si vous rencontrez un problème, consultez [Dépannage](/l/fr/developers/self-host/capabilities/troubleshooting) pour des solutions.
## Hébergement infogéré
<Tip>
Vous préférez ne pas héberger et maintenir Twenty vous-même ? [Trouvez un partenaire d’hébergement Twenty certifié](https://twenty.com/partners/list?categories=HOSTING\&ref=docs-docker-compose) pour déployer, héberger et gérer votre instance de bout en bout. *(Ou contactez notre équipe : [contact@twenty.com](mailto:contact@twenty.com).)*
</Tip>

View File

@@ -0,0 +1,60 @@
---
title: Rotation des clés
icon: rotate
---
Twenty possède deux familles de clés indépendantes :
* **Clés de signature JWT** — paires de clés asymétriques ES256 (avec balise `kid`) stockées dans `core."signingKey"`, utilisées pour signer et vérifier les jetons d’accès / de rafraîchissement.
* **Clé de chiffrement au repos** — `ENCRYPTION_KEY`, utilisée pour chiffrer les jetons OAuth, les variables d’application, les clés privées de clés de signature, les valeurs de configuration sensibles et les secrets TOTP à l’intérieur d’une enveloppe `enc:v2:`.
`APP_SECRET` est un secret hérité conservé pour la rétrocompatibilité : lorsque `ENCRYPTION_KEY` n’est pas défini, il agit comme mécanisme de secours pour le chiffrement au repos / le cookie de session, et il continue de vérifier les jetons d’accès HS256 préexistants. Il sera déprécié.
## Clés de signature JWT
Chaque clé contient une `publicKey` (conservée indéfiniment afin de pouvoir vérifier les jetons émis précédemment), une `privateKey` chiffrée (utilisée uniquement tant que la clé est actuelle), un indicateur `isCurrent` (exactement une ligne à la fois) et un champ `revokedAt` facultatif.
### Faire pivoter la clé actuelle
Définissez `SIGNING_KEY_ROTATION_DAYS` pour l’activer : une tâche cron quotidienne émet alors une nouvelle clé actuelle dès que l’ancienne dépasse ce seuil. Les clés précédentes ne sont *pas* révoquées, donc les jetons signés avec celles-ci restent vérifiables. Laissez la variable non définie pour désactiver la rotation automatique.
<Note>La rotation automatique est disponible à partir de la v2.6+.</Note>
### Révoquer une clé (fuite / urgence uniquement)
**Settings → Admin Panel → Signing keys → Revoke** sur une ligne non actuelle. Efface le matériel privé chiffré, définit `revokedAt` et rejette chaque jeton existant signé avec ce `kid`.
## Faire pivoter `ENCRYPTION_KEY`
<Note>La commande `secret-encryption:rotate` décrite ci-dessous est fournie à partir de la v2.6+.</Note>
Chaque valeur chiffrée est encapsulée sous la forme `enc:v2:\<keyId>:\<payload>`, où `\<keyId>` est un préfixe hexadécimal sur 8 caractères dérivé de la clé brute. La rotation est en ligne et reprenable.
1. **Générez une nouvelle clé** : `openssl rand -base64 32`.
2. **Configurez les deux clés côte à côte** dans `.env`, puis redémarrez :
```ini
ENCRYPTION_KEY=NEW_VALUE
FALLBACK_ENCRYPTION_KEY=OLD_VALUE
```
Les nouvelles écritures utilisent la nouvelle clé, les lignes existantes se déchiffrent toujours via la clé de secours.
3. **Rechiffrez les lignes existantes** :
```bash
docker exec -it {server_container} yarn command:prod secret-encryption:rotate
```
La commande parcourt six sites (`connected-account-tokens`, `application-variable`, `application-registration-variable`, `signing-key-private-keys`, `sensitive-config-storage`, `totp-secrets`). Un filtre SQL ignore les lignes déjà sur le nouveau `\<keyId>`, de sorte que la commande est idempotente : interrompez-la et relancez-la si nécessaire. Quitte avec un code de sortie non nul si une ligne échoue — relancez pour réessayer.
| Option | Description |
| ---------------------------------------- | ----------------------------------------------------------------- |
| `-s, --site \<site>` | Limiter à un seul site. |
| `-b, --batch-size \<n>` | Lignes par lot (valeur par défaut `200`, maximum `5000`). |
| `-d, --dry-run` | Déchiffrer + rechiffrer en mémoire, ignorer la commande `UPDATE`. |
4. **Supprimez la clé de secours** une fois que `--dry-run` n’affiche plus aucune ligne restante : supprimez `FALLBACK_ENCRYPTION_KEY` et redémarrez.
## Prise en charge héritée de `APP_SECRET`
Les instances plus anciennes qui n’ont jamais défini `ENCRYPTION_KEY` utilisent `APP_SECRET` comme clé de chiffrement au repos (et comme secret de cookie de session, dérivé de celle-ci). Ce chemin est conservé pour la rétrocompatibilité mais est **déprécié** — définissez une `ENCRYPTION_KEY` dédiée et suivez la procédure de rotation ci-dessus pour migrer. `APP_SECRET` reste lui-même utilisé pour vérifier les anciens jetons d’accès HS256.

View File

@@ -0,0 +1,413 @@
---
title: Installation
icon: gear
---
# Gestion de la configuration
<Warning>
**Première installation ?** Suivez le [Guide d’installation de Docker Compose](/l/fr/developers/self-host/capabilities/docker-compose) pour faire fonctionner Twenty, puis revenez ici pour la configuration.
</Warning>
Twenty offre **deux modes de configuration** pour répondre à différents besoins de déploiement :
**Accès au panneau d'administration :** Seuls les utilisateurs avec des privilèges d'administrateur (`canAccessFullAdminPanel: true`) peuvent accéder à l'interface de configuration.
## 1. Configuration du panneau d'administration (par défaut)
```bash
IS_CONFIG_VARIABLES_IN_DB_ENABLED=true # default
```
**La plupart des configurations se fait via l'interface utilisateur** après l'installation :
1. Accédez à votre instance Twenty (généralement `http://localhost:3000`)
2. Allez dans **Paramètres / Panneau d’administration / Variables de configuration**
3. Configurez les intégrations, les e-mails, le stockage et plus encore
4. Les modifications prennent effet immédiatement (dans les 15 secondes pour les déploiements multi-conteneurs)
<Warning>
**Déploiements multi-conteneurs :** En utilisant la configuration de la base de données (`IS_CONFIG_VARIABLES_IN_DB_ENABLED=true`), les conteneurs serveur et travailleur lisent à partir de la même base de données. Les modifications du panneau d'administration affectent les deux automatiquement, éliminant le besoin de dupliquer les variables d'environnement entre les conteneurs (sauf pour les variables d'infrastructure).
</Warning>
**Ce que vous pouvez configurer via le panneau d'administration :**
* **Authentification** - Google/Microsoft OAuth, paramètres de mot de passe
* **E-mail** - Paramètres SMTP, modèles, vérification
* **Stockage** - Configuration S3, chemins de stockage local
* **Intégrations** - Gmail, Google Agenda, services Microsoft
* **Workflow & Limitation de débit** - Limites d'exécution, limitation de l'API
* **Et bien plus encore...**
![Variables de configuration du panneau d'administration](/images/user-guide/setup/admin-panel-config-variables.png)
<Warning>
Chaque variable est documentée avec des descriptions dans votre panneau d'administration sous **Paramètres → Panneau d'administration → Variables de configuration**.
Certains paramètres d'infrastructure comme les connexions de base de données (`PG_DATABASE_URL`), les URL du serveur (`SERVER_URL`) et les secrets (`ENCRYPTION_KEY`, `FALLBACK_ENCRYPTION_KEY`) ne peuvent être configurés que via le fichier `.env`.
[Référence technique complète →](https://github.com/twentyhq/twenty/blob/main/packages/twenty-server/src/engine/core-modules/twenty-config/config-variables.ts)
</Warning>
## Clés de chiffrement
Twenty utilise deux clés de chiffrement uniquement définissables via des variables d'environnement :
| Variable | Objectif | Obligatoire |
| ------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- |
| `ENCRYPTION_KEY` | Clé principale utilisée pour chiffrer les secrets au repos (jetons OAuth, variables d'application, clés privées de signature, secrets TOTP, valeurs de configuration sensibles). | Oui pour les nouvelles installations (les anciennes installations peuvent s'appuyer à la place sur `APP_SECRET` — voir ci-dessous) |
| `FALLBACK_ENCRYPTION_KEY` | Clé utilisée uniquement pour la vérification. Définie lors d'une rotation sur l’*ancienne* valeur de `ENCRYPTION_KEY` afin que les lignes existantes restent déchiffrables. | Uniquement pendant la rotation |
Pour assurer la rétrocompatibilité, si `ENCRYPTION_KEY` n'est pas défini, Twenty se rabat sur `APP_SECRET` pour le chiffrement au repos, ce qui correspond au comportement historique des anciens déploiements. Les nouvelles installations doivent toujours définir une `ENCRYPTION_KEY` dédiée.
Générez les valeurs avec `openssl rand -base64 32` et stockez-les dans un endroit sûr (un gestionnaire de secrets, une configuration scellée, etc.). Perdre `ENCRYPTION_KEY` signifie perdre l'accès à tous les secrets stockés dans la base de données.
Pour faire pivoter `ENCRYPTION_KEY` sans temps d'arrêt, consultez le [guide de rotation des clés](/l/fr/developers/self-host/capabilities/key-rotation).
## 2. Configuration réservée à l'environnement
```bash
IS_CONFIG_VARIABLES_IN_DB_ENABLED=false
```
**Toute la configuration est gérée via les fichiers `.env` :**
1. Définissez `IS_CONFIG_VARIABLES_IN_DB_ENABLED=false` dans votre fichier `.env`
2. Ajoutez toutes les variables de configuration à votre fichier `.env`
3. Redémarrez les conteneurs pour que les modifications prennent effet
4. Le panneau d'administration affichera les valeurs actuelles mais ne pourra pas les modifier
## Mode multi-espaces de travail
Par défaut, Twenty fonctionne en **mode à espace de travail unique** — idéal pour la plupart des déploiements auto-hébergés où vous avez besoin d'une seule instance CRM pour votre organisation.
### Mode à espace de travail unique (par défaut)
```bash
IS_MULTIWORKSPACE_ENABLED=false # default
```
* Un espace de travail par instance Twenty
* Le premier utilisateur devient automatiquement administrateur avec tous les privilèges (`canImpersonate` et `canAccessFullAdminPanel`)
* Les nouvelles inscriptions sont désactivées après la création du premier espace de travail
* Structure d'URL simple : `https://your-domain.com`
### Activation du mode multi-espaces de travail
```bash
IS_MULTIWORKSPACE_ENABLED=true
DEFAULT_SUBDOMAIN=app # default value
```
Activez le mode multi-espaces de travail pour des déploiements de type SaaS où plusieurs équipes indépendantes ont besoin de leurs propres espaces de travail sur la même instance Twenty.
**Principales différences par rapport au mode à espace de travail unique :**
* Plusieurs espaces de travail peuvent être créés sur la même instance
* Chaque espace de travail possède son propre sous-domaine (par exemple, `sales.your-domain.com`, `marketing.your-domain.com`)
* Les utilisateurs s'inscrivent et se connectent sur `{DEFAULT_SUBDOMAIN}.your-domain.com` (par exemple, `app.your-domain.com`)
* Aucun privilège d'administrateur automatique — le premier utilisateur de chaque espace de travail est un utilisateur standard
* Des paramètres spécifiques à l'espace de travail, comme le sous-domaine et le domaine personnalisé, deviennent disponibles dans les paramètres de l'espace de travail
<Warning>
**Paramètre réservé à l'environnement :** `IS_MULTIWORKSPACE_ENABLED` ne peut être configuré que via le fichier `.env` et nécessite un redémarrage. Il ne peut pas être modifié via le panneau d'administration.
</Warning>
### Configuration DNS pour le mode multi-espaces de travail
Lorsque vous utilisez le mode multi-espaces de travail, configurez votre DNS avec un enregistrement générique (wildcard) pour permettre la création dynamique de sous-domaines :
```
*.your-domain.com -> your-server-ip
```
Cela active le routage automatique des sous-domaines pour les nouveaux espaces de travail, sans configuration DNS manuelle.
### Restreindre la création d'espaces de travail
En mode multi-espaces de travail, vous pouvez souhaiter limiter qui peut créer de nouveaux espaces de travail :
```bash
IS_WORKSPACE_CREATION_LIMITED_TO_SERVER_ADMINS=true
```
Lorsqu'il est activé, seuls les utilisateurs disposant de `canAccessFullAdminPanel` peuvent créer des espaces de travail supplémentaires. Les utilisateurs peuvent toujours créer leur premier espace de travail lors de l'inscription initiale.
## Intégration Gmail & Google Agenda
### Créer un projet Google Cloud
1. Allez dans [Google Cloud Console](https://console.cloud.google.com/)
2. Créez un nouveau projet ou sélectionnez-en un existant
3. Activez ces API :
* [API Gmail](https://console.cloud.google.com/apis/library/gmail.googleapis.com)
* [API Google Agenda](https://console.cloud.google.com/apis/library/calendar-json.googleapis.com)
* [API People](https://console.cloud.google.com/apis/library/people.googleapis.com)
### Configurez OAuth
1. Allez dans [Identifiants](https://console.cloud.google.com/apis/credentials)
2. Créez un identifiant client OAuth 2.0
3. Ajoutez ces URI de redirection :
* `https://{your-domain}/auth/google/redirect` (pour le SSO)
* `https://{your-domain}/auth/google-apis/get-access-token` (pour les intégrations)
### Configurez dans Twenty
1. Allez dans **Paramètres → Panneau d’administration → Variables de configuration**
2. Retrouvez la section **Google Auth**
3. Définissez ces variables :
* `MESSAGING_PROVIDER_GMAIL_ENABLED=true`
* `CALENDAR_PROVIDER_GOOGLE_ENABLED=true`
* `AUTH_GOOGLE_CLIENT_ID={client-id}`
* `AUTH_GOOGLE_CLIENT_SECRET={client-secret}`
* `AUTH_GOOGLE_CALLBACK_URL=https://{your-domain}/auth/google/redirect`
* `AUTH_GOOGLE_APIS_CALLBACK_URL=https://{your-domain}/auth/google-apis/get-access-token`
<Warning>
**Mode réservé à l'environnement :** Si vous définissez `IS_CONFIG_VARIABLES_IN_DB_ENABLED=false`, ajoutez ces variables à votre fichier `.env` à la place.
</Warning>
**Scopes requis** (configurés automatiquement) :
[Voir le code source pertinent](https://github.com/twentyhq/twenty/blob/main/packages/twenty-server/src/engine/core-modules/auth/utils/get-google-apis-oauth-scopes.ts#L4-L10)
* `https://www.googleapis.com/auth/calendar.events`
* `https://www.googleapis.com/auth/gmail.readonly`
* `https://www.googleapis.com/auth/profile.emails.read`
### Si votre application est en mode test
Si votre application est en mode test, vous devez ajouter des utilisateurs test à votre projet.
Sous [Écran de consentement OAuth](https://console.cloud.google.com/apis/credentials/consent), ajoutez vos utilisateurs test à la section "Utilisateurs test".
## Intégration Microsoft 365
<Warning>
Les utilisateurs doivent avoir une [licence Microsoft 365](https://admin.microsoft.com/Adminportal/Home) pour pouvoir utiliser les API Calendrier et Messagerie. Ils ne pourront pas synchroniser leur compte sur Twenty sans cela.
</Warning>
### Créez un projet dans Microsoft Azure
Vous devrez créer un projet dans [Microsoft Azure](https://portal.azure.com/#view/Microsoft_AAD_IAM/AppGalleryBladeV2) et obtenir les identifiants.
### Activez les API
Sur la console Microsoft Azure, activez les API suivantes dans "Autorisations" :
* Microsoft Graph : Mail.ReadWrite
* Microsoft Graph : Mail.Send
* Microsoft Graph : Calendars.Read
* Microsoft Graph : User.Read
* Microsoft Graph : openid
* Microsoft Graph : email
* Microsoft Graph : profile
* Microsoft Graph : offline_access
<Note>
"Mail.ReadWrite" et "Mail.Send" ne sont obligatoires que si vous souhaitez envoyer des e-mails en utilisant nos actions de flux de travail. Vous pouvez utiliser "Mail.Read" à la place si vous souhaitez uniquement recevoir des e-mails.
</Note>
<Note>
"Calendars.ReadWrite" est obligatoire si vous souhaitez créer des événements de calendrier en utilisant nos actions de flux de travail. Si vous souhaitez uniquement synchroniser des événements de calendrier, utilisez "Calendars.Read".
</Note>
### URI de redirection autorisées
Vous devez ajouter les URI de redirection suivantes à votre projet :
* `https://{your-domain}/auth/microsoft/redirect` si vous souhaitez utiliser Microsoft SSO
* `https://{your-domain}/auth/microsoft-apis/get-access-token`
### Configurez dans Twenty
1. Allez dans **Paramètres → Panneau d’administration → Variables de configuration**
2. Retrouvez la section **Microsoft Auth**
3. Définissez ces variables :
* `MESSAGING_PROVIDER_MICROSOFT_ENABLED=true`
* `CALENDAR_PROVIDER_MICROSOFT_ENABLED=true`
* `AUTH_MICROSOFT_ENABLED=true`
* `AUTH_MICROSOFT_CLIENT_ID={client-id}`
* `AUTH_MICROSOFT_CLIENT_SECRET={client-secret}`
* `AUTH_MICROSOFT_CALLBACK_URL=https://{your-domain}/auth/microsoft/redirect`
* `AUTH_MICROSOFT_APIS_CALLBACK_URL=https://{your-domain}/auth/microsoft-apis/get-access-token`
<Warning>
**Mode réservé à l'environnement :** Si vous définissez `IS_CONFIG_VARIABLES_IN_DB_ENABLED=false`, ajoutez ces variables à votre fichier `.env` à la place.
</Warning>
### Configurer les scopes
[Voir le code source pertinent](https://github.com/twentyhq/twenty/blob/main/packages/twenty-server/src/engine/core-modules/auth/utils/get-microsoft-apis-oauth-scopes.ts#L2-L9)
* 'openid'
* 'email'
* 'profil'
* 'offline_access'
* 'Mail.ReadWrite'
* 'Mail.Send'
* 'Calendars.Read'
### Si votre application est en mode test
Si votre application est en mode test, vous devez ajouter des utilisateurs test à votre projet.
Ajoutez vos utilisateurs test à la section "Utilisateurs et groupes".
## Tâches en arrière-plan pour Calendrier & Messagerie
Après avoir configuré les intégrations Gmail, Google Agenda ou Microsoft 365, vous devez démarrer les tâches en arrière-plan qui synchronisent les données.
Enregistrez les emplois récurrents suivants dans votre conteneur de travailleur :
```bash
# from your worker container
yarn command:prod cron:messaging:messages-import
yarn command:prod cron:messaging:message-list-fetch
yarn command:prod cron:calendar:calendar-event-list-fetch
yarn command:prod cron:calendar:calendar-events-import
yarn command:prod cron:messaging:ongoing-stale
yarn command:prod cron:calendar:ongoing-stale
yarn command:prod cron:workflow:automated-cron-trigger
```
## Configuration des Emails
1. Allez dans **Paramètres → Panneau d’administration → Variables de configuration**
2. Retrouvez la section **Email**
3. Configurez vos paramètres SMTP :
<Tabs>
<Tab title="Gmail">
Vous devrez créer un [mot de passe d'application](https://support.google.com/accounts/answer/185833).
* EMAIL_DRIVER=smtp
* EMAIL_SMTP_HOST=smtp.gmail.com
* EMAIL_SMTP_PORT=465
* EMAIL_SMTP_USER=gmail_email_address
* EMAIL_SMTP_PASSWORD='gmail_app_password'
</Tab>
<Tab title="Office365">
Gardez à l'esprit que si vous avez activé la validation en deux étapes (2FA), vous devrez mettre en place un [mot de passe d'application](https://support.microsoft.com/en-us/account-billing/manage-app-passwords-for-two-step-verification-d6dc8c6d-4bf7-4851-ad95-6d07799387e9).
* EMAIL_DRIVER=smtp
* EMAIL_SMTP_HOST=smtp.office365.com
* EMAIL_SMTP_PORT=587
* EMAIL_SMTP_USER=office365_email_address
* EMAIL_SMTP_PASSWORD='office365_password'
</Tab>
<Tab title="smtp4dev">
**smtp4dev** est un serveur SMTP factice pour le développement et les tests.
* Exécutez l'image smtp4dev : `docker run --rm -it -p 8090:80 -p 2525:25 rnwood/smtp4dev`
* Accédez à l'interface utilisateur smtp4dev ici : [http://localhost:8090](http://localhost:8090)
* Définissez les variables suivantes :
* EMAIL_DRIVER=smtp
* EMAIL_SMTP_HOST=localhost
* EMAIL_SMTP_PORT=2525
</Tab>
</Tabs>
<Warning>
**Mode réservé à l'environnement :** Si vous définissez `IS_CONFIG_VARIABLES_IN_DB_ENABLED=false`, ajoutez ces variables à votre fichier `.env` à la place.
</Warning>
## Stockage S3
<Warning>
Par défaut, Twenty stocke les fichiers téléversés sur le système de fichiers local. Pour les déploiements en production, utilisez S3 ou un service compatible S3 (MinIO, DigitalOcean Spaces, etc.). afin de garantir la persistance des fichiers lors des redémarrages des conteneurs et la montée en charge sur plusieurs instances de serveur.
</Warning>
Définissez `STORAGE_TYPE=S_3` et configurez les variables `STORAGE_S3_*` via le panneau d'administration ou `.env`. Voir la [référence config-variables.ts](https://github.com/twentyhq/twenty/blob/main/packages/twenty-server/src/engine/core-modules/twenty-config/config-variables.ts) pour la liste complète des variables S3.
Lorsque vous utilisez S3 avec des fonctionnalités dépendantes de CORS (par exemple les téléchargements de fichiers dans le navigateur), assurez-vous que votre compartiment S3 autorise l'origine de votre frontend Twenty dans sa configuration CORS.
## Fonctions logiques et interpréteur de code
Twenty prend en charge les fonctions logiques pour les flux de travail et l'interpréteur de code pour l'analyse de données par IA. Les deux exécutent du code fourni par l'utilisateur et nécessitent une configuration explicite pour la sécurité.
### Paramètres de sécurité par défaut
**En production (NODE_ENV=production):** Les fonctions logiques et l'interpréteur de code sont par défaut sur **Désactivé**. Vous devez les activer explicitement avec `LOGIC_FUNCTION_TYPE` et `CODE_INTERPRETER_TYPE` si vous avez besoin de ces fonctionnalités.
**En développement (NODE_ENV=development):** Les deux sont par défaut sur **LOCAL** pour plus de commodité lors de l'exécution en local.
<Warning>
**Avis de sécurité :** Le pilote local (`LOGIC_FUNCTION_TYPE=LOCAL` ou `CODE_INTERPRETER_TYPE=LOCAL`) exécute le code directement sur l'hôte dans un processus Node.js sans sandboxing. Il ne doit être utilisé que pour du code approuvé en développement. Pour les déploiements en production traitant du code non fiable, utilisez `LOGIC_FUNCTION_TYPE=LAMBDA` ou `CODE_INTERPRETER_TYPE=E2B` (avec exécution en bac à sable), ou laissez-les désactivés.
</Warning>
### Fonctions logiques - Pilotes disponibles
| Pilote | Variable d'environnement | Cas d'utilisation | Niveau de sécurité |
| --------- | ------------------------------ | ---------------------------------------------- | ------------------------------------ |
| Désactivé | `LOGIC_FUNCTION_TYPE=DISABLED` | Désactiver complètement les fonctions logiques | N/A |
| Local | `LOGIC_FUNCTION_TYPE=LOCAL` | Environnements de développement et approuvés | Faible (aucun sandboxing) |
| Lambda | `LOGIC_FUNCTION_TYPE=LAMBDA` | Production avec du code non approuvé | Élevé (isolement au niveau matériel) |
### Fonctions logiques - Configuration recommandée
**Pour le développement:**
```bash
LOGIC_FUNCTION_TYPE=LOCAL # default when NODE_ENV=development
```
**Pour la production (AWS):**
```bash
LOGIC_FUNCTION_TYPE=LAMBDA
LOGIC_FUNCTION_LAMBDA_REGION=us-east-1
LOGIC_FUNCTION_LAMBDA_ROLE=arn:aws:iam::123456789:role/your-lambda-role
LOGIC_FUNCTION_LAMBDA_ACCESS_KEY_ID=your-access-key
LOGIC_FUNCTION_LAMBDA_SECRET_ACCESS_KEY=your-secret-key
```
**Pour désactiver les fonctions logiques:**
```bash
LOGIC_FUNCTION_TYPE=DISABLED # default when NODE_ENV=production
```
### Interpréteur de code - Pilotes disponibles
| Pilote | Variable d'environnement | Cas d'utilisation | Niveau de sécurité |
| --------- | -------------------------------- | ---------------------------------------- | -------------------------- |
| Désactivé | `CODE_INTERPRETER_TYPE=DISABLED` | Désactiver l'exécution de code par l'IA | N/A |
| Local | `CODE_INTERPRETER_TYPE=LOCAL` | Développement uniquement | Faible (aucun sandboxing) |
| E2B | `CODE_INTERPRETER_TYPE=E_2_B` | Production avec exécution en bac à sable | Élevée (bac à sable isolé) |
<Note>
Lorsque vous utilisez `LOGIC_FUNCTION_TYPE=DISABLED` ou `CODE_INTERPRETER_TYPE=DISABLED`, toute tentative d'exécution renverra une erreur. Cela est utile si vous souhaitez exécuter Twenty sans ces capacités.
</Note>
## API et interface front-end sur des hôtes séparés
Uniquement pertinent si le back-end ne sert pas l’interface front-end. Les déploiements de même origine
n’ont besoin de rien ici.
Déclarez toutes les origines de navigateur qui communiquent avec l’API, séparées par des virgules. `SERVER_URL`
et `FRONTEND_URL` sont déjà approuvées. Le serveur consigne un avertissement lorsqu’un navigateur
l’appelle depuis une origine non déclarée.
```bash
AUTH_COOKIE_ALLOWED_ORIGINS=https://app.example.com
```
<Warning>
Le front-end envoie les identifiants à chaque requête, et les navigateurs rejettent une
réponse avec des identifiants provenant d’une origine non déclarée, de sorte que l’application ne parvient pas à se charger tant que vous n’avez pas défini ce paramètre.
</Warning>
Si les deux hôtes se trouvent sur des domaines enregistrables différents (et pas seulement sur des sous-domaines différents), définissez également `AUTH_COOKIE_SAME_SITE=none`, ce qui nécessite HTTPS.
Avec le mode multi-espaces de travail activé, ne répertoriez pas ici chaque sous-domaine d’espace de travail.
Au lieu de cela, acheminez les chemins d’API (`/graphql`, `/metadata`, `/rest`, `/auth/`,
`/client-config`, `/file`) vers le back-end sur chaque nom d’hôte d’espace de travail, afin que chaque
espace de travail reste de même origine — c’est ainsi que fonctionne Twenty Cloud.

View File

@@ -0,0 +1,254 @@
---
title: Résolution des problèmes
icon: wrench
---
## Résolution des problèmes
Si vous rencontrez un problème lors de la configuration de l'environnement pour le développement, la mise à niveau de votre instance ou l'auto-hébergement, voici quelques solutions pour les problèmes courants.
### Auto-hébergement
#### La première installation entraîne l'erreur `l'authentification du mot de passe a échoué pour l'utilisateur "postgres"`
🚨 **IMPORTANT : Cette solution est UNIQUEMENT pour les nouvelles installations** 🚨
Si vous avez une instance Twenty existante avec des données de production, **NE SUIVEZ PAS** ces étapes, car elles supprimeront définitivement votre base de données !
Lors de l'installation de Twenty pour la première fois, vous pouvez vouloir changer le mot de passe par défaut de la base de données.
Le mot de passe que vous définissez lors de la première installation est stocké de façon permanente dans le volume de la base de données. Si vous essayez ensuite de changer ce mot de passe dans votre configuration sans supprimer l'ancien volume, vous obtiendrez des erreurs d'authentification car la base de données utilise toujours le mot de passe original.
⚠️ AVERTISSEMENT : Les étapes suivantes SUPPRIMERONT DÉFINITIVEMENT toutes les données de la base de données ! ⚠️
N'avancez que s'il s'agit d'une nouvelle installation sans données importantes.
Pour mettre à jour le `PG_DATABASE_PASSWORD`, vous devez :
```sh
# Update the PG_DATABASE_PASSWORD in .env
docker compose down --volumes
docker compose up -d
```
#### Retours à la ligne CR trouvés [Windows]
Cela se produit en raison des caractères de fin de ligne Windows combinés à votre configuration Git. Essayez de lancer :
```
git config --global core.autocrlf false
```
Ensuite, supprimez le dépôt et clonez-le de nouveau.
#### Schéma de métadonnées manquant
Pendant l'installation de Twenty, vous devez approvisionner votre base de données postgres avec les bons schémas, extensions et utilisateurs.
Si vous réussissez cet approvisionnement, vous devriez avoir des schémas `default` et `metadata` dans votre base de données.
Si vous ne le faites pas, assurez-vous que vous n'avez pas plus d'une instance PostgreSQL fonctionnant sur votre ordinateur.
#### Impossible de trouver le module 'twenty-emails' ou les déclarations de type correspondantes.
Vous devez construire le paquet `vingt-emails` (`npx nx exécuter vingt-emails:build`) avant d'exécuter l'initialisation de la base de données.
#### Package twenty-x manquant
Assurez-vous d'exécuter yarn dans le répertoire racine, puis d'exécuter `npx nx server:dev twenty-server`. Si cela ne fonctionne toujours pas, essayez de construire le package manquant manuellement.
#### Lint à l'enregistrement ne fonctionne pas
Cela devrait fonctionner directement avec l'extension Oxc (`oxc.oxc-vscode`) installée. Si cela ne fonctionne pas, essayez d'ajouter ceci à vos paramètres de code VS (portée du conteneur de développement):
```
"editor.codeActionsOnSave": {
"source.fixAll.oxc": "explicit"
}
```
#### Lors de l'exécution de `npx nx start` ou `npx nx start twenty-front`, une erreur de mémoire est levée
Lancez uniquement les services dont vous avez besoin, au lieu de `npx nx start`. Par exemple, si vous travaillez sur le serveur, lancez seulement `npx nx worker twenty-server`
**Si cela ne fonctionne pas :**
Si vous avez essayé de lancer uniquement `npx nx run twenty-server:start` sur WSL et que cela échoue avec l'erreur de mémoire ci-dessous :
`ERREUR FATALE : Les compactages inefficaces près de la limite du tas Allocation échouée - tas JavaScript sans mémoire`
Une solution de contournement est d'exécuter la commande suivante dans votre terminal, ou de l'ajouter à votre profil `.bashrc` afin qu'il soit appliqué automatiquement:
`export NODE_OPTIONS="--max-old-space-size=8192"`
L'option --max-old-space-size=8192 fixe une limite supérieure de 8 Go pour le tas Node.js ; l'utilisation s'adapte à la demande de l'application.
Référence : https://stackoverflow.com/questions/56982005/where-do-i-set-node-options-max-old-space-size-2048
**Si cela ne fonctionne pas :**
Examinez quels processus prennent la plupart de la mémoire vive de votre machine. À Twenty, nous avons remarqué que certaines extensions VS Code prenaient beaucoup de RAM, donc nous les avons temporairement désactivées.
**Si cela ne fonctionne pas :**
Redémarrer votre machine aide à nettoyer les processus fantômes.
#### Pendant l'exécution de `npx nx start`, il y a des [0] et [1] étranges dans les journaux
C'est attendu car la commande `npx nx start` exécute plus de commandes en arrière-plan
#### Aucun e-mail n'est envoyé
La plupart du temps, c'est parce que le `worker` ne fonctionne pas en arrière-plan. Essayez de lancer
```
npx nx worker twenty-server
```
#### Impossible de connecter mon compte Microsoft 365 à 20
La plupart du temps, c'est parce que votre administrateur n'a pas activé la licence Microsoft 365 pour votre compte. Vérifiez [https://admin.microsoft.com/](https://admin.microsoft.com/Adminportal/Home).
Si vous avez un code d'erreur `AADSTS50020`, cela signifie probablement que vous utilisez un compte personnel Microsoft. Cela n'est pas encore pris en charge. Plus d'informations [ici](https://learn.microsoft.com/fr-fr/troubleshoot/entra/entra-id/app-integration/error-code-aadsts50020-user-account-identity-provider-does-not-exist)
#### En exécutant `yarn`, les avertissements apparaissent dans la console
Les avertissements informent du tirage de dépendances supplémentaires qui ne sont pas explicitement spécifiées dans `package.json`, donc tant qu'aucune erreur bloquante n'apparaît, tout devrait fonctionner comme prévu.
#### Lorsqu'un utilisateur accède à la page de connexion, une erreur à propos d'un utilisateur non autorisé essayant d'accéder à un espace de travail apparaît dans les journaux
Ceci est attendu car l'utilisateur n'est pas autorisé lors de sa déconnexion, car son identité n'a pas été vérifiée.
#### Comment vérifier si votre worker fonctionne ?
* Allez sur [webhook-test.com](https://webhook-test.com/) et copiez **Votre URL Webhook Unique**.
<div style={{textAlign: 'center'}}>
<img src="/images/docs/developers/self-hosting/webhook-test.jpg" alt="Test de Webhook" />
</div>
* Ouvrez votre application Twenty, naviguez jusqu'à `/settings`, et activez le bouton **Avancé** en bas à gauche de l'écran.
* Créez un nouveau webhook.
* Collez **Votre URL Webhook Unique** dans le champ **URL de l'Endpoint** de Twenty. Réglez les **Filtres** sur `Sociétés` et `Créé`.
<div style={{textAlign: 'center'}}>
<img src="/images/docs/developers/self-hosting/webhook-settings.jpg" alt="Paramètres du Webhook" />
</div>
* Accédez à `/objects/companies` et créez un nouvel enregistrement de société.
* Retournez sur [webhook-test.com](https://webhook-test.com/) et vérifiez si une nouvelle **requête POST** a été reçue.
<div style={{textAlign: 'center'}}>
<img src="/images/docs/developers/self-hosting/webhook-test-result.jpg" alt="Résultat du test du Webhook" />
</div>
* Si une **requête POST** est reçue, votre worker fonctionne avec succès. Sinon, vous devez résoudre les problèmes de votre worker.
#### Front-end échoue à démarrer et retourne l'erreur TS5042 : l'option 'project' ne peut pas être mélangée avec les fichiers source sur la ligne de commande
Commenter le plugin checker dans `packages/twenty-ui/vite-config.ts`, comme montré dans l'exemple ci-dessous:
```
plugins: [
react({ jsxImportSource: 'react' }),
tsconfigPaths(),
svgr(),
dts(dtsConfig),
// checker(checkersConfig),
wyw({
include: [
'**/OverflowingTextWithTooltip.tsx',
'**/Chip.tsx',
'**/Tag.tsx',
'**/Avatar.tsx',
'**/AvatarChip.tsx',
],
babelOptions: {
presets: ['@babel/preset-typescript', '@babel/preset-react'],
},
}),
],
```
#### Panneau d'administration inaccessible
Exécutez `UPDATE core."user" SET "canAccessFullAdminPanel" = TRUE WHERE email = 'you@yourdomain.com';` dans le conteneur de base de données pour obtenir l'accès au panneau d'administration.
#### Lors de l'exécution d'un workflow, l'exécution du workflow échoue avec "L'exécution des fonctions logiques est désactivée. Définissez LOGIC_FUNCTION_TYPE sur LOCAL ou LAMBDA pour les activer."
En production, les fonctions logiques sont désactivées par défaut. Définissez la variable d'environnement `LOGIC_FUNCTION_TYPE` sur `LOCAL` ou `LAMBDA` pour les activer. Cela peut être configuré via des variables d'environnement ou via les variables de base de données du panneau d'administration. Voir le [guide de configuration des fonctions logiques](/l/fr/developers/self-host/capabilities/setup#logic-functions-available-drivers) pour plus de détails.
#### Quand je tape un message dans le chat IA, il ne répond pas immédiatement et je dois actualiser la page pour voir la réponse
Cela signifie que votre proxy inversé manque la configuration des réponses API basées sur le stream. Voici un exemple de configuration Nginx :
```
location ~* ^/api/.*stream|\/graphql\/stream {
proxy_pass http://twenty_backend;
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_buffering off;
proxy_request_buffering off;
proxy_cache off;
gzip off;
#chunked_transfer_encoding off;
add_header X-Accel-Buffering no always;
}
```
### Composer Docker en 1 clic
#### Impossible de se connecter
Si vous ne pouvez pas vous connecter après la configuration :
1. Exécutez les commandes suivantes :
```bash
docker exec -it twenty-server-1 yarn
docker exec -it twenty-server-1 npx nx database:reset --configuration=no-seed
```
2. Redémarrez les conteneurs Docker :
```bash
docker compose down
docker compose up -d
```
Notez que la commande `database:reset` effacera complètement votre base de données et la recréera de zéro.
#### Problèmes de connexion derrière un proxy inverse
Si vous exécutez Twenty derrière un proxy inverse et rencontrez des problèmes de connexion :
1. **Vérifiez SERVER_URL :**
Assurez-vous que `SERVER_URL` dans votre fichier `.env` correspond à l'URL d'accès externe, incluant `https` si SSL est activé.
2. **Vérifiez les paramètres du proxy inverse :**
* Confirmez que votre proxy inverse transfère correctement les requêtes au serveur Twenty.
* Assurez-vous que les en-têtes comme `X-Forwarded-For` et `X-Forwarded-Proto` sont correctement configurés.
3. **Redémarrez les services :**
Après avoir apporté des modifications, redémarrez à la fois le proxy inverse et les conteneurs Twenty.
#### Erreur lors du téléchargement d'une image - permission refusée
Changer la propriété du dossier de données sur l'hôte de root à un autre utilisateur et groupe résout ce problème.
#### Erreur « File Not Found » lors du test de la fonction Logic dans le workflow
Exécutez la commande `yarn command:prod application:rebuild-default-deps` dans votre conteneur twenty-server pour résoudre le problème de dépendances manquantes.
## Obtenir de l'aide
Si vous rencontrez des problèmes non couverts par ce guide :
* Vérifiez les journaux :
Consultez les journaux de conteneur pour les messages d'erreur :
```bash
docker compose logs
```
* Support communautaire :
Contactez la [communauté Twenty](https://github.com/twentyhq/twenty/issues) ou les [canaux de support](https://discord.gg/cx5n4Jzs57) pour obtenir de l'aide.

View File

@@ -0,0 +1,106 @@
---
title: Guide de mise à niveau
icon: arrow-up-right-dots
---
## Consignes générales
**Sauvegardez toujours votre base de données avant de commencer le processus de mise à niveau** en exécutant :
```bash
docker exec -it {db_container_name_or_id} pg_dumpall -U {postgres_user} > databases_backup.sql
```
Pour restaurer à partir d'une sauvegarde :
```bash
cat databases_backup.sql | docker exec -i {db_container_name_or_id} psql -U {postgres_user}
```
Si vous utilisez Docker Compose, suivez ces étapes :
1. Arrêtez Twenty : `docker compose down`
2. Modifiez la valeur de `TAG` dans le fichier `.env` situé à côté de votre `docker-compose.yml`
3. Démarrez Twenty : `docker compose up -d`
Le serveur exécute automatiquement au démarrage toutes les migrations de mise à niveau requises. Aucune commande manuelle n'est nécessaire.
## Mise à niveau vers v2.34+ — PostgreSQL 15 minimum
Twenty v2.34 nécessite PostgreSQL 15 ou une version ultérieure. La configuration officielle de Docker Compose utilise PostgreSQL 16. Si votre instance se connecte à une base de données gérée en externe, mettez-la à niveau avant de démarrer le serveur v2.34.
## Mises à niveau entre versions (v1.23+)
À partir de **v1.23**, Twenty prend en charge les mises à niveau entre versions. Vous pouvez passer directement de n'importe quelle version prise en charge à la dernière version sans devoir passer par chaque version intermédiaire.
Par exemple, la mise à niveau de la v1.23 directement vers la v2.0 est entièrement prise en charge.
## Mise à niveau vers la v2.5+ — enveloppe de chiffrement au repos
À partir de la **v2.5**, Twenty stocke les secrets au repos (jetons OAuth, variables d’application, clés privées de signature, valeurs de configuration sensibles, secrets TOTP) à l’intérieur d’une enveloppe versionnée `enc:v2:` chiffrée avec `ENCRYPTION_KEY` (ou `APP_SECRET` si `ENCRYPTION_KEY` n’est pas défini).
Le premier démarrage sur la v2.5 exécute des commandes de mise à niveau lentes qui **rétro-remplissent** les lignes existantes dans la nouvelle enveloppe. Elles sont idempotentes — si vous interrompez puis redémarrez le serveur, le processus reprend là où il s’était arrêté — mais elles peuvent prendre du temps sur les grandes bases de données. Vous pouvez surveiller la progression avec `upgrade:status`.
Vous devez définir une `ENCRYPTION_KEY` dédiée **avant** la mise à niveau vers la v2.5 afin que le rétro-remplissage écrive les lignes sous cette clé dès le départ. Changer de clé après le rétro-remplissage nécessite une [rotation](/l/fr/developers/self-host/capabilities/key-rotation).
## Rotation des secrets et des clés de signature
Pour les tâches opérationnelles quotidiennes comme la rotation de `ENCRYPTION_KEY`, la rotation de la clé de signature JWT ou la révocation d’une clé de signature divulguée, consultez le [Guide de rotation des clés](/l/fr/developers/self-host/capabilities/key-rotation) dédié.
## Vérification de l'état de la mise à niveau
La commande `upgrade:status` vous permet d'inspecter l'état actuel de votre instance et des migrations d'espaces de travail. Elle est utile pour diagnostiquer les problèmes de mise à niveau ou lors de la création d'une demande d'assistance.
Exécutez-la depuis le conteneur du serveur :
```bash
docker exec -it {server_container_name_or_id} yarn command:prod upgrade:status
```
Exemple de résultat:
```sh
APP_VERSION: v1.23.0
Instance
Inferred version: 1.23.0
Latest command: 1.23.0_DropWorkspaceVersionColumnFastInstanceCommand_1785000000000
Status: Up to date
Executed by: v1.23.0
At: 2026-04-16T11:43:58.823Z
Workspace
Apple (20202020-1c25-4d02-bf25-6aeccf7ea419)
Inferred version: 1.23.0
Latest command: 1.23.0_UpdateGlobalObjectContextCommandMenuItemsCommand_1780000005000
Status: Up to date
Executed by: v1.23.0
At: 2026-04-16T11:44:09.361Z
Summary
Instance: Up to date
Workspaces: 1 up to date, 0 behind, 0 failed (1 total)
```
### Options
| Option | Description |
| ------------------------- | --------------------------------------------------------------------------------- |
| `-w, --workspace-id <id>` | Limiter à un espace de travail spécifique. Peut être passé plusieurs fois. |
| `-f, --failed-only` | Masquez les espaces de travail à jour, n'affichez que ceux en retard et en échec. |
## Résolution des problèmes
Si la mise à niveau échoue sur certains espaces de travail, le serveur ne dépassera pas l'étape en échec. Le redémarrage du serveur (`docker compose up -d`) relancera la mise à niveau à partir de l'endroit où elle s'est arrêtée.
Pour identifier rapidement les problèmes, exécutez :
```bash
docker exec -it {server_container_name_or_id} yarn command:prod upgrade:status --failed-only
```
Cela affiche uniquement les espaces de travail en retard ou en échec, ainsi que le message d'erreur pour chaque échec.
## Avant la v1.23
Si votre instance est antérieure à la v1.23, vous devez effectuer une mise à niveau progressive à travers chaque version majeure marquée (de v1.6 à v1.7, puis de v1.7 à v1.8, et ainsi de suite) jusqu'à atteindre la v1.23. À partir de là, vous pouvez passer directement à la dernière version.

View File

@@ -0,0 +1,26 @@
---
title: Auto-hébergement
description: Déployez et gérez Twenty sur votre propre infrastructure.
---
<Frame>
<img src="/images/user-guide/what-is-twenty/20.png" alt="IA" />
</Frame>
## Vue d'ensemble
Twenty peut être auto-hébergé sur votre propre infrastructure, vous offrant un contrôle total sur vos données et votre déploiement.
## Pourquoi l'auto-hébergement ?
* **Propriété des données** : Conservez toutes les données CRM sur vos propres serveurs
* **Conformité** : Répondez aux exigences réglementaires en matière de résidence des données
* **Personnalisation** : Accès complet pour modifier et étendre la plateforme
## Prise en main
<CardGroup cols={2}>
<Card title="Docker Compose" icon="docker" href="/l/fr/developers/self-host/capabilities/docker-compose">
Configuration rapide avec Docker
</Card>
</CardGroup>