@intlayer/docs 9.5.5 → 9.5.7
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/README.md +0 -1
- package/blog/ar/i18next_vs_intlayer-i18next.md +122 -15
- package/blog/ar/i18next_vs_intlayer.md +130 -16
- package/blog/ar/lingui_vs_intlayer.md +122 -15
- package/blog/ar/next-intl_vs_intlayer-next-intl.md +124 -15
- package/blog/ar/next-intl_vs_intlayer.md +136 -20
- package/blog/ar/transform_existing_vite_react_app_using_compiler.md +4 -2
- package/blog/ar/vue-i18n_vs_intlayer-vue-i18n.md +119 -17
- package/blog/ar/vue-i18n_vs_intlayer.md +193 -31
- package/blog/ar/vue-i18n_vs_intlayer_benchmark.md +361 -0
- package/blog/de/i18next_vs_intlayer-i18next.md +122 -15
- package/blog/de/i18next_vs_intlayer.md +128 -14
- package/blog/de/lingui_vs_intlayer.md +122 -15
- package/blog/de/next-intl_vs_intlayer-next-intl.md +124 -15
- package/blog/de/next-intl_vs_intlayer.md +125 -15
- package/blog/de/transform_existing_vite_react_app_using_compiler.md +4 -2
- package/blog/de/vue-i18n_vs_intlayer-vue-i18n.md +117 -17
- package/blog/de/vue-i18n_vs_intlayer.md +193 -31
- package/blog/en/i18next_vs_intlayer-i18next.md +121 -14
- package/blog/en/i18next_vs_intlayer.md +128 -14
- package/blog/en/lingui_vs_intlayer.md +124 -15
- package/blog/en/next-intl_vs_intlayer-next-intl.md +123 -14
- package/blog/en/next-intl_vs_intlayer.md +125 -13
- package/blog/en/transform_existing_vite_react_app_using_compiler.md +4 -2
- package/blog/en/vue-i18n_vs_intlayer-vue-i18n.md +115 -15
- package/blog/en/vue-i18n_vs_intlayer.md +188 -27
- package/blog/en-GB/i18next_vs_intlayer-i18next.md +121 -14
- package/blog/en-GB/i18next_vs_intlayer.md +128 -14
- package/blog/en-GB/lingui_vs_intlayer.md +122 -15
- package/blog/en-GB/next-intl_vs_intlayer-next-intl.md +124 -15
- package/blog/en-GB/next-intl_vs_intlayer.md +125 -15
- package/blog/en-GB/transform_existing_vite_react_app_using_compiler.md +4 -2
- package/blog/en-GB/vue-i18n_vs_intlayer-vue-i18n.md +117 -17
- package/blog/en-GB/vue-i18n_vs_intlayer.md +187 -25
- package/blog/en-GB/vue-i18n_vs_intlayer_benchmark.md +116 -0
- package/blog/es/i18next_vs_intlayer-i18next.md +122 -15
- package/blog/es/i18next_vs_intlayer.md +128 -14
- package/blog/es/lingui_vs_intlayer.md +122 -15
- package/blog/es/next-intl_vs_intlayer-next-intl.md +124 -15
- package/blog/es/next-intl_vs_intlayer.md +125 -15
- package/blog/es/transform_existing_vite_react_app_using_compiler.md +4 -2
- package/blog/es/vue-i18n_vs_intlayer-vue-i18n.md +117 -17
- package/blog/es/vue-i18n_vs_intlayer.md +193 -31
- package/blog/fr/i18next_vs_intlayer-i18next.md +122 -15
- package/blog/fr/i18next_vs_intlayer.md +128 -14
- package/blog/fr/lingui_vs_intlayer.md +122 -15
- package/blog/fr/next-intl_vs_intlayer-next-intl.md +124 -15
- package/blog/fr/next-intl_vs_intlayer.md +127 -15
- package/blog/fr/transform_existing_vite_react_app_using_compiler.md +4 -2
- package/blog/fr/vue-i18n_vs_intlayer-vue-i18n.md +118 -17
- package/blog/fr/vue-i18n_vs_intlayer.md +192 -31
- package/blog/fr/vue-i18n_vs_intlayer_benchmark.md +329 -7
- package/blog/hi/i18next_vs_intlayer-i18next.md +122 -15
- package/blog/hi/i18next_vs_intlayer.md +130 -16
- package/blog/hi/lingui_vs_intlayer.md +122 -15
- package/blog/hi/next-intl_vs_intlayer-next-intl.md +124 -15
- package/blog/hi/next-intl_vs_intlayer.md +135 -19
- package/blog/hi/transform_existing_vite_react_app_using_compiler.md +4 -2
- package/blog/hi/vue-i18n_vs_intlayer-vue-i18n.md +117 -17
- package/blog/hi/vue-i18n_vs_intlayer.md +193 -31
- package/blog/hi/vue-i18n_vs_intlayer_benchmark.md +361 -0
- package/blog/id/i18next_vs_intlayer-i18next.md +122 -15
- package/blog/id/i18next_vs_intlayer.md +128 -14
- package/blog/id/lingui_vs_intlayer.md +122 -15
- package/blog/id/next-intl_vs_intlayer-next-intl.md +124 -15
- package/blog/id/next-intl_vs_intlayer.md +135 -19
- package/blog/id/transform_existing_vite_react_app_using_compiler.md +4 -2
- package/blog/id/vue-i18n_vs_intlayer-vue-i18n.md +354 -2
- package/blog/id/vue-i18n_vs_intlayer.md +188 -26
- package/blog/id/vue-i18n_vs_intlayer_benchmark.md +327 -7
- package/blog/it/i18next_vs_intlayer-i18next.md +122 -15
- package/blog/it/i18next_vs_intlayer.md +128 -14
- package/blog/it/lingui_vs_intlayer.md +122 -15
- package/blog/it/next-intl_vs_intlayer-next-intl.md +124 -15
- package/blog/it/next-intl_vs_intlayer.md +125 -15
- package/blog/it/transform_existing_vite_react_app_using_compiler.md +4 -2
- package/blog/it/vue-i18n_vs_intlayer-vue-i18n.md +117 -17
- package/blog/it/vue-i18n_vs_intlayer.md +191 -31
- package/blog/it/vue-i18n_vs_intlayer_benchmark.md +332 -5
- package/blog/ja/i18next_vs_intlayer-i18next.md +122 -15
- package/blog/ja/i18next_vs_intlayer.md +129 -17
- package/blog/ja/lingui_vs_intlayer.md +122 -15
- package/blog/ja/next-intl_vs_intlayer-next-intl.md +124 -15
- package/blog/ja/next-intl_vs_intlayer.md +124 -14
- package/blog/ja/transform_existing_vite_react_app_using_compiler.md +4 -2
- package/blog/ja/vue-i18n_vs_intlayer-vue-i18n.md +117 -17
- package/blog/ja/vue-i18n_vs_intlayer.md +193 -31
- package/blog/ja/vue-i18n_vs_intlayer_benchmark.md +361 -0
- package/blog/ko/i18next_vs_intlayer-i18next.md +122 -15
- package/blog/ko/i18next_vs_intlayer.md +129 -17
- package/blog/ko/lingui_vs_intlayer.md +122 -15
- package/blog/ko/next-intl_vs_intlayer-next-intl.md +124 -15
- package/blog/ko/next-intl_vs_intlayer.md +134 -18
- package/blog/ko/transform_existing_vite_react_app_using_compiler.md +4 -2
- package/blog/ko/vue-i18n_vs_intlayer-vue-i18n.md +117 -17
- package/blog/ko/vue-i18n_vs_intlayer.md +193 -31
- package/blog/pl/i18next_vs_intlayer-i18next.md +122 -15
- package/blog/pl/i18next_vs_intlayer.md +128 -14
- package/blog/pl/lingui_vs_intlayer.md +122 -15
- package/blog/pl/next-intl_vs_intlayer-next-intl.md +124 -15
- package/blog/pl/next-intl_vs_intlayer.md +134 -18
- package/blog/pl/transform_existing_vite_react_app_using_compiler.md +4 -2
- package/blog/pl/vue-i18n_vs_intlayer-vue-i18n.md +117 -17
- package/blog/pl/vue-i18n_vs_intlayer.md +188 -26
- package/blog/pl/vue-i18n_vs_intlayer_benchmark.md +361 -0
- package/blog/pt/i18next_vs_intlayer-i18next.md +122 -15
- package/blog/pt/i18next_vs_intlayer.md +128 -14
- package/blog/pt/lingui_vs_intlayer.md +122 -15
- package/blog/pt/next-intl_vs_intlayer-next-intl.md +124 -15
- package/blog/pt/next-intl_vs_intlayer.md +131 -15
- package/blog/pt/transform_existing_vite_react_app_using_compiler.md +4 -2
- package/blog/pt/vue-i18n_vs_intlayer-vue-i18n.md +117 -17
- package/blog/pt/vue-i18n_vs_intlayer.md +193 -31
- package/blog/pt/vue-i18n_vs_intlayer_benchmark.md +361 -0
- package/blog/ru/i18next_vs_intlayer-i18next.md +122 -15
- package/blog/ru/i18next_vs_intlayer.md +130 -16
- package/blog/ru/lingui_vs_intlayer.md +122 -15
- package/blog/ru/next-intl_vs_intlayer-next-intl.md +125 -16
- package/blog/ru/next-intl_vs_intlayer.md +123 -13
- package/blog/ru/transform_existing_vite_react_app_using_compiler.md +4 -2
- package/blog/ru/vue-i18n_vs_intlayer-vue-i18n.md +127 -27
- package/blog/ru/vue-i18n_vs_intlayer.md +193 -31
- package/blog/ru/vue-i18n_vs_intlayer_benchmark.md +326 -19
- package/blog/tr/i18next_vs_intlayer-i18next.md +122 -15
- package/blog/tr/i18next_vs_intlayer.md +128 -14
- package/blog/tr/lingui_vs_intlayer.md +122 -15
- package/blog/tr/next-intl_vs_intlayer-next-intl.md +124 -15
- package/blog/tr/next-intl_vs_intlayer.md +136 -20
- package/blog/tr/transform_existing_vite_react_app_using_compiler.md +4 -2
- package/blog/tr/vue-i18n_vs_intlayer-vue-i18n.md +117 -17
- package/blog/tr/vue-i18n_vs_intlayer.md +188 -26
- package/blog/tr/vue-i18n_vs_intlayer_benchmark.md +361 -0
- package/blog/uk/i18next_vs_intlayer-i18next.md +122 -15
- package/blog/uk/i18next_vs_intlayer.md +130 -16
- package/blog/uk/lingui_vs_intlayer.md +122 -15
- package/blog/uk/next-intl_vs_intlayer-next-intl.md +124 -15
- package/blog/uk/next-intl_vs_intlayer.md +135 -19
- package/blog/uk/transform_existing_vite_react_app_using_compiler.md +4 -2
- package/blog/uk/vue-i18n_vs_intlayer-vue-i18n.md +135 -17
- package/blog/uk/vue-i18n_vs_intlayer.md +188 -27
- package/blog/uk/vue-i18n_vs_intlayer_benchmark.md +361 -0
- package/blog/vi/i18next_vs_intlayer-i18next.md +122 -15
- package/blog/vi/i18next_vs_intlayer.md +128 -14
- package/blog/vi/lingui_vs_intlayer.md +122 -15
- package/blog/vi/next-intl_vs_intlayer-next-intl.md +124 -15
- package/blog/vi/next-intl_vs_intlayer.md +135 -19
- package/blog/vi/transform_existing_vite_react_app_using_compiler.md +4 -2
- package/blog/vi/vue-i18n_vs_intlayer-vue-i18n.md +117 -17
- package/blog/vi/vue-i18n_vs_intlayer.md +188 -26
- package/blog/vi/vue-i18n_vs_intlayer_benchmark.md +361 -0
- package/blog/zh/i18next_vs_intlayer-i18next.md +122 -15
- package/blog/zh/i18next_vs_intlayer.md +128 -14
- package/blog/zh/lingui_vs_intlayer.md +122 -15
- package/blog/zh/next-intl_vs_intlayer-next-intl.md +124 -15
- package/blog/zh/next-intl_vs_intlayer.md +125 -15
- package/blog/zh/transform_existing_vite_react_app_using_compiler.md +4 -2
- package/blog/zh/vue-i18n_vs_intlayer-vue-i18n.md +117 -17
- package/blog/zh/vue-i18n_vs_intlayer.md +192 -31
- package/blog/zh/vue-i18n_vs_intlayer_benchmark.md +340 -9
- package/dist/cjs/generated/docs.entry.cjs +40 -40
- package/dist/cjs/generated/docs.entry.cjs.map +1 -1
- package/dist/cjs/index.cjs +2 -2
- package/dist/esm/generated/docs.entry.mjs +40 -40
- package/dist/esm/generated/docs.entry.mjs.map +1 -1
- package/dist/esm/index.mjs +2 -2
- package/dist/types/generated/docs.entry.d.ts +2 -2
- package/dist/types/generated/docs.entry.d.ts.map +1 -1
- package/docs/ar/benchmark/nextjs.md +13 -13
- package/docs/ar/benchmark/solid.md +5 -5
- package/docs/ar/benchmark/svelte.md +4 -4
- package/docs/ar/benchmark/tanstack.md +14 -13
- package/docs/ar/benchmark/vue.md +5 -5
- package/docs/ar/chrome_extension.md +130 -0
- package/docs/ar/cli/index.md +6 -1
- package/docs/ar/cli/infra.md +162 -0
- package/docs/ar/cli/init.md +24 -1
- package/docs/ar/dictionary/html.md +173 -5
- package/docs/ar/dictionary/markdown.md +263 -1
- package/docs/ar/intlayer_with_analog.md +23 -1
- package/docs/ar/intlayer_with_angular_19.md +24 -1
- package/docs/ar/intlayer_with_angular_21.md +24 -1
- package/docs/ar/intlayer_with_astro.md +42 -32
- package/docs/ar/intlayer_with_astro_lit.md +56 -36
- package/docs/ar/intlayer_with_astro_preact.md +57 -36
- package/docs/ar/intlayer_with_astro_react.md +57 -36
- package/docs/ar/intlayer_with_astro_solid.md +57 -36
- package/docs/ar/intlayer_with_astro_svelte.md +56 -36
- package/docs/ar/intlayer_with_astro_vue.md +56 -36
- package/docs/ar/intlayer_with_react_router_v7.md +12 -1
- package/docs/ar/intlayer_with_remix_3.md +22 -1
- package/docs/ar/intlayer_with_solid_start.md +14 -7
- package/docs/ar/intlayer_with_svelte_kit.md +12 -1
- package/docs/ar/intlayer_with_tanstack+solid.md +13 -2
- package/docs/ar/intlayer_with_tanstack.md +13 -6
- package/docs/ar/intlayer_with_vite+lit.md +75 -3
- package/docs/ar/intlayer_with_vite+preact.md +27 -19
- package/docs/ar/intlayer_with_vite+react.md +27 -19
- package/docs/ar/intlayer_with_vite+solid.md +27 -19
- package/docs/ar/intlayer_with_vite+svelte.md +27 -19
- package/docs/ar/intlayer_with_vite+vanilla.md +16 -3
- package/docs/ar/intlayer_with_vite+vue.md +27 -19
- package/docs/ar/introduction.md +0 -1
- package/docs/ar/readme.md +0 -1
- package/docs/ar/releases/v8.md +1 -5
- package/docs/ar/self_hosting.md +406 -231
- package/docs/bn/intlayer_with_vite+lit.md +75 -3
- package/docs/bn/intlayer_with_vite+vanilla.md +16 -3
- package/docs/bn/introduction.md +0 -1
- package/docs/cs/intlayer_with_vite+lit.md +75 -3
- package/docs/cs/intlayer_with_vite+vanilla.md +16 -3
- package/docs/cs/introduction.md +0 -1
- package/docs/de/benchmark/nextjs.md +13 -13
- package/docs/de/benchmark/solid.md +5 -5
- package/docs/de/benchmark/svelte.md +4 -4
- package/docs/de/benchmark/tanstack.md +14 -13
- package/docs/de/benchmark/vue.md +5 -5
- package/docs/de/chrome_extension.md +130 -0
- package/docs/de/cli/index.md +6 -1
- package/docs/de/cli/infra.md +162 -0
- package/docs/de/cli/init.md +24 -1
- package/docs/de/dictionary/html.md +173 -5
- package/docs/de/dictionary/markdown.md +263 -1
- package/docs/de/intlayer_with_analog.md +23 -1
- package/docs/de/intlayer_with_angular_19.md +24 -1
- package/docs/de/intlayer_with_angular_21.md +24 -1
- package/docs/de/intlayer_with_astro.md +35 -25
- package/docs/de/intlayer_with_astro_lit.md +47 -27
- package/docs/de/intlayer_with_astro_preact.md +48 -27
- package/docs/de/intlayer_with_astro_react.md +48 -27
- package/docs/de/intlayer_with_astro_solid.md +48 -27
- package/docs/de/intlayer_with_astro_svelte.md +47 -27
- package/docs/de/intlayer_with_astro_vue.md +47 -27
- package/docs/de/intlayer_with_react_router_v7.md +12 -1
- package/docs/de/intlayer_with_remix_3.md +22 -1
- package/docs/de/intlayer_with_solid_start.md +14 -7
- package/docs/de/intlayer_with_svelte_kit.md +12 -1
- package/docs/de/intlayer_with_tanstack+solid.md +13 -2
- package/docs/de/intlayer_with_tanstack.md +13 -6
- package/docs/de/intlayer_with_vite+lit.md +75 -3
- package/docs/de/intlayer_with_vite+preact.md +16 -3
- package/docs/de/intlayer_with_vite+react.md +16 -3
- package/docs/de/intlayer_with_vite+solid.md +16 -3
- package/docs/de/intlayer_with_vite+svelte.md +16 -3
- package/docs/de/intlayer_with_vite+vanilla.md +16 -3
- package/docs/de/intlayer_with_vite+vue.md +16 -3
- package/docs/de/introduction.md +0 -1
- package/docs/de/readme.md +0 -1
- package/docs/de/releases/v8.md +1 -5
- package/docs/de/self_hosting.md +404 -227
- package/docs/en/benchmark/nextjs.md +13 -13
- package/docs/en/benchmark/solid.md +5 -5
- package/docs/en/benchmark/svelte.md +4 -4
- package/docs/en/benchmark/tanstack.md +14 -13
- package/docs/en/benchmark/vue.md +5 -5
- package/docs/en/chrome_extension.md +130 -0
- package/docs/en/cli/index.md +6 -1
- package/docs/en/cli/infra.md +175 -0
- package/docs/en/cli/init.md +25 -1
- package/docs/en/dictionary/html.md +173 -5
- package/docs/en/dictionary/markdown.md +263 -1
- package/docs/en/intlayer_with_analog.md +23 -1
- package/docs/en/intlayer_with_angular_19.md +24 -1
- package/docs/en/intlayer_with_angular_21.md +24 -1
- package/docs/en/intlayer_with_astro.md +29 -21
- package/docs/en/intlayer_with_astro_lit.md +46 -26
- package/docs/en/intlayer_with_astro_preact.md +47 -26
- package/docs/en/intlayer_with_astro_react.md +47 -26
- package/docs/en/intlayer_with_astro_solid.md +47 -26
- package/docs/en/intlayer_with_astro_svelte.md +46 -26
- package/docs/en/intlayer_with_astro_vue.md +46 -26
- package/docs/en/intlayer_with_react_router_v7.md +12 -1
- package/docs/en/intlayer_with_remix_3.md +22 -1
- package/docs/en/intlayer_with_solid_start.md +14 -7
- package/docs/en/intlayer_with_svelte_kit.md +12 -1
- package/docs/en/intlayer_with_tanstack+solid.md +13 -2
- package/docs/en/intlayer_with_tanstack.md +12 -5
- package/docs/en/intlayer_with_vite+lit.md +75 -3
- package/docs/en/intlayer_with_vite+preact.md +16 -3
- package/docs/en/intlayer_with_vite+react.md +16 -3
- package/docs/en/intlayer_with_vite+solid.md +16 -3
- package/docs/en/intlayer_with_vite+svelte.md +16 -3
- package/docs/en/intlayer_with_vite+vanilla.md +16 -3
- package/docs/en/intlayer_with_vite+vue.md +16 -3
- package/docs/en/introduction.md +0 -1
- package/docs/en/readme.md +0 -1
- package/docs/en/releases/v8.md +1 -5
- package/docs/en/self_hosting.md +418 -176
- package/docs/en-GB/benchmark/nextjs.md +13 -13
- package/docs/en-GB/benchmark/solid.md +5 -5
- package/docs/en-GB/benchmark/svelte.md +4 -4
- package/docs/en-GB/benchmark/tanstack.md +14 -13
- package/docs/en-GB/benchmark/vue.md +5 -5
- package/docs/en-GB/chrome_extension.md +130 -0
- package/docs/en-GB/cli/index.md +6 -1
- package/docs/en-GB/cli/infra.md +162 -0
- package/docs/en-GB/cli/init.md +24 -1
- package/docs/en-GB/dictionary/html.md +173 -5
- package/docs/en-GB/dictionary/markdown.md +263 -1
- package/docs/en-GB/intlayer_with_analog.md +23 -1
- package/docs/en-GB/intlayer_with_angular_19.md +24 -1
- package/docs/en-GB/intlayer_with_angular_21.md +24 -1
- package/docs/en-GB/intlayer_with_astro.md +35 -25
- package/docs/en-GB/intlayer_with_astro_lit.md +47 -27
- package/docs/en-GB/intlayer_with_astro_preact.md +48 -27
- package/docs/en-GB/intlayer_with_astro_react.md +48 -27
- package/docs/en-GB/intlayer_with_astro_solid.md +48 -27
- package/docs/en-GB/intlayer_with_astro_svelte.md +47 -27
- package/docs/en-GB/intlayer_with_astro_vue.md +47 -27
- package/docs/en-GB/intlayer_with_react_router_v7.md +12 -1
- package/docs/en-GB/intlayer_with_remix_3.md +22 -1
- package/docs/en-GB/intlayer_with_solid_start.md +14 -7
- package/docs/en-GB/intlayer_with_svelte_kit.md +12 -1
- package/docs/en-GB/intlayer_with_tanstack+solid.md +13 -2
- package/docs/en-GB/intlayer_with_tanstack.md +13 -6
- package/docs/en-GB/intlayer_with_vite+lit.md +75 -3
- package/docs/en-GB/intlayer_with_vite+preact.md +16 -3
- package/docs/en-GB/intlayer_with_vite+react.md +16 -3
- package/docs/en-GB/intlayer_with_vite+solid.md +25 -15
- package/docs/en-GB/intlayer_with_vite+svelte.md +16 -3
- package/docs/en-GB/intlayer_with_vite+vanilla.md +16 -3
- package/docs/en-GB/intlayer_with_vite+vue.md +16 -3
- package/docs/en-GB/introduction.md +0 -1
- package/docs/en-GB/readme.md +0 -1
- package/docs/en-GB/releases/v8.md +1 -5
- package/docs/en-GB/self_hosting.md +381 -206
- package/docs/es/benchmark/nextjs.md +13 -13
- package/docs/es/benchmark/solid.md +5 -5
- package/docs/es/benchmark/svelte.md +4 -4
- package/docs/es/benchmark/tanstack.md +14 -13
- package/docs/es/benchmark/vue.md +5 -5
- package/docs/es/chrome_extension.md +130 -0
- package/docs/es/cli/index.md +6 -1
- package/docs/es/cli/infra.md +162 -0
- package/docs/es/cli/init.md +24 -1
- package/docs/es/dictionary/html.md +173 -5
- package/docs/es/dictionary/markdown.md +263 -1
- package/docs/es/intlayer_with_analog.md +23 -1
- package/docs/es/intlayer_with_angular_19.md +24 -1
- package/docs/es/intlayer_with_angular_21.md +24 -1
- package/docs/es/intlayer_with_astro.md +35 -25
- package/docs/es/intlayer_with_astro_lit.md +47 -27
- package/docs/es/intlayer_with_astro_preact.md +48 -27
- package/docs/es/intlayer_with_astro_react.md +48 -27
- package/docs/es/intlayer_with_astro_solid.md +48 -27
- package/docs/es/intlayer_with_astro_svelte.md +47 -27
- package/docs/es/intlayer_with_astro_vue.md +47 -27
- package/docs/es/intlayer_with_react_router_v7.md +12 -1
- package/docs/es/intlayer_with_remix_3.md +22 -1
- package/docs/es/intlayer_with_solid_start.md +14 -7
- package/docs/es/intlayer_with_svelte_kit.md +12 -1
- package/docs/es/intlayer_with_tanstack+solid.md +13 -2
- package/docs/es/intlayer_with_tanstack.md +13 -6
- package/docs/es/intlayer_with_vite+lit.md +75 -3
- package/docs/es/intlayer_with_vite+preact.md +16 -3
- package/docs/es/intlayer_with_vite+react.md +16 -3
- package/docs/es/intlayer_with_vite+solid.md +16 -3
- package/docs/es/intlayer_with_vite+svelte.md +16 -3
- package/docs/es/intlayer_with_vite+vanilla.md +16 -3
- package/docs/es/intlayer_with_vite+vue.md +16 -3
- package/docs/es/introduction.md +0 -1
- package/docs/es/readme.md +0 -1
- package/docs/es/releases/v8.md +1 -5
- package/docs/es/self_hosting.md +400 -223
- package/docs/fr/benchmark/nextjs.md +13 -13
- package/docs/fr/benchmark/solid.md +5 -5
- package/docs/fr/benchmark/svelte.md +4 -4
- package/docs/fr/benchmark/tanstack.md +14 -13
- package/docs/fr/benchmark/vue.md +5 -5
- package/docs/fr/chrome_extension.md +130 -0
- package/docs/fr/cli/index.md +6 -1
- package/docs/fr/cli/infra.md +162 -0
- package/docs/fr/cli/init.md +24 -1
- package/docs/fr/dictionary/html.md +173 -5
- package/docs/fr/dictionary/markdown.md +265 -4
- package/docs/fr/intlayer_with_analog.md +23 -1
- package/docs/fr/intlayer_with_angular_19.md +24 -1
- package/docs/fr/intlayer_with_angular_21.md +24 -1
- package/docs/fr/intlayer_with_astro.md +36 -26
- package/docs/fr/intlayer_with_astro_lit.md +48 -28
- package/docs/fr/intlayer_with_astro_preact.md +49 -28
- package/docs/fr/intlayer_with_astro_react.md +49 -28
- package/docs/fr/intlayer_with_astro_solid.md +49 -28
- package/docs/fr/intlayer_with_astro_svelte.md +48 -28
- package/docs/fr/intlayer_with_astro_vue.md +48 -28
- package/docs/fr/intlayer_with_react_router_v7.md +15 -4
- package/docs/fr/intlayer_with_remix_3.md +22 -1
- package/docs/fr/intlayer_with_solid_start.md +14 -7
- package/docs/fr/intlayer_with_svelte_kit.md +15 -4
- package/docs/fr/intlayer_with_tanstack+solid.md +15 -4
- package/docs/fr/intlayer_with_tanstack.md +13 -6
- package/docs/fr/intlayer_with_vite+lit.md +75 -3
- package/docs/fr/intlayer_with_vite+preact.md +19 -6
- package/docs/fr/intlayer_with_vite+react.md +19 -6
- package/docs/fr/intlayer_with_vite+solid.md +19 -6
- package/docs/fr/intlayer_with_vite+svelte.md +19 -6
- package/docs/fr/intlayer_with_vite+vanilla.md +19 -6
- package/docs/fr/intlayer_with_vite+vue.md +19 -6
- package/docs/fr/introduction.md +0 -1
- package/docs/fr/readme.md +0 -1
- package/docs/fr/releases/v8.md +1 -5
- package/docs/fr/self_hosting.md +401 -224
- package/docs/hi/benchmark/nextjs.md +13 -13
- package/docs/hi/benchmark/solid.md +5 -5
- package/docs/hi/benchmark/svelte.md +4 -4
- package/docs/hi/benchmark/tanstack.md +14 -13
- package/docs/hi/benchmark/vue.md +5 -5
- package/docs/hi/chrome_extension.md +130 -0
- package/docs/hi/cli/index.md +6 -1
- package/docs/hi/cli/infra.md +162 -0
- package/docs/hi/cli/init.md +24 -1
- package/docs/hi/dictionary/html.md +173 -5
- package/docs/hi/dictionary/markdown.md +263 -1
- package/docs/hi/intlayer_with_analog.md +23 -1
- package/docs/hi/intlayer_with_angular_19.md +24 -1
- package/docs/hi/intlayer_with_angular_21.md +24 -1
- package/docs/hi/intlayer_with_astro.md +38 -31
- package/docs/hi/intlayer_with_astro_lit.md +50 -33
- package/docs/hi/intlayer_with_astro_preact.md +51 -33
- package/docs/hi/intlayer_with_astro_react.md +51 -33
- package/docs/hi/intlayer_with_astro_solid.md +51 -33
- package/docs/hi/intlayer_with_astro_svelte.md +50 -33
- package/docs/hi/intlayer_with_astro_vue.md +50 -33
- package/docs/hi/intlayer_with_react_router_v7.md +20 -12
- package/docs/hi/intlayer_with_remix_3.md +22 -1
- package/docs/hi/intlayer_with_solid_start.md +14 -7
- package/docs/hi/intlayer_with_svelte_kit.md +20 -12
- package/docs/hi/intlayer_with_tanstack+solid.md +13 -2
- package/docs/hi/intlayer_with_tanstack.md +21 -17
- package/docs/hi/intlayer_with_vite+lit.md +75 -3
- package/docs/hi/intlayer_with_vite+preact.md +24 -14
- package/docs/hi/intlayer_with_vite+react.md +24 -14
- package/docs/hi/intlayer_with_vite+solid.md +24 -14
- package/docs/hi/intlayer_with_vite+svelte.md +24 -14
- package/docs/hi/intlayer_with_vite+vanilla.md +16 -3
- package/docs/hi/intlayer_with_vite+vue.md +24 -14
- package/docs/hi/introduction.md +0 -1
- package/docs/hi/readme.md +0 -1
- package/docs/hi/releases/v8.md +1 -5
- package/docs/hi/self_hosting.md +409 -235
- package/docs/id/benchmark/nextjs.md +13 -13
- package/docs/id/benchmark/solid.md +5 -5
- package/docs/id/benchmark/svelte.md +4 -4
- package/docs/id/benchmark/tanstack.md +14 -13
- package/docs/id/benchmark/vue.md +5 -5
- package/docs/id/chrome_extension.md +130 -0
- package/docs/id/cli/index.md +6 -1
- package/docs/id/cli/infra.md +162 -0
- package/docs/id/cli/init.md +24 -1
- package/docs/id/dictionary/html.md +173 -5
- package/docs/id/dictionary/markdown.md +263 -1
- package/docs/id/intlayer_with_analog.md +23 -1
- package/docs/id/intlayer_with_angular_19.md +24 -1
- package/docs/id/intlayer_with_angular_21.md +24 -1
- package/docs/id/intlayer_with_astro.md +35 -25
- package/docs/id/intlayer_with_astro_lit.md +47 -27
- package/docs/id/intlayer_with_astro_preact.md +48 -27
- package/docs/id/intlayer_with_astro_react.md +48 -27
- package/docs/id/intlayer_with_astro_solid.md +48 -27
- package/docs/id/intlayer_with_astro_svelte.md +47 -27
- package/docs/id/intlayer_with_astro_vue.md +47 -27
- package/docs/id/intlayer_with_react_router_v7.md +12 -1
- package/docs/id/intlayer_with_remix_3.md +22 -1
- package/docs/id/intlayer_with_solid_start.md +14 -7
- package/docs/id/intlayer_with_svelte_kit.md +12 -1
- package/docs/id/intlayer_with_tanstack+solid.md +13 -2
- package/docs/id/intlayer_with_tanstack.md +13 -6
- package/docs/id/intlayer_with_vite+lit.md +75 -3
- package/docs/id/intlayer_with_vite+preact.md +16 -3
- package/docs/id/intlayer_with_vite+react.md +16 -3
- package/docs/id/intlayer_with_vite+solid.md +16 -3
- package/docs/id/intlayer_with_vite+svelte.md +16 -3
- package/docs/id/intlayer_with_vite+vanilla.md +16 -3
- package/docs/id/intlayer_with_vite+vue.md +16 -3
- package/docs/id/introduction.md +0 -1
- package/docs/id/readme.md +0 -1
- package/docs/id/releases/v8.md +1 -5
- package/docs/id/self_hosting.md +416 -243
- package/docs/it/benchmark/nextjs.md +13 -13
- package/docs/it/benchmark/solid.md +5 -5
- package/docs/it/benchmark/svelte.md +4 -4
- package/docs/it/benchmark/tanstack.md +14 -13
- package/docs/it/benchmark/vue.md +5 -5
- package/docs/it/chrome_extension.md +130 -0
- package/docs/it/cli/index.md +6 -1
- package/docs/it/cli/infra.md +162 -0
- package/docs/it/cli/init.md +24 -1
- package/docs/it/dictionary/html.md +173 -5
- package/docs/it/dictionary/markdown.md +263 -1
- package/docs/it/intlayer_with_analog.md +23 -1
- package/docs/it/intlayer_with_angular_19.md +24 -1
- package/docs/it/intlayer_with_angular_21.md +24 -1
- package/docs/it/intlayer_with_astro.md +35 -25
- package/docs/it/intlayer_with_astro_lit.md +47 -27
- package/docs/it/intlayer_with_astro_preact.md +48 -27
- package/docs/it/intlayer_with_astro_react.md +48 -27
- package/docs/it/intlayer_with_astro_solid.md +48 -27
- package/docs/it/intlayer_with_astro_svelte.md +47 -27
- package/docs/it/intlayer_with_astro_vue.md +47 -27
- package/docs/it/intlayer_with_react_router_v7.md +12 -1
- package/docs/it/intlayer_with_remix_3.md +22 -1
- package/docs/it/intlayer_with_solid_start.md +14 -7
- package/docs/it/intlayer_with_svelte_kit.md +12 -1
- package/docs/it/intlayer_with_tanstack+solid.md +13 -2
- package/docs/it/intlayer_with_tanstack.md +13 -6
- package/docs/it/intlayer_with_vite+lit.md +75 -3
- package/docs/it/intlayer_with_vite+preact.md +16 -3
- package/docs/it/intlayer_with_vite+react.md +16 -3
- package/docs/it/intlayer_with_vite+solid.md +16 -3
- package/docs/it/intlayer_with_vite+svelte.md +16 -3
- package/docs/it/intlayer_with_vite+vanilla.md +16 -3
- package/docs/it/intlayer_with_vite+vue.md +16 -3
- package/docs/it/introduction.md +0 -1
- package/docs/it/readme.md +0 -1
- package/docs/it/releases/v8.md +1 -5
- package/docs/it/self_hosting.md +412 -237
- package/docs/ja/benchmark/nextjs.md +13 -13
- package/docs/ja/benchmark/solid.md +5 -5
- package/docs/ja/benchmark/svelte.md +4 -4
- package/docs/ja/benchmark/tanstack.md +13 -12
- package/docs/ja/benchmark/vue.md +5 -5
- package/docs/ja/chrome_extension.md +130 -0
- package/docs/ja/cli/index.md +6 -1
- package/docs/ja/cli/infra.md +162 -0
- package/docs/ja/cli/init.md +24 -1
- package/docs/ja/dictionary/html.md +173 -5
- package/docs/ja/dictionary/markdown.md +263 -1
- package/docs/ja/intlayer_with_analog.md +23 -1
- package/docs/ja/intlayer_with_angular_19.md +24 -1
- package/docs/ja/intlayer_with_angular_21.md +24 -1
- package/docs/ja/intlayer_with_astro.md +35 -25
- package/docs/ja/intlayer_with_astro_lit.md +47 -27
- package/docs/ja/intlayer_with_astro_preact.md +48 -27
- package/docs/ja/intlayer_with_astro_react.md +48 -27
- package/docs/ja/intlayer_with_astro_solid.md +48 -27
- package/docs/ja/intlayer_with_astro_svelte.md +47 -27
- package/docs/ja/intlayer_with_astro_vue.md +47 -27
- package/docs/ja/intlayer_with_react_router_v7.md +12 -1
- package/docs/ja/intlayer_with_remix_3.md +22 -1
- package/docs/ja/intlayer_with_solid_start.md +14 -7
- package/docs/ja/intlayer_with_svelte_kit.md +21 -15
- package/docs/ja/intlayer_with_tanstack+solid.md +13 -2
- package/docs/ja/intlayer_with_tanstack.md +13 -6
- package/docs/ja/intlayer_with_vite+lit.md +75 -3
- package/docs/ja/intlayer_with_vite+preact.md +16 -3
- package/docs/ja/intlayer_with_vite+react.md +16 -3
- package/docs/ja/intlayer_with_vite+solid.md +16 -3
- package/docs/ja/intlayer_with_vite+svelte.md +16 -3
- package/docs/ja/intlayer_with_vite+vanilla.md +16 -3
- package/docs/ja/intlayer_with_vite+vue.md +16 -3
- package/docs/ja/introduction.md +0 -1
- package/docs/ja/readme.md +0 -1
- package/docs/ja/releases/v8.md +1 -5
- package/docs/ja/self_hosting.md +398 -223
- package/docs/ko/benchmark/nextjs.md +13 -13
- package/docs/ko/benchmark/solid.md +5 -5
- package/docs/ko/benchmark/svelte.md +4 -4
- package/docs/ko/benchmark/tanstack.md +14 -13
- package/docs/ko/benchmark/vue.md +5 -5
- package/docs/ko/chrome_extension.md +130 -0
- package/docs/ko/cli/index.md +6 -1
- package/docs/ko/cli/infra.md +162 -0
- package/docs/ko/cli/init.md +24 -1
- package/docs/ko/dictionary/html.md +173 -5
- package/docs/ko/dictionary/markdown.md +263 -1
- package/docs/ko/intlayer_with_analog.md +23 -1
- package/docs/ko/intlayer_with_angular_19.md +24 -1
- package/docs/ko/intlayer_with_angular_21.md +24 -1
- package/docs/ko/intlayer_with_astro.md +29 -21
- package/docs/ko/intlayer_with_astro_lit.md +47 -27
- package/docs/ko/intlayer_with_astro_preact.md +48 -27
- package/docs/ko/intlayer_with_astro_react.md +48 -27
- package/docs/ko/intlayer_with_astro_solid.md +48 -27
- package/docs/ko/intlayer_with_astro_svelte.md +47 -27
- package/docs/ko/intlayer_with_astro_vue.md +47 -27
- package/docs/ko/intlayer_with_react_router_v7.md +12 -1
- package/docs/ko/intlayer_with_remix_3.md +22 -1
- package/docs/ko/intlayer_with_solid_start.md +14 -7
- package/docs/ko/intlayer_with_svelte_kit.md +12 -1
- package/docs/ko/intlayer_with_tanstack+solid.md +13 -2
- package/docs/ko/intlayer_with_tanstack.md +13 -6
- package/docs/ko/intlayer_with_vite+lit.md +75 -3
- package/docs/ko/intlayer_with_vite+preact.md +16 -3
- package/docs/ko/intlayer_with_vite+react.md +16 -3
- package/docs/ko/intlayer_with_vite+solid.md +26 -16
- package/docs/ko/intlayer_with_vite+svelte.md +16 -3
- package/docs/ko/intlayer_with_vite+vanilla.md +16 -3
- package/docs/ko/intlayer_with_vite+vue.md +16 -3
- package/docs/ko/introduction.md +0 -1
- package/docs/ko/readme.md +0 -1
- package/docs/ko/releases/v8.md +1 -5
- package/docs/ko/self_hosting.md +411 -238
- package/docs/nl/intlayer_with_vite+lit.md +75 -3
- package/docs/nl/intlayer_with_vite+vanilla.md +16 -3
- package/docs/nl/introduction.md +0 -1
- package/docs/pl/benchmark/nextjs.md +13 -13
- package/docs/pl/benchmark/solid.md +5 -5
- package/docs/pl/benchmark/svelte.md +4 -4
- package/docs/pl/benchmark/tanstack.md +14 -13
- package/docs/pl/benchmark/vue.md +5 -5
- package/docs/pl/chrome_extension.md +130 -0
- package/docs/pl/cli/index.md +6 -1
- package/docs/pl/cli/infra.md +162 -0
- package/docs/pl/cli/init.md +24 -1
- package/docs/pl/dictionary/html.md +173 -5
- package/docs/pl/dictionary/markdown.md +263 -1
- package/docs/pl/intlayer_with_analog.md +23 -1
- package/docs/pl/intlayer_with_angular_19.md +24 -1
- package/docs/pl/intlayer_with_angular_21.md +24 -1
- package/docs/pl/intlayer_with_astro.md +29 -21
- package/docs/pl/intlayer_with_astro_lit.md +47 -27
- package/docs/pl/intlayer_with_astro_preact.md +48 -27
- package/docs/pl/intlayer_with_astro_react.md +48 -27
- package/docs/pl/intlayer_with_astro_solid.md +48 -27
- package/docs/pl/intlayer_with_astro_svelte.md +47 -27
- package/docs/pl/intlayer_with_astro_vue.md +47 -27
- package/docs/pl/intlayer_with_react_router_v7.md +12 -1
- package/docs/pl/intlayer_with_remix_3.md +22 -1
- package/docs/pl/intlayer_with_solid_start.md +14 -7
- package/docs/pl/intlayer_with_svelte_kit.md +12 -1
- package/docs/pl/intlayer_with_tanstack+solid.md +13 -2
- package/docs/pl/intlayer_with_tanstack.md +13 -6
- package/docs/pl/intlayer_with_vite+lit.md +75 -3
- package/docs/pl/intlayer_with_vite+preact.md +16 -3
- package/docs/pl/intlayer_with_vite+react.md +16 -3
- package/docs/pl/intlayer_with_vite+solid.md +16 -3
- package/docs/pl/intlayer_with_vite+svelte.md +16 -3
- package/docs/pl/intlayer_with_vite+vanilla.md +16 -3
- package/docs/pl/intlayer_with_vite+vue.md +16 -3
- package/docs/pl/introduction.md +0 -1
- package/docs/pl/readme.md +0 -1
- package/docs/pl/releases/v8.md +1 -5
- package/docs/pl/self_hosting.md +408 -233
- package/docs/pt/benchmark/nextjs.md +13 -13
- package/docs/pt/benchmark/solid.md +5 -5
- package/docs/pt/benchmark/svelte.md +4 -4
- package/docs/pt/benchmark/tanstack.md +14 -13
- package/docs/pt/benchmark/vue.md +5 -5
- package/docs/pt/chrome_extension.md +130 -0
- package/docs/pt/cli/index.md +6 -1
- package/docs/pt/cli/infra.md +162 -0
- package/docs/pt/cli/init.md +24 -1
- package/docs/pt/dictionary/html.md +173 -5
- package/docs/pt/dictionary/markdown.md +263 -1
- package/docs/pt/intlayer_with_analog.md +23 -1
- package/docs/pt/intlayer_with_angular_19.md +24 -1
- package/docs/pt/intlayer_with_angular_21.md +24 -1
- package/docs/pt/intlayer_with_astro.md +29 -21
- package/docs/pt/intlayer_with_astro_lit.md +47 -27
- package/docs/pt/intlayer_with_astro_preact.md +48 -27
- package/docs/pt/intlayer_with_astro_react.md +48 -27
- package/docs/pt/intlayer_with_astro_solid.md +48 -27
- package/docs/pt/intlayer_with_astro_svelte.md +47 -27
- package/docs/pt/intlayer_with_astro_vue.md +47 -27
- package/docs/pt/intlayer_with_react_router_v7.md +12 -1
- package/docs/pt/intlayer_with_remix_3.md +22 -1
- package/docs/pt/intlayer_with_solid_start.md +14 -7
- package/docs/pt/intlayer_with_svelte_kit.md +12 -1
- package/docs/pt/intlayer_with_tanstack+solid.md +13 -2
- package/docs/pt/intlayer_with_tanstack.md +13 -6
- package/docs/pt/intlayer_with_vite+lit.md +75 -3
- package/docs/pt/intlayer_with_vite+preact.md +16 -3
- package/docs/pt/intlayer_with_vite+react.md +16 -3
- package/docs/pt/intlayer_with_vite+solid.md +16 -3
- package/docs/pt/intlayer_with_vite+svelte.md +16 -3
- package/docs/pt/intlayer_with_vite+vanilla.md +16 -3
- package/docs/pt/intlayer_with_vite+vue.md +16 -3
- package/docs/pt/introduction.md +0 -1
- package/docs/pt/readme.md +0 -1
- package/docs/pt/releases/v8.md +1 -5
- package/docs/pt/self_hosting.md +399 -224
- package/docs/ru/benchmark/nextjs.md +13 -13
- package/docs/ru/benchmark/solid.md +5 -5
- package/docs/ru/benchmark/svelte.md +4 -4
- package/docs/ru/benchmark/tanstack.md +14 -13
- package/docs/ru/benchmark/vue.md +5 -5
- package/docs/ru/chrome_extension.md +130 -0
- package/docs/ru/cli/index.md +6 -1
- package/docs/ru/cli/infra.md +162 -0
- package/docs/ru/cli/init.md +24 -1
- package/docs/ru/dictionary/html.md +173 -5
- package/docs/ru/dictionary/markdown.md +263 -1
- package/docs/ru/intlayer_with_analog.md +23 -1
- package/docs/ru/intlayer_with_angular_19.md +24 -1
- package/docs/ru/intlayer_with_angular_21.md +24 -1
- package/docs/ru/intlayer_with_astro.md +35 -25
- package/docs/ru/intlayer_with_astro_lit.md +47 -27
- package/docs/ru/intlayer_with_astro_preact.md +48 -27
- package/docs/ru/intlayer_with_astro_react.md +48 -27
- package/docs/ru/intlayer_with_astro_solid.md +48 -27
- package/docs/ru/intlayer_with_astro_svelte.md +47 -27
- package/docs/ru/intlayer_with_astro_vue.md +47 -27
- package/docs/ru/intlayer_with_react_router_v7.md +12 -1
- package/docs/ru/intlayer_with_remix_3.md +22 -1
- package/docs/ru/intlayer_with_solid_start.md +14 -7
- package/docs/ru/intlayer_with_svelte_kit.md +12 -1
- package/docs/ru/intlayer_with_tanstack+solid.md +13 -2
- package/docs/ru/intlayer_with_tanstack.md +13 -6
- package/docs/ru/intlayer_with_vite+lit.md +75 -3
- package/docs/ru/intlayer_with_vite+preact.md +16 -3
- package/docs/ru/intlayer_with_vite+react.md +16 -3
- package/docs/ru/intlayer_with_vite+solid.md +16 -3
- package/docs/ru/intlayer_with_vite+svelte.md +16 -3
- package/docs/ru/intlayer_with_vite+vanilla.md +16 -3
- package/docs/ru/intlayer_with_vite+vue.md +16 -3
- package/docs/ru/introduction.md +0 -1
- package/docs/ru/readme.md +0 -1
- package/docs/ru/releases/v8.md +1 -5
- package/docs/ru/self_hosting.md +403 -228
- package/docs/tr/benchmark/nextjs.md +13 -13
- package/docs/tr/benchmark/solid.md +5 -5
- package/docs/tr/benchmark/svelte.md +4 -4
- package/docs/tr/benchmark/tanstack.md +14 -13
- package/docs/tr/benchmark/vue.md +5 -5
- package/docs/tr/chrome_extension.md +130 -0
- package/docs/tr/cli/index.md +6 -1
- package/docs/tr/cli/infra.md +162 -0
- package/docs/tr/cli/init.md +24 -1
- package/docs/tr/dictionary/html.md +173 -5
- package/docs/tr/dictionary/markdown.md +263 -1
- package/docs/tr/intlayer_with_analog.md +23 -1
- package/docs/tr/intlayer_with_angular_19.md +24 -1
- package/docs/tr/intlayer_with_angular_21.md +24 -1
- package/docs/tr/intlayer_with_astro.md +35 -25
- package/docs/tr/intlayer_with_astro_lit.md +48 -28
- package/docs/tr/intlayer_with_astro_preact.md +49 -28
- package/docs/tr/intlayer_with_astro_react.md +49 -28
- package/docs/tr/intlayer_with_astro_solid.md +49 -28
- package/docs/tr/intlayer_with_astro_svelte.md +48 -28
- package/docs/tr/intlayer_with_astro_vue.md +48 -28
- package/docs/tr/intlayer_with_react_router_v7.md +12 -1
- package/docs/tr/intlayer_with_remix_3.md +22 -1
- package/docs/tr/intlayer_with_solid_start.md +14 -7
- package/docs/tr/intlayer_with_svelte_kit.md +12 -1
- package/docs/tr/intlayer_with_tanstack+solid.md +13 -2
- package/docs/tr/intlayer_with_tanstack.md +13 -6
- package/docs/tr/intlayer_with_vite+lit.md +75 -3
- package/docs/tr/intlayer_with_vite+preact.md +16 -3
- package/docs/tr/intlayer_with_vite+react.md +16 -3
- package/docs/tr/intlayer_with_vite+solid.md +16 -3
- package/docs/tr/intlayer_with_vite+svelte.md +16 -3
- package/docs/tr/intlayer_with_vite+vanilla.md +16 -3
- package/docs/tr/intlayer_with_vite+vue.md +16 -3
- package/docs/tr/introduction.md +0 -1
- package/docs/tr/readme.md +0 -1
- package/docs/tr/releases/v8.md +1 -5
- package/docs/tr/self_hosting.md +410 -234
- package/docs/uk/benchmark/nextjs.md +13 -13
- package/docs/uk/benchmark/solid.md +5 -5
- package/docs/uk/benchmark/svelte.md +4 -4
- package/docs/uk/benchmark/tanstack.md +14 -13
- package/docs/uk/benchmark/vue.md +5 -5
- package/docs/uk/chrome_extension.md +130 -0
- package/docs/uk/cli/index.md +6 -1
- package/docs/uk/cli/infra.md +162 -0
- package/docs/uk/cli/init.md +24 -1
- package/docs/uk/dictionary/html.md +173 -5
- package/docs/uk/dictionary/markdown.md +263 -1
- package/docs/uk/intlayer_with_analog.md +23 -1
- package/docs/uk/intlayer_with_angular_19.md +24 -1
- package/docs/uk/intlayer_with_angular_21.md +24 -1
- package/docs/uk/intlayer_with_astro.md +35 -25
- package/docs/uk/intlayer_with_astro_lit.md +47 -27
- package/docs/uk/intlayer_with_astro_preact.md +48 -27
- package/docs/uk/intlayer_with_astro_react.md +48 -27
- package/docs/uk/intlayer_with_astro_solid.md +48 -27
- package/docs/uk/intlayer_with_astro_svelte.md +47 -27
- package/docs/uk/intlayer_with_astro_vue.md +47 -27
- package/docs/uk/intlayer_with_react_router_v7.md +12 -1
- package/docs/uk/intlayer_with_remix_3.md +22 -1
- package/docs/uk/intlayer_with_solid_start.md +14 -7
- package/docs/uk/intlayer_with_svelte_kit.md +12 -1
- package/docs/uk/intlayer_with_tanstack+solid.md +13 -2
- package/docs/uk/intlayer_with_tanstack.md +13 -6
- package/docs/uk/intlayer_with_vite+lit.md +75 -3
- package/docs/uk/intlayer_with_vite+preact.md +16 -3
- package/docs/uk/intlayer_with_vite+react.md +16 -3
- package/docs/uk/intlayer_with_vite+solid.md +16 -3
- package/docs/uk/intlayer_with_vite+svelte.md +16 -3
- package/docs/uk/intlayer_with_vite+vanilla.md +16 -3
- package/docs/uk/intlayer_with_vite+vue.md +16 -3
- package/docs/uk/introduction.md +0 -1
- package/docs/uk/readme.md +0 -1
- package/docs/uk/releases/v8.md +1 -5
- package/docs/uk/self_hosting.md +413 -238
- package/docs/ur/intlayer_with_vite+lit.md +75 -3
- package/docs/ur/intlayer_with_vite+vanilla.md +16 -3
- package/docs/ur/introduction.md +0 -1
- package/docs/vi/benchmark/nextjs.md +13 -13
- package/docs/vi/benchmark/solid.md +5 -5
- package/docs/vi/benchmark/svelte.md +4 -4
- package/docs/vi/benchmark/tanstack.md +14 -13
- package/docs/vi/benchmark/vue.md +5 -5
- package/docs/vi/chrome_extension.md +130 -0
- package/docs/vi/cli/index.md +6 -1
- package/docs/vi/cli/infra.md +162 -0
- package/docs/vi/cli/init.md +24 -1
- package/docs/vi/dictionary/html.md +173 -5
- package/docs/vi/dictionary/markdown.md +263 -1
- package/docs/vi/intlayer_with_analog.md +23 -1
- package/docs/vi/intlayer_with_angular_19.md +24 -1
- package/docs/vi/intlayer_with_angular_21.md +24 -1
- package/docs/vi/intlayer_with_astro.md +35 -25
- package/docs/vi/intlayer_with_astro_lit.md +47 -27
- package/docs/vi/intlayer_with_astro_preact.md +48 -27
- package/docs/vi/intlayer_with_astro_react.md +48 -27
- package/docs/vi/intlayer_with_astro_solid.md +48 -27
- package/docs/vi/intlayer_with_astro_svelte.md +47 -27
- package/docs/vi/intlayer_with_astro_vue.md +47 -27
- package/docs/vi/intlayer_with_react_router_v7.md +12 -1
- package/docs/vi/intlayer_with_remix_3.md +22 -1
- package/docs/vi/intlayer_with_solid_start.md +14 -7
- package/docs/vi/intlayer_with_svelte_kit.md +12 -1
- package/docs/vi/intlayer_with_tanstack+solid.md +13 -2
- package/docs/vi/intlayer_with_tanstack.md +13 -6
- package/docs/vi/intlayer_with_vite+lit.md +75 -3
- package/docs/vi/intlayer_with_vite+preact.md +16 -3
- package/docs/vi/intlayer_with_vite+react.md +16 -3
- package/docs/vi/intlayer_with_vite+solid.md +16 -3
- package/docs/vi/intlayer_with_vite+svelte.md +16 -3
- package/docs/vi/intlayer_with_vite+vanilla.md +16 -3
- package/docs/vi/intlayer_with_vite+vue.md +16 -3
- package/docs/vi/introduction.md +0 -1
- package/docs/vi/readme.md +0 -1
- package/docs/vi/releases/v8.md +1 -5
- package/docs/vi/self_hosting.md +408 -234
- package/docs/zh/benchmark/nextjs.md +13 -13
- package/docs/zh/benchmark/solid.md +5 -5
- package/docs/zh/benchmark/svelte.md +4 -4
- package/docs/zh/benchmark/tanstack.md +14 -13
- package/docs/zh/benchmark/vue.md +5 -5
- package/docs/zh/chrome_extension.md +130 -0
- package/docs/zh/cli/index.md +6 -1
- package/docs/zh/cli/infra.md +162 -0
- package/docs/zh/cli/init.md +24 -1
- package/docs/zh/dictionary/html.md +172 -5
- package/docs/zh/dictionary/markdown.md +262 -1
- package/docs/zh/intlayer_with_analog.md +23 -1
- package/docs/zh/intlayer_with_angular_19.md +24 -1
- package/docs/zh/intlayer_with_angular_21.md +24 -1
- package/docs/zh/intlayer_with_astro.md +29 -21
- package/docs/zh/intlayer_with_astro_lit.md +47 -27
- package/docs/zh/intlayer_with_astro_preact.md +48 -27
- package/docs/zh/intlayer_with_astro_react.md +48 -27
- package/docs/zh/intlayer_with_astro_solid.md +48 -27
- package/docs/zh/intlayer_with_astro_svelte.md +47 -27
- package/docs/zh/intlayer_with_astro_vue.md +47 -27
- package/docs/zh/intlayer_with_react_router_v7.md +12 -1
- package/docs/zh/intlayer_with_remix_3.md +22 -1
- package/docs/zh/intlayer_with_solid_start.md +14 -7
- package/docs/zh/intlayer_with_svelte_kit.md +12 -1
- package/docs/zh/intlayer_with_tanstack+solid.md +13 -2
- package/docs/zh/intlayer_with_tanstack.md +13 -6
- package/docs/zh/intlayer_with_vite+lit.md +75 -3
- package/docs/zh/intlayer_with_vite+preact.md +16 -3
- package/docs/zh/intlayer_with_vite+react.md +16 -3
- package/docs/zh/intlayer_with_vite+solid.md +16 -3
- package/docs/zh/intlayer_with_vite+svelte.md +16 -3
- package/docs/zh/intlayer_with_vite+vanilla.md +16 -3
- package/docs/zh/intlayer_with_vite+vue.md +16 -3
- package/docs/zh/introduction.md +0 -1
- package/docs/zh/readme.md +0 -1
- package/docs/zh/releases/v8.md +1 -5
- package/docs/zh/self_hosting.md +410 -237
- package/docs/zh-TW/introduction.md +0 -1
- package/legal/ar/privacy_notice.md +9 -3
- package/legal/de/privacy_notice.md +9 -3
- package/legal/en/privacy_notice.md +10 -3
- package/legal/en-GB/privacy_notice.md +9 -3
- package/legal/es/privacy_notice.md +9 -3
- package/legal/fr/privacy_notice.md +9 -3
- package/legal/hi/privacy_notice.md +9 -3
- package/legal/id/privacy_notice.md +9 -3
- package/legal/it/privacy_notice.md +9 -3
- package/legal/ja/privacy_notice.md +9 -3
- package/legal/ko/privacy_notice.md +9 -3
- package/legal/pl/privacy_notice.md +9 -3
- package/legal/pt/privacy_notice.md +9 -3
- package/legal/ru/privacy_notice.md +9 -3
- package/legal/tr/privacy_notice.md +9 -3
- package/legal/uk/privacy_notice.md +9 -3
- package/legal/vi/privacy_notice.md +9 -3
- package/legal/zh/privacy_notice.md +9 -3
- package/package.json +6 -6
- package/src/generated/docs.entry.ts +40 -40
- package/docs/ar/intlayer_with_astro_vanilla.md +0 -709
- package/docs/ar/roadmap.md +0 -321
- package/docs/de/intlayer_with_astro_vanilla.md +0 -705
- package/docs/de/roadmap.md +0 -322
- package/docs/en/intlayer_with_astro_vanilla.md +0 -706
- package/docs/en/roadmap.md +0 -325
- package/docs/en-GB/intlayer_with_astro_vanilla.md +0 -709
- package/docs/en-GB/roadmap.md +0 -322
- package/docs/es/intlayer_with_astro_vanilla.md +0 -701
- package/docs/es/roadmap.md +0 -322
- package/docs/fr/intlayer_with_astro_vanilla.md +0 -701
- package/docs/fr/roadmap.md +0 -322
- package/docs/hi/intlayer_with_astro_vanilla.md +0 -720
- package/docs/hi/roadmap.md +0 -322
- package/docs/id/intlayer_with_astro_vanilla.md +0 -705
- package/docs/id/roadmap.md +0 -325
- package/docs/it/intlayer_with_astro_vanilla.md +0 -705
- package/docs/it/roadmap.md +0 -322
- package/docs/ja/intlayer_with_astro_vanilla.md +0 -708
- package/docs/ja/roadmap.md +0 -322
- package/docs/ko/intlayer_with_astro_vanilla.md +0 -720
- package/docs/ko/roadmap.md +0 -322
- package/docs/pl/intlayer_with_astro_vanilla.md +0 -705
- package/docs/pl/roadmap.md +0 -325
- package/docs/pt/intlayer_with_astro_vanilla.md +0 -705
- package/docs/pt/roadmap.md +0 -322
- package/docs/ru/intlayer_with_astro_vanilla.md +0 -716
- package/docs/ru/roadmap.md +0 -322
- package/docs/tr/intlayer_with_astro_vanilla.md +0 -705
- package/docs/tr/roadmap.md +0 -325
- package/docs/uk/intlayer_with_astro_vanilla.md +0 -705
- package/docs/uk/roadmap.md +0 -325
- package/docs/vi/intlayer_with_astro_vanilla.md +0 -705
- package/docs/vi/roadmap.md +0 -325
- package/docs/zh/intlayer_with_astro_vanilla.md +0 -704
- package/docs/zh/roadmap.md +0 -322
package/docs/fr/self_hosting.md
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
---
|
|
2
2
|
createdAt: 2026-06-30
|
|
3
|
-
updatedAt: 2026-
|
|
3
|
+
updatedAt: 2026-09-21
|
|
4
4
|
title: Auto-hébergement d'Intlayer
|
|
5
|
-
description: Exécutez
|
|
5
|
+
description: "Exécutez Intlayer sur votre propre infrastructure : sous forme d'application de bureau, d'un conteneur Docker tout-en-un ou d'une stack Docker Compose évolutive. Aucun compte Intlayer Cloud requis."
|
|
6
6
|
keywords:
|
|
7
7
|
- Auto-hébergement
|
|
8
8
|
- Docker
|
|
9
9
|
- Docker Compose
|
|
10
|
+
- Application de bureau
|
|
10
11
|
- Intlayer
|
|
11
12
|
- CMS
|
|
12
13
|
- Installation
|
|
@@ -19,212 +20,455 @@ author: aymericzip
|
|
|
19
20
|
|
|
20
21
|
# Auto-hébergement d'Intlayer
|
|
21
22
|
|
|
22
|
-
Intlayer peut fonctionner
|
|
23
|
+
Intlayer peut fonctionner sur votre propre infrastructure, aucun compte Intlayer Cloud requis. Trois configurations sont disponibles, toutes gérées par le même installateur (`install.sh`, `install.ps1` sur Windows ou `npx intlayer init infra`) :
|
|
23
24
|
|
|
24
|
-
|
|
25
|
+
| Configuration | Ce que c'est | Quand la choisir |
|
|
26
|
+
| ------------------------- | --------------------------------------------------------------------------------------- | -------------------------------------------- |
|
|
27
|
+
| **Application de bureau** | Tableau de bord natif pour macOS, Linux et Windows | Un client local, rien à héberger |
|
|
28
|
+
| **Docker tout-en-un** | Tableau de bord, API, MongoDB, Redis et MinIO dans un **seul conteneur** | Essais et petites installations uniques |
|
|
29
|
+
| **Docker Compose** | **Un conteneur par service**, chaque magasin de données remplaçable par une offre gérée | Production, montée en charge, bases managées |
|
|
30
|
+
|
|
31
|
+
## Table des matières
|
|
32
|
+
|
|
33
|
+
<TOC/>
|
|
34
|
+
|
|
35
|
+
## Images et paquets publiés
|
|
36
|
+
|
|
37
|
+
| Artefact | Docker Hub | Miroir GHCR | Contenu |
|
|
38
|
+
| -------------------------- | ------------------------------------------------------------------------- | ------------------------------------------ | -------------------------------------------------------------------------------- |
|
|
39
|
+
| Conteneur tout-en-un | [`intlayer/cms-all`](https://hub.docker.com/r/intlayer/cms-all) | `ghcr.io/aymericzip/intlayer/cms-all` | app + backend + MongoDB 8 + Redis + MinIO + Chromium |
|
|
40
|
+
| Tableau de bord (frontend) | [`intlayer/cms-frontend`](https://hub.docker.com/r/intlayer/cms-frontend) | `ghcr.io/aymericzip/intlayer/cms-frontend` | Tableau de bord TanStack Start sur Bun |
|
|
41
|
+
| API (backend) | [`intlayer/cms-backend`](https://hub.docker.com/r/intlayer/cms-backend) | `ghcr.io/aymericzip/intlayer/cms-backend` | API REST Fastify sur Bun + Chromium |
|
|
42
|
+
| Application de bureau | [Releases GitHub](https://github.com/aymericzip/intlayer/releases/latest) | n/a | `.dmg` (macOS), `.deb` / `.rpm` / `.AppImage` (Linux), `.exe` / `.msi` (Windows) |
|
|
43
|
+
|
|
44
|
+
Les trois images sont construites à partir du même [`docker/selfhost/Dockerfile`](https://github.com/aymericzip/intlayer/tree/main/docker/selfhost) et publiées à chaque version. La stack Compose télécharge également les images officielles `mongo:8`, `redis:8-alpine` et `quay.io/minio/minio`.
|
|
45
|
+
|
|
46
|
+
## Configuration
|
|
47
|
+
|
|
48
|
+
L'installateur vous demande quelle configuration vous souhaitez, vérifie les prérequis (en proposant d'installer Docker), écrit le fichier d'environnement avec les secrets déjà générés et télécharge les images. Il ne démarre rien de lui-même : les modes Docker nécessitent d'abord un service d'e-mail, il termine donc en affichant la commande à exécuter. Le réexécuter est sans danger : un fichier d'environnement existant n'est jamais écrasé, ce qui en fait également le moyen de mise à niveau.
|
|
49
|
+
|
|
50
|
+
<Tabs group="mode">
|
|
51
|
+
<Tab label="Application de bureau" value="desktop">
|
|
52
|
+
|
|
53
|
+
Le tableau de bord Intlayer sous forme d'application native, conçu avec Tauri. Il se connecte à Intlayer Cloud (`https://app.intlayer.org`), il n'y a donc rien à héberger. C'est le bon choix lorsque vous préférez un client local plutôt qu'un onglet de navigateur.
|
|
54
|
+
|
|
55
|
+
### Installation
|
|
56
|
+
|
|
57
|
+
L'installateur télécharge le paquet pour votre système d'exploitation et votre processeur, puis l'ouvre (macOS), l'installe (`dpkg` / `rpm` sous Linux) ou lance l'assistant d'installation (Windows). Vous pouvez également le télécharger manuellement depuis la [page des releases](https://github.com/aymericzip/intlayer/releases/latest).
|
|
58
|
+
|
|
59
|
+
<Tabs group="os">
|
|
60
|
+
<Tab label="macOS / Linux" value="unix">
|
|
25
61
|
|
|
26
62
|
```sh
|
|
27
|
-
curl -fsSL https://intlayer.org/install.sh | sh
|
|
63
|
+
curl -fsSL https://intlayer.org/install.sh | sh -s -- --mode desktop
|
|
28
64
|
```
|
|
29
65
|
|
|
30
|
-
|
|
66
|
+
</Tab>
|
|
67
|
+
<Tab label="Windows" value="windows">
|
|
31
68
|
|
|
32
|
-
|
|
69
|
+
Dans PowerShell :
|
|
33
70
|
|
|
34
|
-
|
|
71
|
+
```powershell
|
|
72
|
+
$env:INTLAYER_MODE = "desktop"; irm https://intlayer.org/install.ps1 | iex
|
|
73
|
+
```
|
|
35
74
|
|
|
36
|
-
|
|
75
|
+
</Tab>
|
|
76
|
+
<Tab label="CLI Intlayer" value="cli">
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
npx intlayer init infra --mode desktop
|
|
80
|
+
```
|
|
37
81
|
|
|
38
|
-
|
|
82
|
+
</Tab>
|
|
83
|
+
</Tabs>
|
|
84
|
+
|
|
85
|
+
### Prérequis
|
|
86
|
+
|
|
87
|
+
- **Node.js** : l'application intègre le serveur du tableau de bord et le démarre avec le binaire `node` de la machine. Installez-le depuis [nodejs.org](https://nodejs.org) si l'application ne démarre pas.
|
|
88
|
+
|
|
89
|
+
> La version publiée pour ordinateur communique avec le backend Intlayer Cloud. La pointer vers un backend auto-hébergé nécessite de reconstruire l'application avec `VITE_BACKEND_URL` configuré sur votre API, voir [Limitations](#limitations).
|
|
90
|
+
|
|
91
|
+
</Tab>
|
|
92
|
+
<Tab label="Docker tout-en-un" value="docker">
|
|
93
|
+
|
|
94
|
+
Tout s'exécute à l'intérieur du conteneur unique `intlayer/cms-all`, supervisé par [s6-overlay](https://github.com/just-containers/s6-overlay), avec chaque magasin de données persisté sous un seul volume.
|
|
39
95
|
|
|
40
96
|
```
|
|
41
97
|
┌─────────────────────────────┐
|
|
42
98
|
browser ──────▶ │ app (TanStack Start) :3000│ ──┐
|
|
43
|
-
|
|
99
|
+
(localhost) └─────────────────────────────┘ │ VITE_BACKEND_URL (baked at build)
|
|
44
100
|
┌─────────────────────────────┐ │
|
|
45
101
|
│ backend (Fastify/Bun) :3100│ ◀─┘
|
|
46
102
|
└──────────────┬──────────────┘
|
|
47
|
-
|
|
48
|
-
▼ ▼ ▼
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
(console) (web UI)
|
|
103
|
+
┌──────────┬─────────┼──────────────┐
|
|
104
|
+
▼ ▼ ▼ ▼
|
|
105
|
+
mongo:27017 redis:6379 minio:9000 Chromium
|
|
106
|
+
/data/mongo /data/redis /data/minio (in-image)
|
|
107
|
+
(1-node RS) minio:9001
|
|
53
108
|
```
|
|
54
109
|
|
|
55
|
-
|
|
110
|
+
| Service | Port(s) hôte | Rôle |
|
|
111
|
+
| ----------- | ----------------------------- | -------------------------------------------------------- |
|
|
112
|
+
| **app** | `3000` | Tableau de bord (interface utilisateur CMS) |
|
|
113
|
+
| **backend** | `3100` | API REST (point de terminaison `/health`) |
|
|
114
|
+
| **mongo** | interne | MongoDB 8, ensemble de réplicas à nœud unique `rs0` |
|
|
115
|
+
| **redis** | interne | Files d'attente de tâches (BullMQ) et mise en cache |
|
|
116
|
+
| **minio** | `9000` (S3), `9001` (console) | Stockage d'objets compatible S3 pour avatars et captures |
|
|
56
117
|
|
|
57
|
-
|
|
118
|
+
L'ordre de démarrage est géré par les dépendances s6 (`mongod` → init replica-set, `minio` → création du bucket, puis `backend`, puis `app`), et les services redémarrent en cas d'arrêt, de sorte que le premier démarrage récupère tout seul.
|
|
58
119
|
|
|
59
|
-
|
|
60
|
-
- Ports `3000`, `3100`, `8025`, `9000` et `9001` disponibles sur l'hôte.
|
|
61
|
-
- Un hôte Linux ou macOS (ou WSL2 sur Windows).
|
|
120
|
+
### Prérequis
|
|
62
121
|
|
|
63
|
-
|
|
122
|
+
- **Docker** ≥ 24 : l'installateur propose de l'installer (via [get.docker.com](https://get.docker.com) sous Linux, Homebrew sur macOS). Sous Windows, installez d'abord [Docker Desktop](https://docs.docker.com/desktop/setup/install/windows-install/) (backend WSL 2).
|
|
123
|
+
- Ports `3000`, `3100`, `9000` et `9001` libres sur l'hôte. MinIO `9000` doit rester accessible par le navigateur, qui charge les ressources directement depuis `S3_PUBLIC_URL`.
|
|
124
|
+
- Un service d'envoi d'e-mails : une clé API [Resend](https://resend.com) ou un relais SMTP.
|
|
64
125
|
|
|
65
|
-
|
|
126
|
+
### 1. Installation
|
|
66
127
|
|
|
67
|
-
|
|
128
|
+
Écrit `./intlayer.env` avec `BETTER_AUTH_SECRET` et `S3_SECRET_ACCESS_KEY` générés, et télécharge `intlayer/cms-all:latest`.
|
|
129
|
+
|
|
130
|
+
<Tabs group="os">
|
|
131
|
+
<Tab label="macOS / Linux" value="unix">
|
|
68
132
|
|
|
69
133
|
```sh
|
|
70
|
-
curl -fsSL https://intlayer.org/install.sh | sh
|
|
134
|
+
curl -fsSL https://intlayer.org/install.sh | sh -s -- --mode docker
|
|
71
135
|
```
|
|
72
136
|
|
|
73
|
-
|
|
137
|
+
</Tab>
|
|
138
|
+
<Tab label="Windows" value="windows">
|
|
74
139
|
|
|
75
|
-
|
|
140
|
+
Dans PowerShell :
|
|
76
141
|
|
|
77
|
-
|
|
142
|
+
```powershell
|
|
143
|
+
$env:INTLAYER_MODE = "docker"; irm https://intlayer.org/install.ps1 | iex
|
|
144
|
+
```
|
|
78
145
|
|
|
79
|
-
|
|
146
|
+
</Tab>
|
|
147
|
+
<Tab label="CLI Intlayer" value="cli">
|
|
80
148
|
|
|
81
|
-
```
|
|
82
|
-
|
|
83
|
-
DB_MDP=<atlas-password>
|
|
84
|
-
DB_CLUSTER=<cluster>.xxxxx.mongodb.net
|
|
85
|
-
RESEND_API_KEY=<your-resend-key>
|
|
149
|
+
```bash
|
|
150
|
+
npx intlayer init infra --mode docker
|
|
86
151
|
```
|
|
87
152
|
|
|
88
|
-
|
|
153
|
+
</Tab>
|
|
154
|
+
</Tabs>
|
|
155
|
+
|
|
156
|
+
### 2. Configurer un service d'e-mail
|
|
89
157
|
|
|
90
|
-
|
|
158
|
+
Ouvrez `intlayer.env` et renseignez Resend **ou** SMTP (détails dans [Service d'e-mail global](#global-mailer)) :
|
|
91
159
|
|
|
92
|
-
|
|
160
|
+
```sh fileName="intlayer.env"
|
|
161
|
+
# Option A : Resend
|
|
162
|
+
RESEND_API_KEY=<votre-clé-resend>
|
|
163
|
+
|
|
164
|
+
# Option B : SMTP (prend le relais dès que MAIL_SMTP_HOST est défini)
|
|
165
|
+
MAIL_SMTP_HOST=smtp.example.com
|
|
166
|
+
MAIL_SMTP_PORT=587
|
|
167
|
+
MAIL_SMTP_USER=<utilisateur>
|
|
168
|
+
MAIL_SMTP_PASSWORD=<mot-de-passe>
|
|
169
|
+
MAIL_FROM=Intlayer <no-reply@example.com>
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
### 3. Démarrer
|
|
93
173
|
|
|
94
|
-
|
|
174
|
+
Voici la commande affichée par l'installateur :
|
|
175
|
+
|
|
176
|
+
<Tabs group="os">
|
|
177
|
+
<Tab label="macOS / Linux" value="unix">
|
|
95
178
|
|
|
96
179
|
```sh
|
|
97
180
|
docker run -d --name intlayer \
|
|
98
181
|
--restart unless-stopped \
|
|
99
|
-
-p 3000:3000 \
|
|
100
|
-
-p 3100:3100 \
|
|
101
|
-
-p 9000:9000 \
|
|
102
|
-
-p 9001:9001 \
|
|
182
|
+
-p 3000:3000 -p 3100:3100 -p 9000:9000 -p 9001:9001 \
|
|
103
183
|
-v intlayer-data:/data \
|
|
104
184
|
--env-file ./intlayer.env \
|
|
105
|
-
|
|
185
|
+
intlayer/cms-all:latest
|
|
106
186
|
```
|
|
107
187
|
|
|
108
|
-
|
|
188
|
+
</Tab>
|
|
189
|
+
<Tab label="Windows" value="windows">
|
|
190
|
+
|
|
191
|
+
```powershell
|
|
192
|
+
docker run -d --name intlayer `
|
|
193
|
+
--restart unless-stopped `
|
|
194
|
+
-p 3000:3000 -p 3100:3100 -p 9000:9000 -p 9001:9001 `
|
|
195
|
+
-v intlayer-data:/data `
|
|
196
|
+
--env-file ./intlayer.env `
|
|
197
|
+
intlayer/cms-all:latest
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
</Tab>
|
|
201
|
+
<Tab label="CLI Intlayer" value="cli">
|
|
202
|
+
|
|
203
|
+
Le CLI exécute l'installateur, qui affiche la commande `docker run …` montrée dans les autres onglets. Copiez-la dans votre terminal une fois le service de messagerie configuré.
|
|
204
|
+
|
|
205
|
+
</Tab>
|
|
206
|
+
</Tabs>
|
|
109
207
|
|
|
110
|
-
|
|
208
|
+
Ouvrez **http://localhost:3000** et suivez la [Configuration initiale](#first-run-setup). Le premier démarrage initialise l'ensemble de réplicas et le bucket, laissez-lui une minute.
|
|
111
209
|
|
|
112
|
-
###
|
|
210
|
+
### Sauvegarde et mise à niveau
|
|
113
211
|
|
|
114
|
-
|
|
212
|
+
Tout l'état réside dans le volume `intlayer-data` (`/data/mongo`, `/data/redis`, `/data/minio`).
|
|
115
213
|
|
|
116
214
|
```sh
|
|
117
|
-
|
|
215
|
+
# Sauvegarde (arrêtez d'abord le conteneur pour que les fichiers de MongoDB soient cohérents)
|
|
216
|
+
docker stop intlayer
|
|
217
|
+
docker run --rm -v intlayer-data:/data -v "$(pwd)":/backup busybox tar czf /backup/intlayer-data.tar.gz /data
|
|
218
|
+
docker start intlayer
|
|
219
|
+
|
|
220
|
+
# Restauration
|
|
221
|
+
docker run --rm -v intlayer-data:/data -v "$(pwd)":/backup busybox tar xzf /backup/intlayer-data.tar.gz -C /
|
|
118
222
|
```
|
|
119
223
|
|
|
120
|
-
|
|
121
|
-
| ------------------------- | --------------------------------------------- | --------------------------------- |
|
|
122
|
-
| `INTLAYER_IMAGE` | `ghcr.io/aymericzip/intlayer-selfhost:latest` | Image à télécharger |
|
|
123
|
-
| `INTLAYER_ENV_FILE` | `./intlayer.env` | Où écrire le fichier env |
|
|
124
|
-
| `INTLAYER_CONTAINER_NAME` | `intlayer` | Nom du conteneur |
|
|
125
|
-
| `INTLAYER_DATA_VOLUME` | `intlayer-data` | Volume nommé monté à `/data` |
|
|
126
|
-
| `INTLAYER_APP_PORT` | `3000` | Port hôte pour le tableau de bord |
|
|
127
|
-
| `INTLAYER_API_PORT` | `3100` | Port hôte pour l'API |
|
|
128
|
-
| `INTLAYER_S3_PORT` | `9000` | Port hôte pour l'API S3 MinIO |
|
|
129
|
-
| `INTLAYER_CONSOLE_PORT` | `9001` | Port hôte pour la console MinIO |
|
|
224
|
+
Pour mettre à niveau, réexécutez l'installateur (il télécharge la dernière image et conserve `intlayer.env`), puis faites `docker rm -f intlayer` et relancez la commande de démarrage. Pour utiliser une base MongoDB gérée à la place de celle intégrée, définissez `MONGODB_URI` dans `intlayer.env`.
|
|
130
225
|
|
|
131
|
-
>
|
|
226
|
+
</Tab>
|
|
227
|
+
<Tab label="Docker Compose" value="compose">
|
|
132
228
|
|
|
133
|
-
|
|
229
|
+
Un conteneur par service sur un réseau privé Compose. Le tableau de bord et l'API utilisent les images publiées `intlayer/cms-frontend` et `intlayer/cms-backend` ; les magasins de données utilisent les images officielles `mongo`, `redis` et `minio`.
|
|
230
|
+
|
|
231
|
+
```
|
|
232
|
+
┌───────────────────┐
|
|
233
|
+
browser ──────▶ │ app :3000 │ ── SSR ──▶ http://backend:3100
|
|
234
|
+
(localhost) └───────────────────┘
|
|
235
|
+
┌───────────────────┐
|
|
236
|
+
browser ──────▶ │ backend :3100 │
|
|
237
|
+
(localhost) └─────────┬─────────┘
|
|
238
|
+
┌───────────────┼───────────────┐
|
|
239
|
+
▼ ▼ ▼
|
|
240
|
+
mongo:27017 redis:6379 minio:9000 ◀── browser (assets)
|
|
241
|
+
(1-node RS) minio:9001
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
| Service | Image | Rôle |
|
|
245
|
+
| ------------ | ----------------------- | ------------------------------------------------------------------------------- |
|
|
246
|
+
| `app` | `intlayer/cms-frontend` | Tableau de bord sur `:3000` ; attend que le backend soit sain |
|
|
247
|
+
| `backend` | `intlayer/cms-backend` | API sur `:3100` avec Chromium ; attend Mongo, Redis et le bucket MinIO |
|
|
248
|
+
| `mongo` | `mongo:8` | Ensemble de réplicas à nœud unique `rs0`, initialisé par son propre healthcheck |
|
|
249
|
+
| `redis` | `redis:8-alpine` | Files d'attente et cache, persistance append-only |
|
|
250
|
+
| `minio` | `quay.io/minio/minio` | Stockage S3 sur `:9000`, console sur `:9001` |
|
|
251
|
+
| `minio-init` | `quay.io/minio/mc` | Tâche ponctuelle : crée le bucket et sa stratégie de téléchargement anonyme |
|
|
252
|
+
|
|
253
|
+
Les données sont conservées dans les volumes `intlayer_mongo-data`, `intlayer_redis-data` et `intlayer_minio-data`. Le câblage des services (`MONGODB_URI`, `REDIS_URL`, `S3_ENDPOINT`, l'URL interne du backend utilisée par le rendu côté serveur) est fixé dans le fichier compose et prévaut sur `.env`, qui ne contient que les secrets et intégrations optionnelles.
|
|
254
|
+
|
|
255
|
+
### Prérequis
|
|
256
|
+
|
|
257
|
+
- **Docker** ≥ 24 avec le plugin Compose : l'installateur propose de l'installer sous Linux et macOS. Sous Windows, installez d'abord [Docker Desktop](https://docs.docker.com/desktop/setup/install/windows-install/) (backend WSL 2).
|
|
258
|
+
- Ports `3000`, `3100`, `9000` et `9001` libres sur l'hôte.
|
|
259
|
+
- Un service d'envoi d'e-mails : une clé API [Resend](https://resend.com) ou un relais SMTP.
|
|
260
|
+
|
|
261
|
+
### 1. Installation
|
|
262
|
+
|
|
263
|
+
Écrit `docker-compose.yml` et un `.env` avec les secrets générés dans `./intlayer/`, et télécharge les images.
|
|
264
|
+
|
|
265
|
+
<Tabs group="os">
|
|
266
|
+
<Tab label="macOS / Linux" value="unix">
|
|
267
|
+
|
|
268
|
+
```sh
|
|
269
|
+
curl -fsSL https://intlayer.org/install.sh | sh -s -- --mode compose
|
|
270
|
+
```
|
|
271
|
+
|
|
272
|
+
Ou manuellement :
|
|
273
|
+
|
|
274
|
+
```sh
|
|
275
|
+
mkdir intlayer && cd intlayer
|
|
276
|
+
curl -fsSLO https://raw.githubusercontent.com/aymericzip/intlayer/main/docker/selfhost/docker-compose.yml
|
|
277
|
+
curl -fsSL https://raw.githubusercontent.com/aymericzip/intlayer/main/docker/selfhost/.env.template -o .env
|
|
278
|
+
# renseignez BETTER_AUTH_SECRET et S3_SECRET_ACCESS_KEY (openssl rand -hex 32)
|
|
279
|
+
```
|
|
280
|
+
|
|
281
|
+
</Tab>
|
|
282
|
+
<Tab label="Windows" value="windows">
|
|
283
|
+
|
|
284
|
+
Dans PowerShell :
|
|
285
|
+
|
|
286
|
+
```powershell
|
|
287
|
+
$env:INTLAYER_MODE = "compose"; irm https://intlayer.org/install.ps1 | iex
|
|
288
|
+
```
|
|
289
|
+
|
|
290
|
+
Ou manuellement :
|
|
291
|
+
|
|
292
|
+
```powershell
|
|
293
|
+
mkdir intlayer; cd intlayer
|
|
294
|
+
irm https://raw.githubusercontent.com/aymericzip/intlayer/main/docker/selfhost/docker-compose.yml -OutFile docker-compose.yml
|
|
295
|
+
irm https://raw.githubusercontent.com/aymericzip/intlayer/main/docker/selfhost/.env.template -OutFile .env
|
|
296
|
+
# renseignez BETTER_AUTH_SECRET et S3_SECRET_ACCESS_KEY
|
|
297
|
+
```
|
|
298
|
+
|
|
299
|
+
</Tab>
|
|
300
|
+
<Tab label="CLI Intlayer" value="cli">
|
|
301
|
+
|
|
302
|
+
```bash
|
|
303
|
+
npx intlayer init infra --mode compose
|
|
304
|
+
```
|
|
305
|
+
|
|
306
|
+
</Tab>
|
|
307
|
+
</Tabs>
|
|
308
|
+
|
|
309
|
+
### 2. Configurer un service d'e-mail
|
|
310
|
+
|
|
311
|
+
Renseignez Resend **ou** SMTP dans `intlayer/.env`, exactement comme pour le conteneur tout-en-un (voir [Service d'e-mail global](#global-mailer)).
|
|
312
|
+
|
|
313
|
+
### 3. Démarrer
|
|
314
|
+
|
|
315
|
+
```sh
|
|
316
|
+
cd intlayer && docker compose up -d
|
|
317
|
+
```
|
|
134
318
|
|
|
135
|
-
|
|
319
|
+
Ouvrez **http://localhost:3000** et suivez la [Configuration initiale](#first-run-setup).
|
|
136
320
|
|
|
137
|
-
|
|
138
|
-
2. Un email de vérification est envoyé (via Resend). La vérification d'email est **obligatoire** — c'est pourquoi `RESEND_API_KEY` doit être défini avant de commencer.
|
|
139
|
-
3. Cliquez sur le lien dans l'email, puis connectez-vous.
|
|
321
|
+
### Magasins de données managés
|
|
140
322
|
|
|
141
|
-
|
|
323
|
+
Supprimez le service que vous remplacez du fichier compose (ainsi que son entrée dans `depends_on` pour `backend`), puis surchargez la variable correspondante :
|
|
142
324
|
|
|
143
|
-
|
|
325
|
+
```yaml fileName="docker-compose.yml"
|
|
326
|
+
services:
|
|
327
|
+
backend:
|
|
328
|
+
environment:
|
|
329
|
+
MONGODB_URI: mongodb+srv://user:password@cluster0.xxxxx.mongodb.net/intlayer
|
|
330
|
+
REDIS_URL: rediss://default:password@redis.example.com:6380
|
|
331
|
+
S3_ENDPOINT: https://s3.eu-west-1.amazonaws.com
|
|
332
|
+
S3_PUBLIC_URL: https://intlayer-assets.s3.eu-west-1.amazonaws.com
|
|
333
|
+
```
|
|
334
|
+
|
|
335
|
+
`S3_ACCESS_KEY_ID` / `S3_SECRET_ACCESS_KEY` / `S3_BUCKET_NAME` conservent leur signification avec n'importe quel fournisseur compatible S3.
|
|
336
|
+
|
|
337
|
+
### Montée en charge
|
|
338
|
+
|
|
339
|
+
`app` et `backend` sont sans état (stateless). Derrière un équilibreur de charge, `docker compose up -d --scale backend=3` fonctionne une fois que les mappages de ports fixes de l'hôte sont supprimés et que le proxy s'adresse aux services par leur nom. Les tâches en arrière-plan sont coordonnées via Redis (BullMQ), de sorte que plusieurs répliques de backend partagent la file d'attente en toute sécurité.
|
|
340
|
+
|
|
341
|
+
### Compilation depuis les sources
|
|
342
|
+
|
|
343
|
+
Depuis un clone du dépôt, une surcharge remplace `image:` par `build:` pour les deux services Intlayer :
|
|
344
|
+
|
|
345
|
+
```sh
|
|
346
|
+
cd docker/selfhost
|
|
347
|
+
docker compose -f docker-compose.yml -f docker-compose.build.yml up -d --build
|
|
348
|
+
```
|
|
349
|
+
|
|
350
|
+
C'est également ainsi que vous produisez des images pour un domaine personnalisé : passez les valeurs `VITE_*` comme arguments de build (voir [Limitations](#limitations)).
|
|
144
351
|
|
|
145
|
-
|
|
146
|
-
| ----------- | ----------------------------------------------- | ------------------------------ | ------------------------------------------------------------------------ |
|
|
147
|
-
| **app** | construit à partir de `apps/app/Dockerfile` | `3000` | Tableau de bord TanStack Start (UI du CMS) |
|
|
148
|
-
| **backend** | construit à partir de `apps/backend/Dockerfile` | `3100` | API REST Fastify (endpoint `/health`) |
|
|
149
|
-
| **mongo** | `mongo:7` | interne | Réplica set à nœud unique (`rs0`) |
|
|
150
|
-
| **redis** | `redis:7-alpine` | interne | Files d'attente de jobs (BullMQ) et mise en cache (ioredis) |
|
|
151
|
-
| **minio** | `minio/minio` | `9000` (S3), `9001` (console) | Stockage d'objets compatible S3 pour les avatars et les captures d'écran |
|
|
152
|
-
| **mailpit** | `axllent/mailpit` | `1025` (SMTP), `8025` (web UI) | Réceptacle local d'e-mails transactionnels |
|
|
352
|
+
### Sauvegarde et mise à niveau
|
|
153
353
|
|
|
154
|
-
|
|
354
|
+
```sh
|
|
355
|
+
# Sauvegarder un volume (répéter pour intlayer_redis-data et intlayer_minio-data)
|
|
356
|
+
docker compose stop
|
|
357
|
+
docker run --rm -v intlayer_mongo-data:/data -v "$(pwd)":/backup busybox tar czf /backup/mongo-data.tar.gz /data
|
|
358
|
+
docker compose start
|
|
359
|
+
|
|
360
|
+
# Mise à niveau, les volumes sont conservés
|
|
361
|
+
docker compose pull && docker compose up -d
|
|
362
|
+
```
|
|
363
|
+
|
|
364
|
+
</Tab>
|
|
365
|
+
</Tabs>
|
|
366
|
+
|
|
367
|
+
### Paramètres de l'installateur
|
|
368
|
+
|
|
369
|
+
Sans `--mode` (ou `INTLAYER_MODE`), l'installateur affiche un menu : `desktop`, `docker` (tout-en-un) ou `compose`. Il lit également quelques variables d'environnement. Comme il est transmis dans le shell via un pipe, passez-les au shell plutôt qu'à `curl` :
|
|
370
|
+
|
|
371
|
+
```sh
|
|
372
|
+
curl -fsSL https://intlayer.org/install.sh | INTLAYER_COMPOSE_DIR=./cms sh -s -- --mode compose
|
|
373
|
+
```
|
|
374
|
+
|
|
375
|
+
```powershell
|
|
376
|
+
$env:INTLAYER_MODE = "compose"; $env:INTLAYER_COMPOSE_DIR = ".\cms"; irm https://intlayer.org/install.ps1 | iex
|
|
377
|
+
```
|
|
378
|
+
|
|
379
|
+
| Variable | Défaut | S'applique à | Description |
|
|
380
|
+
| ------------------------- | ------------------------- | ------------ | --------------------------------------------------------------------- |
|
|
381
|
+
| `INTLAYER_MODE` | _(demandé)_ | tous | `desktop`, `docker` ou `compose`, identique à `--mode` |
|
|
382
|
+
| `INTLAYER_DOWNLOAD_DIR` | `~/Downloads` | desktop | Où l'installateur de l'application est enregistré |
|
|
383
|
+
| `INTLAYER_IMAGE` | `intlayer/cms-all:latest` | docker | Image tout-en-un à télécharger |
|
|
384
|
+
| `INTLAYER_ENV_FILE` | `./intlayer.env` | docker | Où écrire le fichier d'environnement |
|
|
385
|
+
| `INTLAYER_CONTAINER_NAME` | `intlayer` | docker | Nom du conteneur |
|
|
386
|
+
| `INTLAYER_DATA_VOLUME` | `intlayer-data` | docker | Volume nommé monté sur `/data` |
|
|
387
|
+
| `INTLAYER_APP_PORT` | `3000` | docker | Port hôte pour le tableau de bord |
|
|
388
|
+
| `INTLAYER_API_PORT` | `3100` | docker | Port hôte pour l'API |
|
|
389
|
+
| `INTLAYER_S3_PORT` | `9000` | docker | Port hôte pour l'API S3 MinIO |
|
|
390
|
+
| `INTLAYER_CONSOLE_PORT` | `9001` | docker | Port hôte pour la console MinIO |
|
|
391
|
+
| `INTLAYER_COMPOSE_DIR` | `./intlayer` | compose | Où `docker-compose.yml` et `.env` sont écrits |
|
|
392
|
+
| `INTLAYER_SELFHOST_REF` | `main` | les deux | Référence Git d'où sont récupérés le fichier compose et le modèle env |
|
|
393
|
+
|
|
394
|
+
> Les variables de port ne modifient que le côté **hôte** du mappage. Les images publiées intègrent `http://localhost:3000`, `http://localhost:3100` et `http://localhost:9000` compilés dans le bundle du tableau de bord, conservez donc les valeurs par défaut à moins de construire vos propres images, voir [Limitations](#limitations).
|
|
395
|
+
|
|
396
|
+
## Configuration initiale
|
|
397
|
+
|
|
398
|
+
Sur une nouvelle instance (base de données vide), l'ouverture du tableau de bord vous redirige vers la page **`/init`** :
|
|
399
|
+
|
|
400
|
+
1. Créez le premier compte. La collection des utilisateurs étant vide, ce compte est automatiquement promu **super administrateur**.
|
|
401
|
+
2. Un e-mail de vérification est envoyé via Resend ou votre relais SMTP. La vérification de l'e-mail est **obligatoire**, c'est pourquoi un service de messagerie doit être configuré avant de démarrer.
|
|
402
|
+
3. Cliquez sur le lien dans l'e-mail, puis connectez-vous.
|
|
403
|
+
|
|
404
|
+
Une fois qu'un administrateur existe, `/init` redirige vers la page de connexion standard.
|
|
155
405
|
|
|
156
406
|
## Variables d'environnement
|
|
157
407
|
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
|
163
|
-
|
|
|
164
|
-
| `
|
|
165
|
-
| `
|
|
166
|
-
| `
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
|
173
|
-
|
|
|
174
|
-
| `PORT`
|
|
175
|
-
| `
|
|
176
|
-
| `
|
|
177
|
-
| `DOMAIN`
|
|
178
|
-
| `
|
|
179
|
-
| `
|
|
180
|
-
| `
|
|
181
|
-
| `
|
|
182
|
-
| `
|
|
183
|
-
| `
|
|
184
|
-
| `
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
|
191
|
-
|
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
|
196
|
-
|
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
|
214
|
-
|
|
|
215
|
-
| `MAIL_PROVIDER` | `
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
> Priorité : le mailer propre d'une organisation (configuré depuis le tableau de bord **Organization**) a priorité sur le mailer global, qui a lui-même priorité sur la clé Resend par défaut.
|
|
224
|
-
|
|
225
|
-
## Connexion de votre projet Intlayer
|
|
226
|
-
|
|
227
|
-
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`.
|
|
408
|
+
Les deux modes Docker lisent le même fichier (`intlayer.env` pour le conteneur, `.env` pour Compose), généré à partir de [`docker/selfhost/.env.template`](https://github.com/aymericzip/intlayer/blob/main/docker/selfhost/.env.template).
|
|
409
|
+
|
|
410
|
+
### Obligatoires
|
|
411
|
+
|
|
412
|
+
| Variable | Exemple | Description |
|
|
413
|
+
| ---------------------- | ------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
414
|
+
| `BETTER_AUTH_SECRET` | _(généré)_ | Secret de 32 octets pour la signature des sessions |
|
|
415
|
+
| `S3_SECRET_ACCESS_KEY` | _(généré)_ | Secret pour l'instance MinIO intégrée |
|
|
416
|
+
| `RESEND_API_KEY` | _(votre clé)_ | E-mails transactionnels via Resend. Requis pour la configuration initiale à moins qu'un relais SMTP ne soit configuré (voir [Service d'e-mail global](#global-mailer)) |
|
|
417
|
+
|
|
418
|
+
### Fixées par le déploiement
|
|
419
|
+
|
|
420
|
+
Celles-ci sont définies par l'image (tout-en-un) ou par le fichier compose, et ne nécessitent d'être surchargées que pour une topologie personnalisée.
|
|
421
|
+
|
|
422
|
+
| Variable | Tout-en-un | Docker Compose | Description |
|
|
423
|
+
| ------------------ | --------------------------------------------------- | -------------------------------- | ------------------------------------------------------------------------------------------------ |
|
|
424
|
+
| `PORT` | `3100` | `3100` | Port d'écoute du backend |
|
|
425
|
+
| `APP_URL` | `http://localhost:3000` | `http://localhost:3000` | URL publique du tableau de bord |
|
|
426
|
+
| `BACKEND_URL` | `http://localhost:3100` | `http://localhost:3100` | URL publique de l'API backend |
|
|
427
|
+
| `DOMAIN` | `localhost` | `localhost` | Domaine du cookie |
|
|
428
|
+
| `SELF_HOSTED` | `true` | `true` | Désactive les points de terminaison API cloud uniquement (facturation, abonnements, marketplace) |
|
|
429
|
+
| `MONGODB_URI` | `mongodb://127.0.0.1:27017/intlayer?replicaSet=rs0` | `mongodb://mongo:27017/…` | Chaîne de connexion MongoDB, tout cluster `mongodb://` ou `mongodb+srv://` fonctionne |
|
|
430
|
+
| `REDIS_URL` | `redis://127.0.0.1:6379` | `redis://redis:6379` | Redis |
|
|
431
|
+
| `S3_ENDPOINT` | `http://127.0.0.1:9000` | `http://minio:9000` | MinIO (serveur à serveur) |
|
|
432
|
+
| `S3_PUBLIC_URL` | `http://localhost:9000/intlayer` | `http://localhost:9000/intlayer` | URL publique pour le chargement des ressources dans le navigateur |
|
|
433
|
+
| `S3_BUCKET_NAME` | `intlayer` | `intlayer` | Nom du bucket |
|
|
434
|
+
| `S3_ACCESS_KEY_ID` | `intlayer` | `intlayer` | Clé d'accès MinIO |
|
|
435
|
+
|
|
436
|
+
Le service `app` de Compose reçoit en plus `INTLAYER_BACKEND_INTERNAL_URL=http://backend:3100` : le navigateur accède à l'API sur `localhost:3100`, mais le rendu côté serveur s'exécute à l'intérieur du réseau Compose et doit utiliser le nom du service.
|
|
437
|
+
|
|
438
|
+
### Optionnelles (les fonctionnalités se dégradent en douceur en leur absence)
|
|
439
|
+
|
|
440
|
+
| Variable | Fonctionnalité |
|
|
441
|
+
| ------------------------------------------------ | ---------------------------------------------- |
|
|
442
|
+
| `OPENAI_API_KEY` | Traduction assistée par IA et audit de contenu |
|
|
443
|
+
| `GITHUB_CLIENT_ID`, `GITHUB_CLIENT_SECRET` | Connexion OAuth GitHub |
|
|
444
|
+
| `GOOGLE_CLIENT_ID`, `GOOGLE_CLIENT_SECRET` | Connexion OAuth Google |
|
|
445
|
+
| `GITLAB_CLIENT_ID`, `GITLAB_CLIENT_SECRET` | Connexion OAuth GitLab |
|
|
446
|
+
| `MICROSOFT_CLIENT_ID`, `MICROSOFT_CLIENT_SECRET` | Connexion OAuth Microsoft |
|
|
447
|
+
|
|
448
|
+
### Service d'e-mail global
|
|
449
|
+
|
|
450
|
+
Chaque e-mail transactionnel, y compris les e-mails hors organisation tels que les réinitialisations de mot de passe et liens magiques, passe par l'un des deux transports globaux :
|
|
451
|
+
|
|
452
|
+
- **Resend**, en utilisant `RESEND_API_KEY`.
|
|
453
|
+
- **SMTP**, en utilisant les variables `MAIL_SMTP_*`. Dès que `MAIL_SMTP_HOST` est défini, SMTP est utilisé et `RESEND_API_KEY` est ignoré.
|
|
454
|
+
|
|
455
|
+
`MAIL_PROVIDER` n'est nécessaire que pour forcer un transport lorsque les deux sont configurés (par exemple `MAIL_PROVIDER=resend` pour conserver Resend alors qu'un hôte SMTP est présent).
|
|
456
|
+
|
|
457
|
+
| Variable | Exemple | Description |
|
|
458
|
+
| -------------------- | ------------------------------ | ------------------------------------------------------------------------------------------ |
|
|
459
|
+
| `MAIL_FROM` | `Intlayer <no-reply@acme.com>` | En-tête d'expéditeur pour les deux transports. Accepte une adresse simple ou `Nom <email>` |
|
|
460
|
+
| `MAIL_SMTP_HOST` | `smtp.acme.com` | Hôte SMTP. Le définir sélectionne le transport SMTP |
|
|
461
|
+
| `MAIL_SMTP_PORT` | `587` | Port SMTP (par défaut `587`) |
|
|
462
|
+
| `MAIL_SMTP_SECURE` | `false` | TLS implicite. Définir sur `true` pour le port `465` |
|
|
463
|
+
| `MAIL_SMTP_USER` | _(votre utilisateur)_ | Nom d'utilisateur SMTP (optionnel ; omettre pour les relais non authentifiés) |
|
|
464
|
+
| `MAIL_SMTP_PASSWORD` | _(votre mot de passe)_ | Mot de passe SMTP |
|
|
465
|
+
| `MAIL_PROVIDER` | `resend` | Remplacement optionnel : `smtp` ou `resend`. Laisser vide pour la sélection automatique |
|
|
466
|
+
|
|
467
|
+
> Priorité : le service d'e-mail propre à une organisation (configuré depuis le tableau de bord de l'**Organisation**) a la priorité sur le service global, qui lui-même a la priorité sur la clé Resend par défaut.
|
|
468
|
+
|
|
469
|
+
## Connecter votre projet Intlayer
|
|
470
|
+
|
|
471
|
+
Une fois la stack lancée, faites pointer votre projet vers le backend et le tableau de bord auto-hébergés plutôt que `intlayer.org`.
|
|
228
472
|
|
|
229
473
|
### Configuration du projet
|
|
230
474
|
|
|
@@ -258,15 +502,15 @@ Définissez les variables d'environnement dans le fichier `.env` de votre projet
|
|
|
258
502
|
```sh
|
|
259
503
|
INTLAYER_CMS_URL=http://localhost:3000
|
|
260
504
|
INTLAYER_BACKEND_URL=http://localhost:3100
|
|
261
|
-
INTLAYER_CLIENT_ID=<
|
|
262
|
-
INTLAYER_CLIENT_SECRET=<
|
|
505
|
+
INTLAYER_CLIENT_ID=<votre-client-id>
|
|
506
|
+
INTLAYER_CLIENT_SECRET=<votre-client-secret>
|
|
263
507
|
```
|
|
264
508
|
|
|
265
509
|
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`.
|
|
266
510
|
|
|
267
511
|
### SDK `@intlayer/api`
|
|
268
512
|
|
|
269
|
-
Lorsque vous utilisez le SDK `@intlayer/api`
|
|
513
|
+
Lorsque vous utilisez le SDK `@intlayer/api` par programmation, passez `backendURL` explicitement :
|
|
270
514
|
|
|
271
515
|
```typescript fileName="cms.ts" codeFormat="typescript"
|
|
272
516
|
import { createIntlayerCMS } from "@intlayer/api";
|
|
@@ -283,84 +527,17 @@ const cms = createIntlayerCMS({
|
|
|
283
527
|
const { data: dictionaries } = await dictionaryEndpoint(cms).getDictionaries();
|
|
284
528
|
```
|
|
285
529
|
|
|
286
|
-
## Mise à niveau
|
|
287
|
-
|
|
288
|
-
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.
|
|
289
|
-
|
|
290
|
-
```sh
|
|
291
|
-
docker compose pull
|
|
292
|
-
docker compose up -d
|
|
293
|
-
```
|
|
294
|
-
|
|
295
|
-
## Sauvegarde et restauration
|
|
296
|
-
|
|
297
|
-
Toutes les données persistantes résident dans trois volumes Docker nommés.
|
|
298
|
-
|
|
299
|
-
### Sauvegarde
|
|
300
|
-
|
|
301
|
-
```sh
|
|
302
|
-
docker run --rm \
|
|
303
|
-
-v intlayer_mongo-data:/data \
|
|
304
|
-
-v "$(pwd)":/backup \
|
|
305
|
-
busybox tar czf /backup/mongo-data.tar.gz /data
|
|
306
|
-
|
|
307
|
-
docker run --rm \
|
|
308
|
-
-v intlayer_redis-data:/data \
|
|
309
|
-
-v "$(pwd)":/backup \
|
|
310
|
-
busybox tar czf /backup/redis-data.tar.gz /data
|
|
311
|
-
|
|
312
|
-
docker run --rm \
|
|
313
|
-
-v intlayer_minio-data:/data \
|
|
314
|
-
-v "$(pwd)":/backup \
|
|
315
|
-
busybox tar czf /backup/minio-data.tar.gz /data
|
|
316
|
-
```
|
|
317
|
-
|
|
318
|
-
### Restauration
|
|
319
|
-
|
|
320
|
-
```sh
|
|
321
|
-
docker run --rm \
|
|
322
|
-
-v intlayer_mongo-data:/data \
|
|
323
|
-
-v "$(pwd)":/backup \
|
|
324
|
-
busybox tar xzf /backup/mongo-data.tar.gz -C /
|
|
325
|
-
|
|
326
|
-
# Répétez pour redis-data et minio-data
|
|
327
|
-
```
|
|
328
|
-
|
|
329
530
|
## Limitations
|
|
330
531
|
|
|
331
|
-
- **
|
|
332
|
-
- **
|
|
333
|
-
- **
|
|
334
|
-
|
|
335
|
-
## Dépannage
|
|
336
|
-
|
|
337
|
-
### Le backend redémarre en boucle au premier démarrage
|
|
338
|
-
|
|
339
|
-
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 :
|
|
340
|
-
|
|
341
|
-
```sh
|
|
342
|
-
docker compose ps
|
|
343
|
-
docker compose logs mongo
|
|
344
|
-
docker compose logs redis
|
|
345
|
-
```
|
|
346
|
-
|
|
347
|
-
Recherchez `MongoDB connection error` près du haut du journal.
|
|
348
|
-
|
|
349
|
-
### Le tableau de bord ne peut pas atteindre l'API
|
|
350
|
-
|
|
351
|
-
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 :
|
|
352
|
-
|
|
353
|
-
### Bucket MinIO manquant
|
|
354
|
-
|
|
355
|
-
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 :
|
|
356
|
-
|
|
357
|
-
```sh
|
|
358
|
-
docker compose run --rm minio-init
|
|
359
|
-
```
|
|
532
|
+
- **Pas de domaine personnalisé, ni de remappage de ports.** Toutes les URL `VITE_*` destinées au navigateur sont intégrées au tableau de bord lors de la construction, et les images publiées (ainsi que l'application de bureau) sont fournies avec les valeurs `localhost` / Intlayer Cloud. Le tableau de bord doit être accessible sur `http://localhost:3000`, l'API sur `:3100` et MinIO sur `:9000`. Le servir sur un domaine public, ou faire pointer l'application de bureau vers un backend auto-hébergé, nécessite de reconstruire avec les URL cibles intégrées (`--build-arg VITE_BACKEND_URL=… VITE_SITE_URL=… VITE_DOMAIN=…` sur `docker/selfhost/Dockerfile`, ou via `docker-compose.build.yml`) et n'est pas pris en charge nativement.
|
|
533
|
+
- **Les e-mails nécessitent un service de messagerie fonctionnel.** La configuration initiale impose la vérification par e-mail, de sorte que soit `RESEND_API_KEY`, soit un [relais SMTP](#global-mailer) (`MAIL_SMTP_*`) doit être configuré. Une fois le premier administrateur connecté, chaque organisation peut également configurer son propre service SMTP ou Resend depuis le tableau de bord.
|
|
534
|
+
- **L'application de bureau nécessite Node.js** sur la machine pour démarrer son serveur intégré.
|
|
360
535
|
|
|
361
536
|
## Liens utiles
|
|
362
537
|
|
|
363
|
-
- [Documentation
|
|
538
|
+
- [Documentation Intlayer CMS](https://github.com/aymericzip/intlayer/blob/main/docs/docs/fr/intlayer_CMS.md)
|
|
364
539
|
- [Référence de configuration](https://github.com/aymericzip/intlayer/blob/main/docs/docs/fr/configuration.md)
|
|
365
|
-
- [SDK CMS
|
|
366
|
-
- [
|
|
540
|
+
- [SDK CMS : `@intlayer/api`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/fr/intlayer_CMS.md#programmatic-access-with-the-intlayerapi-sdk)
|
|
541
|
+
- [Releases de l'application de bureau](https://github.com/aymericzip/intlayer/releases/latest)
|
|
542
|
+
- Docker Hub : [`intlayer/cms-all`](https://hub.docker.com/r/intlayer/cms-all), [`intlayer/cms-frontend`](https://hub.docker.com/r/intlayer/cms-frontend), [`intlayer/cms-backend`](https://hub.docker.com/r/intlayer/cms-backend), miroir sur GHCR sous `ghcr.io/aymericzip/intlayer/`
|
|
543
|
+
- [`docker/selfhost/`](https://github.com/aymericzip/intlayer/tree/main/docker/selfhost) : Dockerfile, `docker-compose.yml` et `.env.template`
|