@intlayer/docs 9.0.0-canary.10 → 9.0.0-canary.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/generated/docs.entry.cjs +20 -0
- package/dist/cjs/generated/docs.entry.cjs.map +1 -1
- package/dist/esm/generated/docs.entry.mjs +20 -0
- package/dist/esm/generated/docs.entry.mjs.map +1 -1
- package/dist/types/generated/docs.entry.d.ts +1 -0
- package/dist/types/generated/docs.entry.d.ts.map +1 -1
- package/docs/ar/intlayer_CMS.md +16 -1
- package/docs/ar/releases/v9.md +58 -1
- package/docs/ar/self_hosting.md +349 -0
- package/docs/bn/intlayer_CMS.md +570 -0
- package/docs/bn/releases/v9.md +358 -0
- package/docs/cs/releases/v9.md +358 -0
- package/docs/de/intlayer_CMS.md +117 -1
- package/docs/de/releases/v9.md +61 -1
- package/docs/de/self_hosting.md +349 -0
- package/docs/en/intlayer_CMS.md +171 -1
- package/docs/en/releases/v9.md +45 -2
- package/docs/en/self_hosting.md +349 -0
- package/docs/en-GB/intlayer_CMS.md +16 -1
- package/docs/en-GB/releases/v9.md +47 -2
- package/docs/en-GB/self_hosting.md +349 -0
- package/docs/es/intlayer_CMS.md +117 -1
- package/docs/es/releases/v9.md +61 -1
- package/docs/es/self_hosting.md +349 -0
- package/docs/fr/intlayer_CMS.md +117 -1
- package/docs/fr/releases/v9.md +61 -1
- package/docs/fr/self_hosting.md +349 -0
- package/docs/hi/intlayer_CMS.md +16 -1
- package/docs/hi/releases/v9.md +59 -1
- package/docs/hi/self_hosting.md +349 -0
- package/docs/id/releases/v9.md +31 -1
- package/docs/id/self_hosting.md +349 -0
- package/docs/it/intlayer_CMS.md +117 -1
- package/docs/it/releases/v9.md +61 -1
- package/docs/it/self_hosting.md +349 -0
- package/docs/ja/intlayer_CMS.md +191 -10
- package/docs/ja/releases/v9.md +31 -1
- package/docs/ja/self_hosting.md +349 -0
- package/docs/ko/intlayer_CMS.md +189 -6
- package/docs/ko/releases/v9.md +30 -1
- package/docs/ko/self_hosting.md +349 -0
- package/docs/nl/releases/v9.md +358 -0
- package/docs/pl/intlayer_CMS.md +16 -1
- package/docs/pl/releases/v9.md +58 -1
- package/docs/pl/self_hosting.md +349 -0
- package/docs/pt/intlayer_CMS.md +117 -1
- package/docs/pt/releases/v9.md +61 -1
- package/docs/pt/self_hosting.md +349 -0
- package/docs/ru/intlayer_CMS.md +196 -15
- package/docs/ru/releases/v9.md +59 -1
- package/docs/ru/self_hosting.md +349 -0
- package/docs/tr/intlayer_CMS.md +16 -1
- package/docs/tr/releases/v9.md +46 -1
- package/docs/tr/self_hosting.md +349 -0
- package/docs/uk/intlayer_CMS.md +16 -1
- package/docs/uk/releases/v9.md +58 -1
- package/docs/uk/self_hosting.md +349 -0
- package/docs/vi/releases/v9.md +31 -1
- package/docs/vi/self_hosting.md +349 -0
- package/docs/zh/releases/v9.md +31 -1
- package/docs/zh/self_hosting.md +349 -0
- package/package.json +6 -6
- package/src/generated/docs.entry.ts +20 -0
|
@@ -0,0 +1,349 @@
|
|
|
1
|
+
---
|
|
2
|
+
createdAt: 2026-06-30
|
|
3
|
+
updatedAt: 2026-06-30
|
|
4
|
+
title: Auto-hébergement d'Intlayer
|
|
5
|
+
description: Exécutez une instance complète d'Intlayer sur votre propre infrastructure avec une seule commande. Aucun compte Intlayer Cloud n'est requis.
|
|
6
|
+
keywords:
|
|
7
|
+
- Auto-hébergement
|
|
8
|
+
- Docker
|
|
9
|
+
- Docker Compose
|
|
10
|
+
- Intlayer
|
|
11
|
+
- CMS
|
|
12
|
+
- Installation
|
|
13
|
+
- Infrastructure
|
|
14
|
+
slugs:
|
|
15
|
+
- doc
|
|
16
|
+
- self-hosting
|
|
17
|
+
author: aymericzip
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
# Auto-hébergement d'Intlayer
|
|
21
|
+
|
|
22
|
+
Intlayer peut fonctionner entièrement sur votre propre infrastructure — aucun compte Intlayer Cloud n'est requis. Une seule commande démarre une stack prête pour la production :
|
|
23
|
+
|
|
24
|
+
```sh
|
|
25
|
+
curl -fsSL https://intlayer.org/install.sh | sh
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
L'installateur télécharge un fichier `docker-compose.yml` et un fichier `.env`, génère automatiquement les secrets requis et démarre tous les conteneurs avec `docker compose up -d`.
|
|
29
|
+
|
|
30
|
+
## Table des matières
|
|
31
|
+
|
|
32
|
+
<TOC/>
|
|
33
|
+
|
|
34
|
+
---
|
|
35
|
+
|
|
36
|
+
## Architecture
|
|
37
|
+
|
|
38
|
+
```
|
|
39
|
+
┌─────────────────────────────┐
|
|
40
|
+
browser ──────▶ │ app (TanStack Start) :3000│ ──┐
|
|
41
|
+
└─────────────────────────────┘ │ VITE_BACKEND_URL
|
|
42
|
+
┌─────────────────────────────┐ │
|
|
43
|
+
│ backend (Fastify/Bun) :3100│ ◀─┘
|
|
44
|
+
└──────────────┬──────────────┘
|
|
45
|
+
┌──────────┬─────────┼──────────┬───────────┐
|
|
46
|
+
▼ ▼ ▼ ▼ ▼
|
|
47
|
+
mongo:27017 redis:6379 minio:9000 mailpit:1025 Chromium
|
|
48
|
+
(1-node RS) (S3 API) (SMTP) (in-image)
|
|
49
|
+
minio:9001 mailpit:8025
|
|
50
|
+
(console) (web UI)
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
Chromium (utilisé pour la génération de captures d'écran Puppeteer) est intégré à l'image du backend — aucun conteneur séparé n'est nécessaire.
|
|
54
|
+
|
|
55
|
+
---
|
|
56
|
+
|
|
57
|
+
## Prérequis
|
|
58
|
+
|
|
59
|
+
- **Docker** ≥ 24 et **Docker Compose** ≥ v2. Si l'un des deux est manquant, l'installateur affiche le lien d'installation et quitte.
|
|
60
|
+
- Ports `3000`, `3100`, `8025`, `9000` et `9001` disponibles sur l'hôte.
|
|
61
|
+
- Un hôte Linux ou macOS (ou WSL2 sur Windows).
|
|
62
|
+
|
|
63
|
+
---
|
|
64
|
+
|
|
65
|
+
## Démarrage rapide
|
|
66
|
+
|
|
67
|
+
```sh
|
|
68
|
+
curl -fsSL https://intlayer.org/install.sh | sh
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
Ce que fait l'installateur :
|
|
72
|
+
|
|
73
|
+
1. Vérifie que `docker` et `docker compose` sont présents.
|
|
74
|
+
2. Télécharge `docker-compose.yml` et `.env.example` dans `./intlayer/`.
|
|
75
|
+
3. S'il n'existe pas de fichier `.env`, copie l'exemple et génère des secrets aléatoires pour `BETTER_AUTH_SECRET`, `S3_ACCESS_KEY_ID` et `S3_SECRET_ACCESS_KEY` via `openssl rand`.
|
|
76
|
+
4. Exécute `docker compose pull` + `docker compose up -d`.
|
|
77
|
+
5. Affiche les URL : tableau de bord `:3000`, API `:3100`, UI e-mail `:8025`, console MinIO `:9001`.
|
|
78
|
+
|
|
79
|
+
Une fois la stack démarrée, ouvrez **http://localhost:3000** et créez votre premier compte.
|
|
80
|
+
|
|
81
|
+
---
|
|
82
|
+
|
|
83
|
+
## Services
|
|
84
|
+
|
|
85
|
+
| Service | Image | Port(s) hôte | Objectif |
|
|
86
|
+
| ----------- | ----------------------------------------------- | ------------------------------ | ------------------------------------------------------------------------ |
|
|
87
|
+
| **app** | construit à partir de `apps/app/Dockerfile` | `3000` | Tableau de bord TanStack Start (UI du CMS) |
|
|
88
|
+
| **backend** | construit à partir de `apps/backend/Dockerfile` | `3100` | API REST Fastify (endpoint `/health`) |
|
|
89
|
+
| **mongo** | `mongo:7` | interne | Réplica set à nœud unique (`rs0`) |
|
|
90
|
+
| **redis** | `redis:7-alpine` | interne | Files d'attente de jobs (BullMQ) et mise en cache (ioredis) |
|
|
91
|
+
| **minio** | `minio/minio` | `9000` (S3), `9001` (console) | Stockage d'objets compatible S3 pour les avatars et les captures d'écran |
|
|
92
|
+
| **mailpit** | `axllent/mailpit` | `1025` (SMTP), `8025` (web UI) | Réceptacle local d'e-mails transactionnels |
|
|
93
|
+
|
|
94
|
+
Les ports internes (mongo, redis) ne sont pas exposés à l'hôte par défaut.
|
|
95
|
+
|
|
96
|
+
> Le port `9000` de MinIO doit être accessible par le navigateur car les assets téléchargés (avatars, captures d'écran) sont chargés directement depuis `S3_PUBLIC_URL=http://localhost:9000/intlayer`.
|
|
97
|
+
|
|
98
|
+
---
|
|
99
|
+
|
|
100
|
+
## Variables d'environnement
|
|
101
|
+
|
|
102
|
+
L'installateur génère un fichier `.env` prêt à l'emploi. Le tableau ci-dessous décrit chaque variable.
|
|
103
|
+
|
|
104
|
+
### Requis (auto-généré ou demandé)
|
|
105
|
+
|
|
106
|
+
| Variable | Exemple | Description |
|
|
107
|
+
| ---------------------- | ----------------------------------------------- | ------------------------------------------------------------------ |
|
|
108
|
+
| `NODE_ENV` | `production` | Environnement d'exécution |
|
|
109
|
+
| `PORT` | `3100` | Port d'écoute du backend |
|
|
110
|
+
| `BACKEND_URL` | `http://localhost:3100` | URL publique de l'API backend |
|
|
111
|
+
| `APP_URL` | `http://localhost:3000` | URL publique du tableau de bord |
|
|
112
|
+
| `DOMAIN` | `localhost` | Domaine du cookie |
|
|
113
|
+
| `MONGODB_URI` | `mongodb://mongo:27017/intlayer?replicaSet=rs0` | URI de connexion complète à MongoDB |
|
|
114
|
+
| `REDIS_URL` | `redis://redis:6379` | URL de connexion Redis |
|
|
115
|
+
| `BETTER_AUTH_SECRET` | _(généré)_ | Secret de 32 octets pour la signature de session |
|
|
116
|
+
| `MAIL_PROVIDER` | `smtp` | Transport de courrier : `smtp` ou `resend` |
|
|
117
|
+
| `MAIL_SMTP_HOST` | `mailpit` | Nom d'hôte SMTP (nom du conteneur Mailpit) |
|
|
118
|
+
| `MAIL_SMTP_PORT` | `1025` | Port SMTP |
|
|
119
|
+
| `MAIL_FROM` | `Intlayer <no-reply@localhost>` | Adresse de l'expéditeur |
|
|
120
|
+
| `S3_ENDPOINT` | `http://minio:9000` | Endpoint compatible S3 |
|
|
121
|
+
| `S3_PUBLIC_URL` | `http://localhost:9000/intlayer` | URL publique pour le chargement des assets par le navigateur |
|
|
122
|
+
| `S3_BUCKET_NAME` | `intlayer` | Nom du bucket |
|
|
123
|
+
| `S3_ACCESS_KEY_ID` | _(généré)_ | Clé d'accès MinIO |
|
|
124
|
+
| `S3_SECRET_ACCESS_KEY` | _(généré)_ | Clé secrète MinIO |
|
|
125
|
+
| `VITE_BACKEND_URL` | `http://localhost:3100` | URL du backend intégrée au tableau de bord lors de la construction |
|
|
126
|
+
| `VITE_DOMAIN` | `localhost` | Domaine intégré au tableau de bord lors de la construction |
|
|
127
|
+
|
|
128
|
+
### Facultatif (les fonctionnalités se dégradent gracieusement en leur absence)
|
|
129
|
+
|
|
130
|
+
| Variable | Fonctionnalité |
|
|
131
|
+
| -------------------------------------------------------- | --------------------------------------------------------------- |
|
|
132
|
+
| `OPENAI_API_KEY` | Traduction assistée par IA et audit de contenu |
|
|
133
|
+
| `STRIPE_SECRET_KEY`, `STRIPE_WEBHOOK_SECRET`, `STRIPE_*` | Gestion de la facturation et des abonnements |
|
|
134
|
+
| `RESEND_API_KEY` | E-mail transactionnel via Resend (outrepasse Mailpit si défini) |
|
|
135
|
+
| `GITHUB_CLIENT_ID`, `GITHUB_CLIENT_SECRET` | Connexion OAuth GitHub |
|
|
136
|
+
| `GOOGLE_CLIENT_ID`, `GOOGLE_CLIENT_SECRET` | Connexion OAuth Google |
|
|
137
|
+
| `GITLAB_CLIENT_ID`, `GITLAB_CLIENT_SECRET` | Connexion OAuth GitLab |
|
|
138
|
+
| `MICROSOFT_CLIENT_ID`, `MICROSOFT_CLIENT_SECRET` | Connexion OAuth Microsoft |
|
|
139
|
+
| `LINKEDIN_CLIENT_ID`, `LINKEDIN_CLIENT_SECRET` | Connexion OAuth LinkedIn |
|
|
140
|
+
| `ATLASSIAN_CLIENT_ID`, `ATLASSIAN_CLIENT_SECRET` | Connexion OAuth Atlassian |
|
|
141
|
+
|
|
142
|
+
---
|
|
143
|
+
|
|
144
|
+
## Connexion de votre projet Intlayer
|
|
145
|
+
|
|
146
|
+
Une fois la stack en cours d'exécution, pointez votre projet vers le backend et le tableau de bord auto-hébergés au lieu de `intlayer.org`.
|
|
147
|
+
|
|
148
|
+
### Configuration du projet
|
|
149
|
+
|
|
150
|
+
```typescript fileName="intlayer.config.ts" codeFormat={["typescript", "esm", "commonjs"]}
|
|
151
|
+
import type { IntlayerConfig } from "intlayer";
|
|
152
|
+
|
|
153
|
+
const config: IntlayerConfig = {
|
|
154
|
+
editor: {
|
|
155
|
+
clientId: process.env.INTLAYER_CLIENT_ID,
|
|
156
|
+
clientSecret: process.env.INTLAYER_CLIENT_SECRET,
|
|
157
|
+
|
|
158
|
+
/**
|
|
159
|
+
* URL du tableau de bord CMS auto-hébergé.
|
|
160
|
+
* Par défaut : https://app.intlayer.org
|
|
161
|
+
*/
|
|
162
|
+
cmsURL: process.env.INTLAYER_CMS_URL, // ex. http://localhost:3000
|
|
163
|
+
|
|
164
|
+
/**
|
|
165
|
+
* URL de l'API backend auto-hébergée.
|
|
166
|
+
* Par défaut : https://back.intlayer.org
|
|
167
|
+
*/
|
|
168
|
+
backendURL: process.env.INTLAYER_BACKEND_URL, // ex. http://localhost:3100
|
|
169
|
+
},
|
|
170
|
+
};
|
|
171
|
+
|
|
172
|
+
export default config;
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
Définissez les variables d'environnement dans le fichier `.env` de votre projet :
|
|
176
|
+
|
|
177
|
+
```sh
|
|
178
|
+
INTLAYER_CMS_URL=http://localhost:3000
|
|
179
|
+
INTLAYER_BACKEND_URL=http://localhost:3100
|
|
180
|
+
INTLAYER_CLIENT_ID=<your-client-id>
|
|
181
|
+
INTLAYER_CLIENT_SECRET=<your-client-secret>
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
Créez des identifiants d'accès dans votre tableau de bord auto-hébergé sous **Projets → Clés d'accès** à l'adresse `http://localhost:3000/projects`.
|
|
185
|
+
|
|
186
|
+
### SDK `@intlayer/api`
|
|
187
|
+
|
|
188
|
+
Lorsque vous utilisez le SDK `@intlayer/api` de manière programmatique, passez `backendURL` explicitement :
|
|
189
|
+
|
|
190
|
+
```typescript fileName="cms.ts" codeFormat="typescript"
|
|
191
|
+
import { createIntlayerCMS } from "@intlayer/api";
|
|
192
|
+
import { dictionaryEndpoint } from "@intlayer/api/dictionary";
|
|
193
|
+
|
|
194
|
+
const cms = createIntlayerCMS({
|
|
195
|
+
editor: {
|
|
196
|
+
clientId: process.env.INTLAYER_CLIENT_ID,
|
|
197
|
+
clientSecret: process.env.INTLAYER_CLIENT_SECRET,
|
|
198
|
+
backendURL: process.env.INTLAYER_BACKEND_URL, // http://localhost:3100
|
|
199
|
+
},
|
|
200
|
+
});
|
|
201
|
+
|
|
202
|
+
const { data: dictionaries } = await dictionaryEndpoint(cms).getDictionaries();
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
---
|
|
206
|
+
|
|
207
|
+
## Mise à niveau
|
|
208
|
+
|
|
209
|
+
Exécuter à nouveau l'installateur sur un déploiement existant effectue une mise à niveau progressive :
|
|
210
|
+
|
|
211
|
+
```sh
|
|
212
|
+
curl -fsSL https://intlayer.org/install.sh | sh
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
Ceci télécharge les dernières images et redémarre les conteneurs avec `docker compose pull && docker compose up -d`. Les volumes existants (`mongo-data`, `redis-data`, `minio-data`) sont préservés — aucune perte de données.
|
|
216
|
+
|
|
217
|
+
Pour effectuer une mise à niveau manuellement depuis le répertoire `./intlayer/` :
|
|
218
|
+
|
|
219
|
+
```sh
|
|
220
|
+
docker compose pull
|
|
221
|
+
docker compose up -d
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
---
|
|
225
|
+
|
|
226
|
+
## Sauvegarde et restauration
|
|
227
|
+
|
|
228
|
+
Toutes les données persistantes résident dans trois volumes Docker nommés.
|
|
229
|
+
|
|
230
|
+
### Sauvegarde
|
|
231
|
+
|
|
232
|
+
```sh
|
|
233
|
+
docker run --rm \
|
|
234
|
+
-v intlayer_mongo-data:/data \
|
|
235
|
+
-v "$(pwd)":/backup \
|
|
236
|
+
busybox tar czf /backup/mongo-data.tar.gz /data
|
|
237
|
+
|
|
238
|
+
docker run --rm \
|
|
239
|
+
-v intlayer_redis-data:/data \
|
|
240
|
+
-v "$(pwd)":/backup \
|
|
241
|
+
busybox tar czf /backup/redis-data.tar.gz /data
|
|
242
|
+
|
|
243
|
+
docker run --rm \
|
|
244
|
+
-v intlayer_minio-data:/data \
|
|
245
|
+
-v "$(pwd)":/backup \
|
|
246
|
+
busybox tar czf /backup/minio-data.tar.gz /data
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
### Restauration
|
|
250
|
+
|
|
251
|
+
```sh
|
|
252
|
+
docker run --rm \
|
|
253
|
+
-v intlayer_mongo-data:/data \
|
|
254
|
+
-v "$(pwd)":/backup \
|
|
255
|
+
busybox tar xzf /backup/mongo-data.tar.gz -C /
|
|
256
|
+
|
|
257
|
+
# Répétez pour redis-data et minio-data
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
---
|
|
261
|
+
|
|
262
|
+
## Utilisation d'un proxy inverse (Nginx / Caddy)
|
|
263
|
+
|
|
264
|
+
Pour les déploiements de production, placez un proxy inverse devant les conteneurs de l'application et du backend au lieu de les exposer directement.
|
|
265
|
+
|
|
266
|
+
### Exemple Nginx
|
|
267
|
+
|
|
268
|
+
```nginx
|
|
269
|
+
server {
|
|
270
|
+
listen 80;
|
|
271
|
+
server_name cms.example.com;
|
|
272
|
+
|
|
273
|
+
location / {
|
|
274
|
+
proxy_pass http://localhost:3000;
|
|
275
|
+
proxy_set_header Host $host;
|
|
276
|
+
proxy_set_header X-Real-IP $remote_addr;
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
server {
|
|
281
|
+
listen 80;
|
|
282
|
+
server_name api.example.com;
|
|
283
|
+
|
|
284
|
+
location / {
|
|
285
|
+
proxy_pass http://localhost:3100;
|
|
286
|
+
proxy_set_header Host $host;
|
|
287
|
+
proxy_set_header X-Real-IP $remote_addr;
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
```
|
|
291
|
+
|
|
292
|
+
Mettez à jour les variables `.env` suivantes pour qu'elles correspondent à vos domaines publics :
|
|
293
|
+
|
|
294
|
+
```sh
|
|
295
|
+
BACKEND_URL=https://api.example.com
|
|
296
|
+
APP_URL=https://cms.example.com
|
|
297
|
+
DOMAIN=example.com
|
|
298
|
+
VITE_BACKEND_URL=https://api.example.com
|
|
299
|
+
VITE_DOMAIN=example.com
|
|
300
|
+
```
|
|
301
|
+
|
|
302
|
+
> Les variables `VITE_*` sont intégrées à l'image du tableau de bord lors de la construction. Si vous les modifiez après la construction de l'image, vous devez reconstruire l'image `app` (`docker compose build app`) ou utiliser l'injection de configuration au moment de l'exécution.
|
|
303
|
+
|
|
304
|
+
---
|
|
305
|
+
|
|
306
|
+
## Dépannage
|
|
307
|
+
|
|
308
|
+
### Le backend redémarre en boucle au premier démarrage
|
|
309
|
+
|
|
310
|
+
MongoDB et Redis doivent être sains avant le démarrage du backend. Le fichier compose utilise `depends_on` avec `condition: service_healthy`. Si vous voyez des redémarrages répétés du backend, vérifiez que les contrôles de santé de `mongo` et `redis` sont réussis :
|
|
311
|
+
|
|
312
|
+
```sh
|
|
313
|
+
docker compose ps
|
|
314
|
+
docker compose logs mongo
|
|
315
|
+
docker compose logs redis
|
|
316
|
+
```
|
|
317
|
+
|
|
318
|
+
### Le tableau de bord ne peut pas atteindre l'API
|
|
319
|
+
|
|
320
|
+
Vérifiez que `VITE_BACKEND_URL` correspond à l'URL où le backend est accessible depuis le **navigateur** (pas le réseau Docker). Si vous avez modifié le port du backend ou ajouté un proxy inverse, reconstruisez l'image du tableau de bord :
|
|
321
|
+
|
|
322
|
+
```sh
|
|
323
|
+
docker compose build app
|
|
324
|
+
docker compose up -d app
|
|
325
|
+
```
|
|
326
|
+
|
|
327
|
+
### Les e-mails ne sont pas envoyés
|
|
328
|
+
|
|
329
|
+
Par défaut, tous les e-mails sortants sont capturés par Mailpit. Ouvrez `http://localhost:8025` pour voir les messages envoyés. Pour envoyer de vrais e-mails, définissez `MAIL_PROVIDER=resend` et `RESEND_API_KEY=<your-key>` dans `.env`, puis redémarrez le backend :
|
|
330
|
+
|
|
331
|
+
```sh
|
|
332
|
+
docker compose restart backend
|
|
333
|
+
```
|
|
334
|
+
|
|
335
|
+
### Bucket MinIO manquant
|
|
336
|
+
|
|
337
|
+
Si le service ponctuel `minio-init` n'a pas fonctionné (ou a fonctionné avant que MinIO ne soit prêt), créez le bucket manuellement :
|
|
338
|
+
|
|
339
|
+
```sh
|
|
340
|
+
docker compose run --rm minio-init
|
|
341
|
+
```
|
|
342
|
+
|
|
343
|
+
---
|
|
344
|
+
|
|
345
|
+
## Liens utiles
|
|
346
|
+
|
|
347
|
+
- [Documentation du CMS Intlayer](https://github.com/aymericzip/intlayer/blob/main/docs/docs/fr/intlayer_CMS.md)
|
|
348
|
+
- [Référence de configuration](https://github.com/aymericzip/intlayer/blob/main/docs/docs/fr/configuration.md)
|
|
349
|
+
- [SDK CMS — `@intlayer/api`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/fr/intlayer_CMS.md#programmatic-access-with-the-intlayerapi-sdk)
|
package/docs/hi/intlayer_CMS.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
createdAt: 2025-08-23
|
|
3
|
-
updatedAt:
|
|
3
|
+
updatedAt: 2026-06-30
|
|
4
4
|
title: Intlayer CMS | अपने कंटेंट को Intlayer CMS में बाहरीकृत करें
|
|
5
5
|
description: अपने कंटेंट को Intlayer CMS में बाहरीकृत करें ताकि आप अपनी टीम को कंटेंट प्रबंधन सौंप सकें।
|
|
6
6
|
keywords:
|
|
@@ -18,6 +18,9 @@ slugs:
|
|
|
18
18
|
- cms
|
|
19
19
|
youtubeVideo: https://www.youtube.com/watch?v=UDDTnirwi_4
|
|
20
20
|
history:
|
|
21
|
+
- version: 9.0.0
|
|
22
|
+
date: 2026-06-30
|
|
23
|
+
changes: "स्व-होस्टिंग अनुभाग जोड़ें"
|
|
21
24
|
- version: 6.0.1
|
|
22
25
|
date: 2025-09-22
|
|
23
26
|
changes: "लाइव सिंक दस्तावेज़ीकरण जोड़ें"
|
|
@@ -373,6 +376,18 @@ export default config;
|
|
|
373
376
|
- `live` फ़्लैग प्रत्येक शब्दकोश के लिए बिल्ड समय पर मूल्यांकित किया जाता है। यदि बिल्ड के दौरान रिमोट सामग्री को `live=true` के रूप में चिह्नित नहीं किया गया था, तो उस शब्दकोश के लिए लाइव सिंक सक्षम करने के लिए आपको पुनः बिल्ड करना होगा।
|
|
374
377
|
- लाइव सिंक सर्वर को `.intlayer` में लिखने में सक्षम होना चाहिए। कंटेनरों में, `/.intlayer` पर लिखने की अनुमति सुनिश्चित करें।
|
|
375
378
|
|
|
379
|
+
## स्व-होस्टिंग (Self-Hosting)
|
|
380
|
+
|
|
381
|
+
Intlayer पूरी तरह से आपके अपने इंफ्रास्ट्रक्चर पर चल सकता है। एक सिंगल कमांड Docker Compose के साथ पूरे स्टैक (डैशबोर्ड, API, डेटाबेस, ऑब्जेक्ट स्टोरेज, और ईमेल) को बूटस्ट्रैप करती है:
|
|
382
|
+
|
|
383
|
+
```sh
|
|
384
|
+
curl -fsSL https://intlayer.org/install.sh | sh
|
|
385
|
+
```
|
|
386
|
+
|
|
387
|
+
पूर्ण सेटअप गाइड, एनवायरनमेंट वेरिएबल रेफरेंस, अपग्रेड निर्देश, और बैकअप/रिस्टोर प्रक्रियाओं के लिए, [स्व-होस्टिंग गाइड](https://github.com/aymericzip/intlayer/blob/main/docs/docs/hi/self_hosting.md) देखें।
|
|
388
|
+
|
|
389
|
+
---
|
|
390
|
+
|
|
376
391
|
## डिबग
|
|
377
392
|
|
|
378
393
|
यदि आपको CMS के साथ कोई समस्या आती है, तो निम्नलिखित जांचें:
|
package/docs/hi/releases/v9.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
createdAt: 2026-06-14
|
|
3
|
-
updatedAt: 2026-06-
|
|
3
|
+
updatedAt: 2026-06-30
|
|
4
4
|
title: नया Intlayer v9 - क्या नया है?
|
|
5
5
|
description: जानें कि Intlayer v9 में क्या नया है। लोकप्रिय i18n लाइब्रेरीज़ के लिए ड्रॉप-इन कम्पैटिबिलिटी पैकेजेस और Collections और Variants के लिए सपोर्ट का परिचय।
|
|
6
6
|
keywords:
|
|
@@ -9,6 +9,9 @@ keywords:
|
|
|
9
9
|
- Migration
|
|
10
10
|
- Collections
|
|
11
11
|
- Variants
|
|
12
|
+
- Self-Hosting
|
|
13
|
+
- Docker
|
|
14
|
+
- CMS SDK
|
|
12
15
|
- i18next
|
|
13
16
|
- next-intl
|
|
14
17
|
- vue-i18n
|
|
@@ -299,6 +302,59 @@ npm install intlayer react-native-intlayer
|
|
|
299
302
|
|
|
300
303
|
---
|
|
301
304
|
|
|
305
|
+
## CMS SDK: Intlayer को हेडलेस कंटेंट डेटाबेस के रूप में उपयोग करें
|
|
306
|
+
|
|
307
|
+
Intlayer v9 में `@intlayer/api` के भीतर एक साफ़, स्वतः-प्रमाणित SDK शामिल है, जिससे आप CMS के साथ प्रोग्रामेटिक रूप से इंटरैक्ट कर सकते हैं — प्रोजेक्ट्स प्राप्त करें, डिक्शनरीज़ प्राप्त करें, और उन्हें अपने सर्वर, स्क्रिप्ट्स या CI से पुश या अपडेट करें। प्रमाणीकरण (OAuth2 `client_credentials`) आपके लिए संभाला और रिफ्रेश किया जाता है।
|
|
308
|
+
|
|
309
|
+
SDK को **दो अलग-अलग इम्पोर्ट्स** में विभाजित किया गया है ताकि आपके बंडल में केवल वही डोमेन शामिल हों जिन्हें आप वास्तव में उपयोग करते हैं:
|
|
310
|
+
|
|
311
|
+
1. `createIntlayerCMS` — एक हल्का **ऑथेंटिकेटर** जो क्रेडेंशियल्स और प्रबंधित टोकन रखता है (कोई डोमेन क्लाइंट बंडल नहीं होता)।
|
|
312
|
+
2. `dictionaryEndpoint`, `projectEndpoint`, … — प्रति-डोमेन **एंडपॉइंट बाइंडर**, प्रत्येक अपने स्वयं के सब-पाथ से इम्पोर्ट किया जाता है।
|
|
313
|
+
|
|
314
|
+
```ts fileName="cms.ts"
|
|
315
|
+
import { createIntlayerCMS } from "@intlayer/api";
|
|
316
|
+
import { dictionaryEndpoint } from "@intlayer/api/dictionary";
|
|
317
|
+
|
|
318
|
+
// कॉन्फ़िगरेशन वैकल्पिक है: क्रेडेंशियल्स INTLAYER_CLIENT_ID /
|
|
319
|
+
// INTLAYER_CLIENT_SECRET पर फ़ॉलबैक करते हैं, जिन्हें `@intlayer/config/built` हल करता है।
|
|
320
|
+
const cms = createIntlayerCMS();
|
|
321
|
+
|
|
322
|
+
// पढ़ें
|
|
323
|
+
const { data: dictionaries } = await dictionaryEndpoint(cms).getDictionaries();
|
|
324
|
+
|
|
325
|
+
// लिखें — CMS को डेटाबेस की तरह उपयोग करें
|
|
326
|
+
await dictionaryEndpoint(cms).pushDictionaries([myDictionary]);
|
|
327
|
+
```
|
|
328
|
+
|
|
329
|
+
> सुरक्षा: CMS क्रेडेंशियल्स आपके कंटेंट पर लिखने की अनुमति देते हैं। ऑथेंटिकेटर हमेशा केवल **सर्वर साइड** पर ही बनाएं — `clientId` / `clientSecret` को कभी ब्राउज़र पर न भेजें।
|
|
330
|
+
|
|
331
|
+
---
|
|
332
|
+
|
|
333
|
+
## स्व-होस्टिंग (Self-Hosting)
|
|
334
|
+
|
|
335
|
+
Intlayer v9 एक ही कमांड से अपना स्वयं का Intlayer इंस्टेंस चलाने के लिए प्रथम-श्रेणी समर्थन प्रदान करता है — किसी Intlayer Cloud खाते की आवश्यकता नहीं है।
|
|
336
|
+
|
|
337
|
+
```sh
|
|
338
|
+
curl -fsSL https://intlayer.org/install.sh | sh
|
|
339
|
+
```
|
|
340
|
+
|
|
341
|
+
इंस्टॉलर एक `docker-compose.yml` और एक `.env` डाउनलोड करता है, आवश्यक सीक्रेट्स (secrets) को स्वचालित रूप से जनरेट करता है, और `docker compose up -d` चलाता है। सब कुछ — डैशबोर्ड, API, डेटाबेस, ऑब्जेक्ट स्टोरेज, और ट्रांजेक्शनल ईमेल — कंटेनर्स में स्थानीय रूप से चलता है।
|
|
342
|
+
|
|
343
|
+
### शामिल सेवाएं
|
|
344
|
+
|
|
345
|
+
| सेवा | उद्देश्य |
|
|
346
|
+
| -------------------------------------- | ---------------------------------------------------------------- |
|
|
347
|
+
| **app** (TanStack Start) | पोर्ट `3000` पर डैशबोर्ड UI |
|
|
348
|
+
| **backend** (Fastify/Bun) | पोर्ट `3100` पर REST API |
|
|
349
|
+
| **MongoDB 7** (सिंगल-नोड रेप्लिका सेट) | प्राथमिक डेटाबेस |
|
|
350
|
+
| **Redis 7** | जॉब क्यूज़ और कैशिंग |
|
|
351
|
+
| **MinIO** | S3-संगत ऑब्जेक्ट स्टोरेज (अवतार, स्क्रीनशॉट) |
|
|
352
|
+
| **Mailpit** | लोकल SMTP सिंक + पोर्ट `8025` पर ट्रांजेक्शनल ईमेल के लिए वेब UI |
|
|
353
|
+
|
|
354
|
+
Chromium (Puppeteer स्क्रीनशॉट जनरेशन के लिए उपयोग किया जाता है) बैकएंड इमेज के अंदर बंडल किया गया है — किसी अतिरिक्त कंटेनर की आवश्यकता नहीं है।
|
|
355
|
+
|
|
356
|
+
---
|
|
357
|
+
|
|
302
358
|
## v8 से माइग्रेशन नोट्स
|
|
303
359
|
|
|
304
360
|
यदि आप v8 से अपग्रेड कर रहे हैं, तो ध्यान दें कि v9 में कोई ब्रेकिंग बदलाव (breaking changes) शामिल नहीं हैं। लेकिन यहाँ मुख्य बदलाव दिए गए हैं:
|
|
@@ -314,3 +370,5 @@ npm install intlayer react-native-intlayer
|
|
|
314
370
|
- [Compat Adapter Packages Guide](https://github.com/aymericzip/intlayer/blob/main/docs/docs/hi/compat/index.md)
|
|
315
371
|
- [Dynamic Dictionaries - Collections & Variants](https://github.com/aymericzip/intlayer/blob/main/docs/docs/hi/dynamic_dictionaries/index.md)
|
|
316
372
|
- [Configuration Reference](https://github.com/aymericzip/intlayer/blob/main/docs/docs/hi/configuration.md)
|
|
373
|
+
- [CMS SDK - @intlayer/api के साथ प्रोग्रामेटिक एक्सेस](https://github.com/aymericzip/intlayer/blob/main/docs/docs/hi/intlayer_CMS.md)
|
|
374
|
+
- [स्व-होस्टिंग गाइड](https://github.com/aymericzip/intlayer/blob/main/docs/docs/hi/self_hosting.md)
|