@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.
Files changed (63) hide show
  1. package/dist/cjs/generated/docs.entry.cjs +20 -0
  2. package/dist/cjs/generated/docs.entry.cjs.map +1 -1
  3. package/dist/esm/generated/docs.entry.mjs +20 -0
  4. package/dist/esm/generated/docs.entry.mjs.map +1 -1
  5. package/dist/types/generated/docs.entry.d.ts +1 -0
  6. package/dist/types/generated/docs.entry.d.ts.map +1 -1
  7. package/docs/ar/intlayer_CMS.md +16 -1
  8. package/docs/ar/releases/v9.md +58 -1
  9. package/docs/ar/self_hosting.md +349 -0
  10. package/docs/bn/intlayer_CMS.md +570 -0
  11. package/docs/bn/releases/v9.md +358 -0
  12. package/docs/cs/releases/v9.md +358 -0
  13. package/docs/de/intlayer_CMS.md +117 -1
  14. package/docs/de/releases/v9.md +61 -1
  15. package/docs/de/self_hosting.md +349 -0
  16. package/docs/en/intlayer_CMS.md +171 -1
  17. package/docs/en/releases/v9.md +45 -2
  18. package/docs/en/self_hosting.md +349 -0
  19. package/docs/en-GB/intlayer_CMS.md +16 -1
  20. package/docs/en-GB/releases/v9.md +47 -2
  21. package/docs/en-GB/self_hosting.md +349 -0
  22. package/docs/es/intlayer_CMS.md +117 -1
  23. package/docs/es/releases/v9.md +61 -1
  24. package/docs/es/self_hosting.md +349 -0
  25. package/docs/fr/intlayer_CMS.md +117 -1
  26. package/docs/fr/releases/v9.md +61 -1
  27. package/docs/fr/self_hosting.md +349 -0
  28. package/docs/hi/intlayer_CMS.md +16 -1
  29. package/docs/hi/releases/v9.md +59 -1
  30. package/docs/hi/self_hosting.md +349 -0
  31. package/docs/id/releases/v9.md +31 -1
  32. package/docs/id/self_hosting.md +349 -0
  33. package/docs/it/intlayer_CMS.md +117 -1
  34. package/docs/it/releases/v9.md +61 -1
  35. package/docs/it/self_hosting.md +349 -0
  36. package/docs/ja/intlayer_CMS.md +191 -10
  37. package/docs/ja/releases/v9.md +31 -1
  38. package/docs/ja/self_hosting.md +349 -0
  39. package/docs/ko/intlayer_CMS.md +189 -6
  40. package/docs/ko/releases/v9.md +30 -1
  41. package/docs/ko/self_hosting.md +349 -0
  42. package/docs/nl/releases/v9.md +358 -0
  43. package/docs/pl/intlayer_CMS.md +16 -1
  44. package/docs/pl/releases/v9.md +58 -1
  45. package/docs/pl/self_hosting.md +349 -0
  46. package/docs/pt/intlayer_CMS.md +117 -1
  47. package/docs/pt/releases/v9.md +61 -1
  48. package/docs/pt/self_hosting.md +349 -0
  49. package/docs/ru/intlayer_CMS.md +196 -15
  50. package/docs/ru/releases/v9.md +59 -1
  51. package/docs/ru/self_hosting.md +349 -0
  52. package/docs/tr/intlayer_CMS.md +16 -1
  53. package/docs/tr/releases/v9.md +46 -1
  54. package/docs/tr/self_hosting.md +349 -0
  55. package/docs/uk/intlayer_CMS.md +16 -1
  56. package/docs/uk/releases/v9.md +58 -1
  57. package/docs/uk/self_hosting.md +349 -0
  58. package/docs/vi/releases/v9.md +31 -1
  59. package/docs/vi/self_hosting.md +349 -0
  60. package/docs/zh/releases/v9.md +31 -1
  61. package/docs/zh/self_hosting.md +349 -0
  62. package/package.json +6 -6
  63. 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: Intlayer'ı Kendi Sunucunuzda Barındırma
5
+ description: Tek bir komutla kendi altyapınızda eksiksiz bir Intlayer örneğini çalıştırın. Intlayer Cloud hesabı gerekmez.
6
+ keywords:
7
+ - Kendi Sunucusunda Barındırma
8
+ - Docker
9
+ - Docker Compose
10
+ - Intlayer
11
+ - CMS
12
+ - Kurulum
13
+ - Altyapı
14
+ slugs:
15
+ - doc
16
+ - self-hosting
17
+ author: aymericzip
18
+ ---
19
+
20
+ # Intlayer'ı Kendi Sunucunuzda Barındırma
21
+
22
+ Intlayer, tamamen kendi altyapınızda çalışabilir; Intlayer Cloud hesabı gerekmez. Tek bir komutla üretime hazır bir yığını başlatabilirsiniz:
23
+
24
+ ```sh
25
+ curl -fsSL https://intlayer.org/install.sh | sh
26
+ ```
27
+
28
+ Yükleyici, bir `docker-compose.yml` ve bir `.env` indirir, gerekli gizli anahtarları otomatik olarak oluşturur ve tüm kapsayıcıları `docker compose up -d` ile başlatır.
29
+
30
+ ## İçindekiler
31
+
32
+ <TOC/>
33
+
34
+ ---
35
+
36
+ ## Mimari
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-düğüm RS) (S3 API) (SMTP) (görüntü içinde)
49
+ minio:9001 mailpit:8025
50
+ (konsol) (web arayüzü)
51
+ ```
52
+
53
+ Chromium (Puppeteer ekran görüntüsü oluşturma için kullanılır) backend görüntüsünün içine dahil edilmiştir; ayrı bir kapsayıcıya gerek yoktur.
54
+
55
+ ---
56
+
57
+ ## Önkoşullar
58
+
59
+ - **Docker** ≥ 24 ve **Docker Compose** ≥ v2. Herhangi biri eksikse, yükleyici kurulum bağlantısını yazdırır ve çıkar.
60
+ - Ana bilgisayarda `3000`, `3100`, `8025`, `9000` ve `9001` bağlantı noktalarının kullanılabilir olması.
61
+ - Bir Linux veya macOS ana bilgisayarı (veya Windows'ta WSL2).
62
+
63
+ ---
64
+
65
+ ## Hızlı Başlangıç
66
+
67
+ ```sh
68
+ curl -fsSL https://intlayer.org/install.sh | sh
69
+ ```
70
+
71
+ Yükleyicinin yaptığı işlemler:
72
+
73
+ 1. `docker` ve `docker compose`'un mevcut olduğunu kontrol eder.
74
+ 2. `docker-compose.yml` ve `.env.example` dosyalarını `./intlayer/` dizinine indirir.
75
+ 3. `.env` dosyası mevcut değilse, örneği kopyalar ve `BETTER_AUTH_SECRET`, `S3_ACCESS_KEY_ID` ve `S3_SECRET_ACCESS_KEY` için `openssl rand` aracılığıyla rastgele gizli anahtarlar oluşturur.
76
+ 4. `docker compose pull` + `docker compose up -d` komutlarını çalıştırır.
77
+ 5. URL'leri yazdırır: kontrol paneli `:3000`, API `:3100`, e-posta arayüzü `:8025`, MinIO konsolu `:9001`.
78
+
79
+ Yığın çalışmaya başladıktan sonra **http://localhost:3000** adresini açın ve ilk hesabınızı oluşturun.
80
+
81
+ ---
82
+
83
+ ## Servisler
84
+
85
+ | Servis | Görüntü | Ana Bilgisayar Bağlantı Noktası(ları) | Amaç |
86
+ | ----------- | ------------------------------------------------- | ------------------------------------- | ------------------------------------------------------------ |
87
+ | **app** | `apps/app/Dockerfile` dosyasından oluşturuldu | `3000` | TanStack Start kontrol paneli (CMS UI) |
88
+ | **backend** | `apps/backend/Dockerfile` dosyasından oluşturuldu | `3100` | Fastify REST API (`/health` uç noktası) |
89
+ | **mongo** | `mongo:7` | dahili | Tek düğümlü replika seti (`rs0`) |
90
+ | **redis** | `redis:7-alpine` | dahili | İş kuyrukları (BullMQ) ve önbellekleme (ioredis) |
91
+ | **minio** | `minio/minio` | `9000` (S3), `9001` (konsol) | Avatarlar ve ekran görüntüleri için S3 uyumlu nesne depolama |
92
+ | **mailpit** | `axllent/mailpit` | `1025` (SMTP), `8025` (web UI) | Yerel işlem e-postası alıcısı |
93
+
94
+ Dahili bağlantı noktaları (mongo, redis) varsayılan olarak ana bilgisayara açık değildir.
95
+
96
+ > MinIO bağlantı noktası `9000` tarayıcı tarafından erişilebilir olmalıdır çünkü yüklenen varlıklar (avatarlar, ekran görüntüleri) doğrudan `S3_PUBLIC_URL=http://localhost:9000/intlayer` adresinden yüklenir.
97
+
98
+ ---
99
+
100
+ ## Ortam Değişkenleri
101
+
102
+ Yükleyici, kullanıma hazır bir `.env` dosyası oluşturur. Aşağıdaki tablo her değişkeni açıklar.
103
+
104
+ ### Gerekli (otomatik oluşturulur veya istenir)
105
+
106
+ | Değişken | Örnek | Açıklama |
107
+ | ---------------------- | ----------------------------------------------- | ---------------------------------------------------------- |
108
+ | `NODE_ENV` | `production` | Çalışma zamanı ortamı |
109
+ | `PORT` | `3100` | Backend dinleme portu |
110
+ | `BACKEND_URL` | `http://localhost:3100` | Backend API'sinin genel URL'si |
111
+ | `APP_URL` | `http://localhost:3000` | Kontrol panelinin genel URL'si |
112
+ | `DOMAIN` | `localhost` | Çerez alanı |
113
+ | `MONGODB_URI` | `mongodb://mongo:27017/intlayer?replicaSet=rs0` | Tam MongoDB bağlantı URI'si |
114
+ | `REDIS_URL` | `redis://redis:6379` | Redis bağlantı URL'si |
115
+ | `BETTER_AUTH_SECRET` | _(oluşturuldu)_ | Oturum imzalamak için 32 baytlık gizli anahtar |
116
+ | `MAIL_PROVIDER` | `smtp` | E-posta taşıma yöntemi: `smtp` veya `resend` |
117
+ | `MAIL_SMTP_HOST` | `mailpit` | SMTP ana bilgisayar adı (Mailpit kapsayıcı adı) |
118
+ | `MAIL_SMTP_PORT` | `1025` | SMTP portu |
119
+ | `MAIL_FROM` | `Intlayer <no-reply@localhost>` | Gönderen adresi |
120
+ | `S3_ENDPOINT` | `http://minio:9000` | S3 uyumlu uç nokta |
121
+ | `S3_PUBLIC_URL` | `http://localhost:9000/intlayer` | Tarayıcı varlık yüklemesi için genel URL |
122
+ | `S3_BUCKET_NAME` | `intlayer` | Kova adı |
123
+ | `S3_ACCESS_KEY_ID` | _(oluşturuldu)_ | MinIO erişim anahtarı |
124
+ | `S3_SECRET_ACCESS_KEY` | _(oluşturuldu)_ | MinIO gizli anahtarı |
125
+ | `VITE_BACKEND_URL` | `http://localhost:3100` | Oluşturma zamanında kontrol paneline gömülü backend URL'si |
126
+ | `VITE_DOMAIN` | `localhost` | Oluşturma zamanında kontrol paneline gömülü alan adı |
127
+
128
+ ### İsteğe Bağlı (yokluğunda özellikler sorunsuz şekilde bozulur)
129
+
130
+ | Değişken | Özellik |
131
+ | -------------------------------------------------------- | --------------------------------------------------------------------------- |
132
+ | `OPENAI_API_KEY` | AI destekli çeviri ve içerik denetimi |
133
+ | `STRIPE_SECRET_KEY`, `STRIPE_WEBHOOK_SECRET`, `STRIPE_*` | Faturalandırma ve abonelik yönetimi |
134
+ | `RESEND_API_KEY` | Resend aracılığıyla işlemsel e-posta (ayarlanırsa Mailpit'i geçersiz kılar) |
135
+ | `GITHUB_CLIENT_ID`, `GITHUB_CLIENT_SECRET` | GitHub OAuth girişi |
136
+ | `GOOGLE_CLIENT_ID`, `GOOGLE_CLIENT_SECRET` | Google OAuth girişi |
137
+ | `GITLAB_CLIENT_ID`, `GITLAB_CLIENT_SECRET` | GitLab OAuth girişi |
138
+ | `MICROSOFT_CLIENT_ID`, `MICROSOFT_CLIENT_SECRET` | Microsoft OAuth girişi |
139
+ | `LINKEDIN_CLIENT_ID`, `LINKEDIN_CLIENT_SECRET` | LinkedIn OAuth girişi |
140
+ | `ATLASSIAN_CLIENT_ID`, `ATLASSIAN_CLIENT_SECRET` | Atlassian OAuth girişi |
141
+
142
+ ---
143
+
144
+ ## Intlayer projenizi bağlama
145
+
146
+ Yığın çalışmaya başladıktan sonra, projenizi `intlayer.org` yerine kendi barındırılan backend ve kontrol paneline yönlendirin.
147
+
148
+ ### Proje yapılandırması
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
+ * Kendi sunucunuzda barındırılan CMS kontrol panelinin URL'si.
160
+ * Varsayılan: https://app.intlayer.org
161
+ */
162
+ cmsURL: process.env.INTLAYER_CMS_URL, // örn. http://localhost:3000
163
+
164
+ /**
165
+ * Kendi sunucunuzda barındırılan backend API'sinin URL'si.
166
+ * Varsayılan: https://back.intlayer.org
167
+ */
168
+ backendURL: process.env.INTLAYER_BACKEND_URL, // örn. http://localhost:3100
169
+ },
170
+ };
171
+
172
+ export default config;
173
+ ```
174
+
175
+ Projenizin `.env` dosyasında ortam değişkenlerini ayarlayın:
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
+ Kendi barındırılan kontrol panelinizde **Projeler → Erişim Anahtarları** altında `http://localhost:3000/projects` adresinde erişim kimlik bilgileri oluşturun.
185
+
186
+ ### `@intlayer/api` SDK
187
+
188
+ `@intlayer/api` SDK'sını programlı olarak kullanırken, `backendURL`'i açıkça geçirin:
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
+ ## Yükseltme
208
+
209
+ Mevcut bir dağıtım üzerinde yükleyiciyi yeniden çalıştırmak, kademeli bir yükseltme gerçekleştirir:
210
+
211
+ ```sh
212
+ curl -fsSL https://intlayer.org/install.sh | sh
213
+ ```
214
+
215
+ Bu, en son görüntüleri çeker ve kapsayıcıları `docker compose pull && docker compose up -d` ile yeniden başlatır. Mevcut birimler (`mongo-data`, `redis-data`, `minio-data`) korunur; veri kaybı olmaz.
216
+
217
+ Manuel olarak `./intlayer/` dizini içinden yükseltme yapmak için:
218
+
219
+ ```sh
220
+ docker compose pull
221
+ docker compose up -d
222
+ ```
223
+
224
+ ---
225
+
226
+ ## Yedekleme ve Geri Yükleme
227
+
228
+ Tüm kalıcı veriler, üç adet adlandırılmış Docker biriminde bulunur.
229
+
230
+ ### Yedekleme
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
+ ### Geri Yükleme
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
+ # redis-data ve minio-data için tekrarlayın
258
+ ```
259
+
260
+ ---
261
+
262
+ ## Ters Proxy Kullanımı (Nginx / Caddy)
263
+
264
+ Üretim dağıtımları için, uygulama ve backend kapsayıcılarının önüne doğrudan açmak yerine bir ters proxy yerleştirin.
265
+
266
+ ### Nginx örneği
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
+ Aşağıdaki `.env` değişkenlerini genel alan adlarınızla eşleşecek şekilde güncelleyin:
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
+ > `VITE_*` değişkenleri oluşturma zamanında kontrol paneli görüntüsüne gömülür. Görüntü oluşturulduktan sonra bunları değiştirirseniz, `app` görüntüsünü yeniden oluşturmanız (`docker compose build app`) veya çalışma zamanı yapılandırma enjeksiyonu kullanmanız gerekir.
303
+
304
+ ---
305
+
306
+ ## Sorun Giderme
307
+
308
+ ### İlk Başlangıçta Backend Sürekli Çöküyor
309
+
310
+ Backend başlamadan önce MongoDB ve Redis'in sağlıklı olması gerekir. Compose dosyası `condition: service_healthy` ile `depends_on` kullanır. Tekrarlayan backend yeniden başlatmaları görüyorsanız, `mongo` ve `redis` sağlık kontrollerinin geçtiğinden emin olun:
311
+
312
+ ```sh
313
+ docker compose ps
314
+ docker compose logs mongo
315
+ docker compose logs redis
316
+ ```
317
+
318
+ ### Kontrol Paneli API'ye Ulaşamıyor
319
+
320
+ `VITE_BACKEND_URL`'in backend'e **tarayıcıdan** (Docker ağı değil) erişilebilen URL ile eşleştiğini doğrulayın. Backend portunu değiştirdiyseniz veya bir ters proxy eklediyseniz, kontrol paneli görüntüsünü yeniden oluşturun:
321
+
322
+ ```sh
323
+ docker compose build app
324
+ docker compose up -d app
325
+ ```
326
+
327
+ ### E-posta Gönderilmiyor
328
+
329
+ Varsayılan olarak, tüm giden e-postalar Mailpit tarafından yakalanır. Gönderilen mesajları görmek için `http://localhost:8025` adresini açın. Gerçek e-posta göndermek için `.env` dosyasında `MAIL_PROVIDER=resend` ve `RESEND_API_KEY=<anahtarınız>` ayarlayın, ardından backend'i yeniden başlatın:
330
+
331
+ ```sh
332
+ docker compose restart backend
333
+ ```
334
+
335
+ ### MinIO Kovası Eksik
336
+
337
+ Eğer `minio-init` tek seferlik servisi çalışmadıysa (veya MinIO hazır olmadan önce çalıştıysa), kovayı manuel olarak oluşturun:
338
+
339
+ ```sh
340
+ docker compose run --rm minio-init
341
+ ```
342
+
343
+ ---
344
+
345
+ ## Faydalı Bağlantılar
346
+
347
+ - [Intlayer CMS belgeleri](https://github.com/aymericzip/intlayer/blob/main/docs/docs/tr/intlayer_CMS.md)
348
+ - [Yapılandırma referansı](https://github.com/aymericzip/intlayer/blob/main/docs/docs/tr/configuration.md)
349
+ - [CMS SDK — `@intlayer/api`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/tr/intlayer_CMS.md#programmatic-access-with-the-intlayerapi-sdk)
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  createdAt: 2025-08-23
3
- updatedAt: 2025-08-23
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: "Додано документацію `liveSync`"
@@ -384,6 +387,18 @@ export default config;
384
387
  - Прапорець `live` оцінюється для кожного словника під час збірки. Якщо віддалений контент не мав `live=true` під час збірки, потрібно перебудувати проект, щоб увімкнути Live Sync для цього словника.
385
388
  - Сервер live sync має мати можливість записувати в `.intlayer`. У контейнерах переконайтеся, що є права запису до `/.intlayer`.
386
389
 
390
+ ## Самостійне розгортання (Self-Hosting)
391
+
392
+ Intlayer може працювати повністю на вашій власній інфраструктурі. Одна команда розгортає повний стек (дашборд, API, база даних, сховище об'єктів та електронна пошта) за допомогою Docker Compose:
393
+
394
+ ```sh
395
+ curl -fsSL https://intlayer.org/install.sh | sh
396
+ ```
397
+
398
+ Повний посібник із налаштування, довідник зі змінних середовища, інструкції з оновлення та процедури резервного копіювання/відновлення наведені в [Посібнику із самостійного розгортання](https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/self_hosting.md).
399
+
400
+ ---
401
+
387
402
  ## Налагодження
388
403
 
389
404
  Якщо у вас виникли проблеми з CMS, перевірте наступне:
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  createdAt: 2026-06-14
3
- updatedAt: 2026-06-26
3
+ updatedAt: 2026-06-30
4
4
  title: Новий Intlayer v9 - Що нового?
5
5
  description: Дізнайтеся, що нового в Intlayer v9. Представляємо сумісні пакети швидкої заміни (drop-in) для популярних бібліотек i18n та підтримку Collections та Variants.
6
6
  keywords:
@@ -9,6 +9,8 @@ keywords:
9
9
  - Міграція
10
10
  - Колекції
11
11
  - Варіанти
12
+ - Self-Hosting
13
+ - Docker
12
14
  - i18next
13
15
  - next-intl
14
16
  - vue-i18n
@@ -299,6 +301,59 @@ npm install intlayer react-native-intlayer
299
301
 
300
302
  ---
301
303
 
304
+ ## CMS SDK: використовуйте Intlayer як headless базу даних контенту
305
+
306
+ Intlayer v9 містить акуратний SDK з автоматичною автентифікацією в `@intlayer/api` для програмної взаємодії з CMS — отримувати проєкти, отримувати словники, а також надсилати чи оновлювати їх із власного сервера, скриптів або CI. Автентифікація (OAuth2 `client_credentials`) виконується та оновлюється за вас.
307
+
308
+ SDK розділено на **два окремі імпорти**, тож ваш бандл містить лише ті домени, які ви справді використовуєте:
309
+
310
+ 1. `createIntlayerCMS` — легкий **автентифікатор**, який зберігає облікові дані та керований токен (клієнти доменів не включаються).
311
+ 2. `dictionaryEndpoint`, `projectEndpoint`, … — **прив'язки ендпоінтів** для кожного домену, кожна імпортується зі свого підшляху.
312
+
313
+ ```ts fileName="cms.ts"
314
+ import { createIntlayerCMS } from "@intlayer/api";
315
+ import { dictionaryEndpoint } from "@intlayer/api/dictionary";
316
+
317
+ // Конфігурація необов'язкова: облікові дані беруться з INTLAYER_CLIENT_ID /
318
+ // INTLAYER_CLIENT_SECRET, що розв'язуються через `@intlayer/config/built`.
319
+ const cms = createIntlayerCMS();
320
+
321
+ // Читання
322
+ const { data: dictionaries } = await dictionaryEndpoint(cms).getDictionaries();
323
+
324
+ // Запис — використовуйте CMS як базу даних
325
+ await dictionaryEndpoint(cms).pushDictionaries([myDictionary]);
326
+ ```
327
+
328
+ > Безпека: облікові дані CMS надають доступ до запису вашого контенту. Завжди створюйте автентифікатор лише **на стороні сервера** — ніколи не передавайте `clientId` / `clientSecret` у браузер.
329
+
330
+ ---
331
+
332
+ ## Самостійне розгортання (Self-Hosting)
333
+
334
+ Intlayer v9 постачається з першокласною підтримкою запуску власного екземпляра Intlayer однією командою — обліковий запис Intlayer Cloud не потрібен.
335
+
336
+ ```sh
337
+ curl -fsSL https://intlayer.org/install.sh | sh
338
+ ```
339
+
340
+ Встановлювач завантажує `docker-compose.yml` та `.env`, автоматично генерує необхідні секрети та запускає `docker compose up -d`. Все — дашборд, API, база даних, сховище об'єктів та транзакційна електронна пошта — працює локально у контейнерах.
341
+
342
+ ### Включені сервіси
343
+
344
+ | Сервіс | Призначення |
345
+ | ----------------------------------------- | ------------------------------------------------------------------------------ |
346
+ | **app** (TanStack Start) | UI дашборду на порту `3000` |
347
+ | **backend** (Fastify/Bun) | REST API на порту `3100` |
348
+ | **MongoDB 7** (одновузловий набір реплік) | Основна база даних |
349
+ | **Redis 7** | Черги завдань та кешування |
350
+ | **MinIO** | S3-сумісне сховище об'єктів (аватари, знімки екрана) |
351
+ | **Mailpit** | Локальний SMTP-приймач + веб-інтерфейс для транзакційної пошти на порту `8025` |
352
+
353
+ Chromium (що використовується для генерації знімків екрана через Puppeteer) вбудований у образ бекенду — додатковий контейнер не потрібен.
354
+
355
+ ---
356
+
302
357
  ## Примітки щодо міграції з v8
303
358
 
304
359
  Якщо ви оновлюєтеся з v8, зверніть увагу, що v9 не містить критичних змін (breaking changes). Проте ось ключові зміни:
@@ -314,3 +369,5 @@ npm install intlayer react-native-intlayer
314
369
  - [Посібник з пакетів адаптерів сумісності (Compat Adapter Packages)](https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/compat/index.md)
315
370
  - [Динамічні словники - Collections та Variants](https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/dynamic_dictionaries/index.md)
316
371
  - [Довідник з конфігурації](https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/configuration.md)
372
+ - [CMS SDK — програмний доступ через @intlayer/api](https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/intlayer_CMS.md)
373
+ - [Посібник із самостійного розгортання](https://github.com/aymericzip/intlayer/blob/main/docs/docs/uk/self_hosting.md)