@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/ko/self_hosting.md
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
---
|
|
2
2
|
createdAt: 2026-06-30
|
|
3
|
-
updatedAt: 2026-
|
|
4
|
-
title: Intlayer
|
|
5
|
-
description: 단일
|
|
3
|
+
updatedAt: 2026-09-21
|
|
4
|
+
title: Intlayer 셀프 호스팅
|
|
5
|
+
description: "자체 인프라에서 Intlayer를 실행하세요: 데스크톱 앱, 단일 올인원 Docker 컨테이너 또는 확장 가능한 Docker Compose 스택. Intlayer Cloud 계정이 필요하지 않습니다."
|
|
6
6
|
keywords:
|
|
7
|
-
-
|
|
7
|
+
- 셀프 호스팅
|
|
8
8
|
- Docker
|
|
9
9
|
- Docker Compose
|
|
10
|
+
- 데스크톱 앱
|
|
10
11
|
- Intlayer
|
|
11
12
|
- CMS
|
|
12
13
|
- 설치
|
|
@@ -17,218 +18,457 @@ slugs:
|
|
|
17
18
|
author: aymericzip
|
|
18
19
|
---
|
|
19
20
|
|
|
20
|
-
# Intlayer
|
|
21
|
+
# Intlayer 셀프 호스팅
|
|
21
22
|
|
|
22
|
-
Intlayer는
|
|
23
|
+
Intlayer는 자체 인프라에서 실행할 수 있으며, Intlayer Cloud 계정이 필요하지 않습니다. 동일한 설치 프로그램(`install.sh`, Windows의 경우 `install.ps1` 또는 `npx intlayer init infra`)으로 설정할 수 있는 세 가지 구성이 제공됩니다:
|
|
23
24
|
|
|
24
|
-
|
|
25
|
+
| Setup | What it is | Pick it for |
|
|
26
|
+
| ------------------ | -------------------------------------------------------------------------- | ------------------------------------- |
|
|
27
|
+
| **데스크톱 앱** | macOS, Linux 및 Windows용 네이티브 대시보드 | 로컬 클라이언트, 호스팅할 필요 없음 |
|
|
28
|
+
| **올인원 Docker** | 대시보드, API, MongoDB, Redis, MinIO가 **단일 컨테이너**에 포함됨 | 테스트 및 소규모 단일 머신 설치 |
|
|
29
|
+
| **Docker Compose** | **서비스당 하나의 컨테이너**, 각 데이터 저장소를 관리형 서비스로 대체 가능 | 프로덕션, 확장성, 관리형 데이터베이스 |
|
|
30
|
+
|
|
31
|
+
## Table of Contents
|
|
32
|
+
|
|
33
|
+
<TOC/>
|
|
34
|
+
|
|
35
|
+
## 게시된 이미지 및 패키지
|
|
36
|
+
|
|
37
|
+
| Artifact | Docker Hub | GHCR mirror | Contents |
|
|
38
|
+
| -------------------- | ------------------------------------------------------------------------- | ------------------------------------------ | -------------------------------------------------------------------------------- |
|
|
39
|
+
| All-in-one container | [`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
|
+
| Dashboard (frontend) | [`intlayer/cms-frontend`](https://hub.docker.com/r/intlayer/cms-frontend) | `ghcr.io/aymericzip/intlayer/cms-frontend` | TanStack Start dashboard on Bun |
|
|
41
|
+
| API (backend) | [`intlayer/cms-backend`](https://hub.docker.com/r/intlayer/cms-backend) | `ghcr.io/aymericzip/intlayer/cms-backend` | Fastify REST API on Bun + Chromium |
|
|
42
|
+
| Desktop app | [GitHub releases](https://github.com/aymericzip/intlayer/releases/latest) | n/a | `.dmg` (macOS), `.deb` / `.rpm` / `.AppImage` (Linux), `.exe` / `.msi` (Windows) |
|
|
43
|
+
|
|
44
|
+
세 가지 이미지는 모두 동일한 [`docker/selfhost/Dockerfile`](https://github.com/aymericzip/intlayer/tree/main/docker/selfhost)에서 빌드되며 매 릴리스마다 게시됩니다. Compose 스택은 공식 `mongo:8`, `redis:8-alpine`, `quay.io/minio/minio` 이미지도 가져옵니다.
|
|
45
|
+
|
|
46
|
+
## 설정
|
|
47
|
+
|
|
48
|
+
설치 프로그램은 원하는 설정을 묻고 사전 요구 사항을 확인한 후(Docker 설치 제안), 이미 생성된 시크릿과 함께 환경 파일을 작성하고 이미지를 가져옵니다. 자체적으로 아무것도 시작하지 않습니다: Docker 모드는 먼저 메일러가 필요하므로 실행할 명령어를 출력하고 종료됩니다. 재실행해도 안전합니다: 기존 환경 파일은 절대 덮어쓰지 않으므로 업그레이드 경로로도 사용됩니다.
|
|
49
|
+
|
|
50
|
+
<Tabs group="mode">
|
|
51
|
+
<Tab label="데스크톱 앱" value="desktop">
|
|
52
|
+
|
|
53
|
+
Tauri로 구축된 네이티브 애플리케이션 형태의 Intlayer 대시보드입니다. Intlayer Cloud(`https://app.intlayer.org`)에 로그인하므로 호스팅할 필요가 없습니다. 브라우저 탭 대신 로컬 클라이언트를 원할 때 최적의 선택입니다.
|
|
54
|
+
|
|
55
|
+
### 설치
|
|
56
|
+
|
|
57
|
+
설치 프로그램은 사용 중인 OS 및 CPU에 맞는 패키지를 다운로드한 후 열거나(macOS), 설치하거나(Linux의 경우 `dpkg` / `rpm`), 설정 마법사를 시작합니다(Windows). [릴리스 페이지](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
|
+
In 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="Intlayer CLI" value="cli">
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
npx intlayer init infra --mode desktop
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
</Tab>
|
|
83
|
+
</Tabs>
|
|
84
|
+
|
|
85
|
+
### 요구 사항
|
|
37
86
|
|
|
38
|
-
|
|
87
|
+
- **Node.js**: 앱은 대시보드 서버를 내장하고 있으며 머신의 `node` 바이너리로 시작합니다. 앱이 시작되지 않으면 [nodejs.org](https://nodejs.org)에서 설치하세요.
|
|
88
|
+
|
|
89
|
+
> 게시된 데스크톱 빌드는 Intlayer Cloud 백엔드와 통신합니다. 자체 호스팅 백엔드로 지정하려면 API를 가리키는 `VITE_BACKEND_URL`로 앱을 다시 빌드해야 합니다. [제한 사항](#limitations)을 참조하세요.
|
|
90
|
+
|
|
91
|
+
</Tab>
|
|
92
|
+
<Tab label="올인원 Docker" value="docker">
|
|
93
|
+
|
|
94
|
+
모든 것이 [s6-overlay](https://github.com/just-containers/s6-overlay)에 의해 감독되는 단일 `intlayer/cms-all` 컨테이너 내부에서 실행되며, 모든 데이터 저장소는 단일 볼륨에 유지됩니다.
|
|
39
95
|
|
|
40
96
|
```
|
|
41
97
|
┌─────────────────────────────┐
|
|
42
|
-
|
|
43
|
-
|
|
98
|
+
browser ──────▶ │ app (TanStack Start) :3000│ ──┐
|
|
99
|
+
(localhost) └─────────────────────────────┘ │ VITE_BACKEND_URL (baked at build)
|
|
44
100
|
┌─────────────────────────────┐ │
|
|
45
|
-
│
|
|
101
|
+
│ backend (Fastify/Bun) :3100│ ◀─┘
|
|
46
102
|
└──────────────┬──────────────┘
|
|
47
|
-
|
|
48
|
-
▼ ▼ ▼
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
(콘솔) (웹 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
|
+
| 서비스 | 호스트 포트 | 용도 |
|
|
111
|
+
| ----------- | -------------------------- | ------------------------------------------ |
|
|
112
|
+
| **app** | `3000` | 대시보드 (CMS UI) |
|
|
113
|
+
| **backend** | `3100` | REST API (`/health` 엔드포인트) |
|
|
114
|
+
| **mongo** | 내부 | MongoDB 8, 단일 노드 복제본 세트 `rs0` |
|
|
115
|
+
| **redis** | 내부 | 작업 큐 (BullMQ) 및 캐싱 |
|
|
116
|
+
| **minio** | `9000` (S3), `9001` (콘솔) | 아바타 및 스크린샷용 S3 호환 객체 스토리지 |
|
|
56
117
|
|
|
57
|
-
|
|
118
|
+
부팅 순서는 s6 종속성(`mongod` → replica-set 초기화, `minio` → 버킷 생성, 그다음 `backend`, 그다음 `app`)에 의해 제어되며, 서비스 종료 시 자동으로 재시작하므로 첫 번째 부팅이 스스로 복구됩니다.
|
|
58
119
|
|
|
59
|
-
|
|
60
|
-
- 호스트에서 포트 `3000`, `3100`, `8025`, `9000`, `9001`이 사용 가능해야 합니다.
|
|
61
|
-
- Linux 또는 macOS 호스트 (또는 Windows의 WSL2).
|
|
120
|
+
### 사전 요구 사항
|
|
62
121
|
|
|
63
|
-
|
|
122
|
+
- **Docker** ≥ 24: 설치 프로그램에서 설치를 제안합니다(Linux는 [get.docker.com](https://get.docker.com), macOS는 Homebrew). Windows에서는 먼저 [Docker Desktop](https://docs.docker.com/desktop/setup/install/windows-install/)(WSL 2 백엔드)을 설치하세요.
|
|
123
|
+
- 호스트에서 `3000`, `3100`, `9000`, `9001` 포트 사용 가능. MinIO `9000`은 브라우저가 `S3_PUBLIC_URL`에서 에셋을 직접 로드하므로 브라우저에서 연결 가능해야 합니다.
|
|
124
|
+
- 메일러: [Resend](https://resend.com) API 키 또는 SMTP 릴레이.
|
|
64
125
|
|
|
65
|
-
|
|
126
|
+
### 1. 설치
|
|
66
127
|
|
|
67
|
-
|
|
128
|
+
`BETTER_AUTH_SECRET` 및 `S3_SECRET_ACCESS_KEY`가 생성된 `./intlayer.env`를 작성하고 `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">
|
|
139
|
+
|
|
140
|
+
In PowerShell:
|
|
141
|
+
|
|
142
|
+
```powershell
|
|
143
|
+
$env:INTLAYER_MODE = "docker"; irm https://intlayer.org/install.ps1 | iex
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
</Tab>
|
|
147
|
+
<Tab label="Intlayer CLI" value="cli">
|
|
148
|
+
|
|
149
|
+
CLI가 설치 프로그램을 실행하고 다른 탭에 표시된 `docker run …` 명령을 출력합니다. 메일러가 구성되면 터미널에 복사하여 실행하세요.
|
|
74
150
|
|
|
75
|
-
|
|
151
|
+
</Tab>
|
|
152
|
+
</Tabs>
|
|
76
153
|
|
|
77
|
-
### 2.
|
|
154
|
+
### 2. 메일러 구성
|
|
78
155
|
|
|
79
|
-
`intlayer.env`를 열고
|
|
156
|
+
`intlayer.env`를 열고 Resend **또는** SMTP를 구성합니다(자세한 내용은 [글로벌 메일러](#global-mailer) 참조):
|
|
80
157
|
|
|
81
158
|
```sh fileName="intlayer.env"
|
|
82
|
-
|
|
83
|
-
DB_MDP=<atlas-password>
|
|
84
|
-
DB_CLUSTER=<cluster>.xxxxx.mongodb.net
|
|
159
|
+
# Option A: Resend
|
|
85
160
|
RESEND_API_KEY=<your-resend-key>
|
|
86
|
-
```
|
|
87
161
|
|
|
88
|
-
|
|
162
|
+
# Option B: SMTP (takes over from Resend as soon as MAIL_SMTP_HOST is set)
|
|
163
|
+
MAIL_SMTP_HOST=smtp.example.com
|
|
164
|
+
MAIL_SMTP_PORT=587
|
|
165
|
+
MAIL_SMTP_USER=<user>
|
|
166
|
+
MAIL_SMTP_PASSWORD=<password>
|
|
167
|
+
MAIL_FROM=Intlayer <no-reply@example.com>
|
|
168
|
+
```
|
|
89
169
|
|
|
90
|
-
|
|
170
|
+
### 3. 시작
|
|
91
171
|
|
|
92
|
-
|
|
172
|
+
설치 프로그램이 출력하는 명령어입니다:
|
|
93
173
|
|
|
94
|
-
|
|
174
|
+
<Tabs group="os">
|
|
175
|
+
<Tab label="macOS / Linux" value="unix">
|
|
95
176
|
|
|
96
177
|
```sh
|
|
97
178
|
docker run -d --name intlayer \
|
|
98
179
|
--restart unless-stopped \
|
|
99
|
-
-p 3000:3000 \
|
|
100
|
-
-p 3100:3100 \
|
|
101
|
-
-p 9000:9000 \
|
|
102
|
-
-p 9001:9001 \
|
|
180
|
+
-p 3000:3000 -p 3100:3100 -p 9000:9000 -p 9001:9001 \
|
|
103
181
|
-v intlayer-data:/data \
|
|
104
182
|
--env-file ./intlayer.env \
|
|
105
|
-
|
|
183
|
+
intlayer/cms-all:latest
|
|
106
184
|
```
|
|
107
185
|
|
|
108
|
-
|
|
186
|
+
</Tab>
|
|
187
|
+
<Tab label="Windows" value="windows">
|
|
109
188
|
|
|
110
|
-
|
|
189
|
+
```powershell
|
|
190
|
+
docker run -d --name intlayer `
|
|
191
|
+
--restart unless-stopped `
|
|
192
|
+
-p 3000:3000 -p 3100:3100 -p 9000:9000 -p 9001:9001 `
|
|
193
|
+
-v intlayer-data:/data `
|
|
194
|
+
--env-file ./intlayer.env `
|
|
195
|
+
intlayer/cms-all:latest
|
|
196
|
+
```
|
|
111
197
|
|
|
112
|
-
|
|
198
|
+
</Tab>
|
|
199
|
+
<Tab label="Intlayer CLI" value="cli">
|
|
200
|
+
|
|
201
|
+
CLI가 설치 프로그램을 실행하고 다른 탭에 표시된 `docker run …` 명령을 출력합니다. 메일러가 구성되면 터미널에 복사하여 실행하세요.
|
|
202
|
+
|
|
203
|
+
</Tab>
|
|
204
|
+
</Tabs>
|
|
205
|
+
|
|
206
|
+
**http://localhost:3000**을 열고 [초기 설정](#first-run-setup)을 따릅니다. 첫 번째 부팅 시 복제본 세트와 버킷이 초기화되므로 1분 정도 기다려 주세요.
|
|
207
|
+
|
|
208
|
+
### 백업 및 업그레이드
|
|
209
|
+
|
|
210
|
+
모든 상태는 `intlayer-data` 볼륨(`/data/mongo`, `/data/redis`, `/data/minio`)에 저장됩니다.
|
|
211
|
+
|
|
212
|
+
```sh
|
|
213
|
+
# Backup (stop the container first so MongoDB's files are consistent)
|
|
214
|
+
docker stop intlayer
|
|
215
|
+
docker run --rm -v intlayer-data:/data -v "$(pwd)":/backup busybox tar czf /backup/intlayer-data.tar.gz /data
|
|
216
|
+
docker start intlayer
|
|
217
|
+
|
|
218
|
+
# Restore
|
|
219
|
+
docker run --rm -v intlayer-data:/data -v "$(pwd)":/backup busybox tar xzf /backup/intlayer-data.tar.gz -C /
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
업그레이드하려면 설치 프로그램을 다시 실행하고(최신 이미지를 가져오고 `intlayer.env`를 유지함) `docker rm -f intlayer`를 실행한 후 시작 명령을 다시 실행하세요. 번들된 항목 대신 관리형 MongoDB를 사용하려면 `intlayer.env`에 `MONGODB_URI`를 설정하세요.
|
|
223
|
+
|
|
224
|
+
</Tab>
|
|
225
|
+
<Tab label="Docker Compose" value="compose">
|
|
226
|
+
|
|
227
|
+
비공개 Compose 네트워크에서 서비스당 하나의 컨테이너를 실행합니다. 대시보드와 API는 게시된 `intlayer/cms-frontend` 및 `intlayer/cms-backend` 이미지를 사용하고, 데이터 저장소는 공식 `mongo`, `redis`, `minio` 이미지를 사용합니다.
|
|
228
|
+
|
|
229
|
+
```
|
|
230
|
+
┌───────────────────┐
|
|
231
|
+
browser ──────▶ │ app :3000 │ ── SSR ──▶ http://backend:3100
|
|
232
|
+
(localhost) └───────────────────┘
|
|
233
|
+
┌───────────────────┐
|
|
234
|
+
browser ──────▶ │ backend :3100 │
|
|
235
|
+
(localhost) └─────────┬─────────┘
|
|
236
|
+
┌───────────────┼───────────────┐
|
|
237
|
+
▼ ▼ ▼
|
|
238
|
+
mongo:27017 redis:6379 minio:9000 ◀── browser (assets)
|
|
239
|
+
(1-node RS) minio:9001
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
| 서비스 | 이미지 | 역할 |
|
|
243
|
+
| ------------ | ----------------------- | -------------------------------------------------------------- |
|
|
244
|
+
| `app` | `intlayer/cms-frontend` | `:3000`의 대시보드. 백엔드가 정상 상태가 될 때까지 대기 |
|
|
245
|
+
| `backend` | `intlayer/cms-backend` | Chromium이 포함된 `:3100`의 API. Mongo, Redis, MinIO 버킷 대기 |
|
|
246
|
+
| `mongo` | `mongo:8` | 자체 헬스체크로 시작되는 단일 노드 복제본 세트 `rs0` |
|
|
247
|
+
| `redis` | `redis:8-alpine` | 큐 및 캐싱, 추가 전용(append-only) 지속성 |
|
|
248
|
+
| `minio` | `quay.io/minio/minio` | `:9000`의 S3 스토리지, `:9001`의 콘솔 |
|
|
249
|
+
| `minio-init` | `quay.io/minio/mc` | 단발성 실행: 버킷 및 익명 다운로드 정책 생성 |
|
|
250
|
+
|
|
251
|
+
데이터는 `intlayer_mongo-data`, `intlayer_redis-data`, `intlayer_minio-data` 볼륨에 유지됩니다. 서비스 연결(`MONGODB_URI`, `REDIS_URL`, `S3_ENDPOINT`, 서버 측 렌더링에 사용되는 내부 백엔드 URL)은 compose 파일에 고정되어 있으며 비밀 및 선택적 통합만 포함하는 `.env`보다 우선합니다.
|
|
252
|
+
|
|
253
|
+
### 사전 요구 사항
|
|
254
|
+
|
|
255
|
+
- **Docker** ≥ 24(Compose 플러그인 포함): 설치 프로그램에서 Linux 및 macOS 설치를 제안합니다. Windows에서는 먼저 [Docker Desktop](https://docs.docker.com/desktop/setup/install/windows-install/)(WSL 2 백엔드)을 설치하세요.
|
|
256
|
+
- 호스트에서 `3000`, `3100`, `9000`, `9001` 포트 사용 가능.
|
|
257
|
+
- 메일러: [Resend](https://resend.com) API 키 또는 SMTP 릴레이.
|
|
258
|
+
|
|
259
|
+
### 1. 설치
|
|
260
|
+
|
|
261
|
+
`docker-compose.yml` 및 생성된 비밀이 포함된 `.env`를 `./intlayer/`에 작성하고 이미지를 가져옵니다.
|
|
262
|
+
|
|
263
|
+
<Tabs group="os">
|
|
264
|
+
<Tab label="macOS / Linux" value="unix">
|
|
265
|
+
|
|
266
|
+
```sh
|
|
267
|
+
curl -fsSL https://intlayer.org/install.sh | sh -s -- --mode compose
|
|
268
|
+
```
|
|
269
|
+
|
|
270
|
+
Or by hand:
|
|
271
|
+
|
|
272
|
+
```sh
|
|
273
|
+
mkdir intlayer && cd intlayer
|
|
274
|
+
curl -fsSLO https://raw.githubusercontent.com/aymericzip/intlayer/main/docker/selfhost/docker-compose.yml
|
|
275
|
+
curl -fsSL https://raw.githubusercontent.com/aymericzip/intlayer/main/docker/selfhost/.env.template -o .env
|
|
276
|
+
# fill in BETTER_AUTH_SECRET and S3_SECRET_ACCESS_KEY (openssl rand -hex 32)
|
|
277
|
+
```
|
|
278
|
+
|
|
279
|
+
</Tab>
|
|
280
|
+
<Tab label="Windows" value="windows">
|
|
281
|
+
|
|
282
|
+
In PowerShell:
|
|
283
|
+
|
|
284
|
+
```powershell
|
|
285
|
+
$env:INTLAYER_MODE = "compose"; irm https://intlayer.org/install.ps1 | iex
|
|
286
|
+
```
|
|
287
|
+
|
|
288
|
+
Or by hand:
|
|
289
|
+
|
|
290
|
+
```powershell
|
|
291
|
+
mkdir intlayer; cd intlayer
|
|
292
|
+
irm https://raw.githubusercontent.com/aymericzip/intlayer/main/docker/selfhost/docker-compose.yml -OutFile docker-compose.yml
|
|
293
|
+
irm https://raw.githubusercontent.com/aymericzip/intlayer/main/docker/selfhost/.env.template -OutFile .env
|
|
294
|
+
# fill in BETTER_AUTH_SECRET and S3_SECRET_ACCESS_KEY
|
|
295
|
+
```
|
|
296
|
+
|
|
297
|
+
</Tab>
|
|
298
|
+
<Tab label="Intlayer CLI" value="cli">
|
|
299
|
+
|
|
300
|
+
```bash
|
|
301
|
+
npx intlayer init infra --mode compose
|
|
302
|
+
```
|
|
303
|
+
|
|
304
|
+
</Tab>
|
|
305
|
+
</Tabs>
|
|
306
|
+
|
|
307
|
+
### 2. 메일러 구성
|
|
113
308
|
|
|
114
|
-
|
|
309
|
+
올인원 설정과 마찬가지로 `intlayer/.env`에 Resend **또는** SMTP를 채웁니다([글로벌 메일러](#global-mailer) 참조).
|
|
310
|
+
|
|
311
|
+
### 3. 시작
|
|
115
312
|
|
|
116
313
|
```sh
|
|
117
|
-
|
|
314
|
+
cd intlayer && docker compose up -d
|
|
315
|
+
```
|
|
316
|
+
|
|
317
|
+
**http://localhost:3000**을 열고 [초기 설정](#first-run-setup)을 따릅니다.
|
|
318
|
+
|
|
319
|
+
### 관리형 데이터 저장소
|
|
320
|
+
|
|
321
|
+
교체하려는 서비스를 compose 파일(및 `backend`의 `depends_on` 항목)에서 삭제한 다음 일치하는 변수를 재정의합니다:
|
|
322
|
+
|
|
323
|
+
```yaml fileName="docker-compose.yml"
|
|
324
|
+
services:
|
|
325
|
+
backend:
|
|
326
|
+
environment:
|
|
327
|
+
MONGODB_URI: mongodb+srv://user:password@cluster0.xxxxx.mongodb.net/intlayer
|
|
328
|
+
REDIS_URL: rediss://default:password@redis.example.com:6380
|
|
329
|
+
S3_ENDPOINT: https://s3.eu-west-1.amazonaws.com
|
|
330
|
+
S3_PUBLIC_URL: https://intlayer-assets.s3.eu-west-1.amazonaws.com
|
|
118
331
|
```
|
|
119
332
|
|
|
120
|
-
|
|
121
|
-
| ------------------------- | --------------------------------------------- | ------------------------------ |
|
|
122
|
-
| `INTLAYER_IMAGE` | `ghcr.io/aymericzip/intlayer-selfhost:latest` | 풀할 이미지 |
|
|
123
|
-
| `INTLAYER_ENV_FILE` | `./intlayer.env` | env 파일을 작성할 위치 |
|
|
124
|
-
| `INTLAYER_CONTAINER_NAME` | `intlayer` | 컨테이너 이름 |
|
|
125
|
-
| `INTLAYER_DATA_VOLUME` | `intlayer-data` | `/data`에 마운트된 명명된 볼륨 |
|
|
126
|
-
| `INTLAYER_APP_PORT` | `3000` | 대시보드용 호스트 포트 |
|
|
127
|
-
| `INTLAYER_API_PORT` | `3100` | API용 호스트 포트 |
|
|
128
|
-
| `INTLAYER_S3_PORT` | `9000` | MinIO S3 API용 호스트 포트 |
|
|
129
|
-
| `INTLAYER_CONSOLE_PORT` | `9001` | MinIO 콘솔용 호스트 포트 |
|
|
333
|
+
`S3_ACCESS_KEY_ID` / `S3_SECRET_ACCESS_KEY` / `S3_BUCKET_NAME`은 모든 S3 호환 공급자에 대해 동일한 의미를 유지합니다.
|
|
130
334
|
|
|
131
|
-
|
|
335
|
+
### 확장성
|
|
132
336
|
|
|
133
|
-
|
|
337
|
+
`app`과 `backend`는 무상태(stateless)입니다. 로드 밸런서 뒤에서 고정 호스트 포트 매핑을 제거하고 프록시가 이름으로 서비스를 처리하도록 하면 `docker compose up -d --scale backend=3`이 작동합니다. 백그라운드 작업은 Redis (BullMQ)를 통해 조정되므로 여러 백엔드 복제본이 큐를 안전하게 공유합니다.
|
|
134
338
|
|
|
135
|
-
|
|
339
|
+
### 소스에서 빌드
|
|
136
340
|
|
|
137
|
-
|
|
138
|
-
2. `docker-compose.yml` 및 `.env.example`을 `./intlayer/` 디렉토리에 다운로드합니다.
|
|
139
|
-
3. `.env` 파일이 없으면 예제 파일을 복사하고 `openssl rand`를 통해 `BETTER_AUTH_SECRET`, `S3_ACCESS_KEY_ID`, `S3_SECRET_ACCESS_KEY`에 대한 임의의 비밀을 생성합니다.
|
|
140
|
-
4. `docker compose pull` + `docker compose up -d`를 실행합니다.
|
|
141
|
-
5. 다음 URL을 출력합니다: 대시보드 `:3000`, API `:3100`, 이메일 UI `:8025`, MinIO 콘솔 `:9001`.
|
|
341
|
+
저장소 클론에서 재정의 설정을 통해 두 Intlayer 서비스를 `image:`에서 `build:`로 전환합니다:
|
|
142
342
|
|
|
143
|
-
|
|
343
|
+
```sh
|
|
344
|
+
cd docker/selfhost
|
|
345
|
+
docker compose -f docker-compose.yml -f docker-compose.build.yml up -d --build
|
|
346
|
+
```
|
|
144
347
|
|
|
145
|
-
|
|
348
|
+
사용자 지정 도메인용 이미지를 생성하는 방법도 이와 같습니다: `VITE_*` 값을 빌드 인수로 전달합니다([제한 사항](#limitations) 참조).
|
|
146
349
|
|
|
147
|
-
|
|
148
|
-
| ----------- | ---------------------------------- | ----------------------------- | ----------------------------------------------- |
|
|
149
|
-
| **앱** | `apps/app/Dockerfile`에서 빌드 | `3000` | TanStack Start 대시보드 (CMS UI) |
|
|
150
|
-
| **백엔드** | `apps/backend/Dockerfile`에서 빌드 | `3100` | Fastify REST API (`/health` 엔드포인트) |
|
|
151
|
-
| **mongo** | `mongo:7` | 내부 | 단일 노드 복제본 세트 (`rs0`) |
|
|
152
|
-
| **redis** | `redis:7-alpine` | 내부 | 작업 큐 (BullMQ) 및 캐싱 (ioredis) |
|
|
153
|
-
| **minio** | `minio/minio` | `9000` (S3), `9001` (콘솔) | 아바타 및 스크린샷을 위한 S3 호환 객체 스토리지 |
|
|
154
|
-
| **mailpit** | `axllent/mailpit` | `1025` (SMTP), `8025` (웹 UI) | 로컬 트랜잭션 이메일 싱크 |
|
|
350
|
+
### 백업 및 업그레이드
|
|
155
351
|
|
|
156
|
-
|
|
352
|
+
```sh
|
|
353
|
+
# Backup one volume (repeat for intlayer_redis-data and intlayer_minio-data)
|
|
354
|
+
docker compose stop
|
|
355
|
+
docker run --rm -v intlayer_mongo-data:/data -v "$(pwd)":/backup busybox tar czf /backup/mongo-data.tar.gz /data
|
|
356
|
+
docker compose start
|
|
357
|
+
|
|
358
|
+
# Upgrade, volumes are kept
|
|
359
|
+
docker compose pull && docker compose up -d
|
|
360
|
+
```
|
|
361
|
+
|
|
362
|
+
</Tab>
|
|
363
|
+
</Tabs>
|
|
364
|
+
|
|
365
|
+
### 설치 프로그램 설정
|
|
366
|
+
|
|
367
|
+
`--mode`(또는 `INTLAYER_MODE`)가 없으면 설치 프로그램에 메뉴가 표시됩니다: `desktop`, `docker`(올인원) 또는 `compose`. 또한 몇 가지 환경 변수를 읽습니다. 셸로 파이프되므로 `curl`이 아닌 셸에 전달하세요:
|
|
368
|
+
|
|
369
|
+
```sh
|
|
370
|
+
curl -fsSL https://intlayer.org/install.sh | INTLAYER_COMPOSE_DIR=./cms sh -s -- --mode compose
|
|
371
|
+
```
|
|
372
|
+
|
|
373
|
+
```powershell
|
|
374
|
+
$env:INTLAYER_MODE = "compose"; $env:INTLAYER_COMPOSE_DIR = ".\cms"; irm https://intlayer.org/install.ps1 | iex
|
|
375
|
+
```
|
|
376
|
+
|
|
377
|
+
| Variable | Default | Applies to | Description |
|
|
378
|
+
| ------------------------- | ------------------------- | ---------- | ---------------------------------------------------------- |
|
|
379
|
+
| `INTLAYER_MODE` | _(asked)_ | all | `desktop`, `docker` or `compose`, same as `--mode` |
|
|
380
|
+
| `INTLAYER_DOWNLOAD_DIR` | `~/Downloads` | desktop | Where the app installer is saved |
|
|
381
|
+
| `INTLAYER_IMAGE` | `intlayer/cms-all:latest` | docker | All-in-one image to pull |
|
|
382
|
+
| `INTLAYER_ENV_FILE` | `./intlayer.env` | docker | Where to write the environment file |
|
|
383
|
+
| `INTLAYER_CONTAINER_NAME` | `intlayer` | docker | Container name |
|
|
384
|
+
| `INTLAYER_DATA_VOLUME` | `intlayer-data` | docker | Named volume mounted at `/data` |
|
|
385
|
+
| `INTLAYER_APP_PORT` | `3000` | docker | Host port for the dashboard |
|
|
386
|
+
| `INTLAYER_API_PORT` | `3100` | docker | Host port for the API |
|
|
387
|
+
| `INTLAYER_S3_PORT` | `9000` | docker | Host port for the MinIO S3 API |
|
|
388
|
+
| `INTLAYER_CONSOLE_PORT` | `9001` | docker | Host port for the MinIO console |
|
|
389
|
+
| `INTLAYER_COMPOSE_DIR` | `./intlayer` | compose | Where `docker-compose.yml` and `.env` are written |
|
|
390
|
+
| `INTLAYER_SELFHOST_REF` | `main` | both | Git ref the compose file and env template are fetched from |
|
|
391
|
+
|
|
392
|
+
> 포트 변수는 매핑의 **호스트** 측만 변경합니다. 게시된 이미지에는 `http://localhost:3000`, `http://localhost:3100`, `http://localhost:9000`이 대시보드 번들에 컴파일되어 있으므로 자체 이미지를 빌드하지 않는 한 기본값을 유지하세요. [제한 사항](#limitations)을 참조하세요.
|
|
393
|
+
|
|
394
|
+
## 초기 설정
|
|
395
|
+
|
|
396
|
+
새 인스턴스(빈 데이터베이스)에서 대시보드를 열면 **`/init`** 페이지로 리디렉션됩니다:
|
|
397
|
+
|
|
398
|
+
1. 첫 번째 계정을 만듭니다. 사용자 컬렉션이 비어 있으므로 이 계정은 자동으로 **최고 관리자(super admin)** 로 승격됩니다.
|
|
399
|
+
2. Resend 또는 SMTP 릴레이를 통해 인증 이메일이 전송됩니다. 이메일 인증은 **필수**이므로 시작하기 전에 메일러를 구성해야 합니다.
|
|
400
|
+
3. 이메일의 링크를 클릭한 다음 로그인합니다.
|
|
401
|
+
|
|
402
|
+
관리자가 존재하면 `/init`은 표준 로그인 페이지로 리디렉션됩니다.
|
|
157
403
|
|
|
158
404
|
## 환경 변수
|
|
159
405
|
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
|
165
|
-
|
|
|
166
|
-
| `
|
|
167
|
-
| `
|
|
168
|
-
| `
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
|
175
|
-
|
|
|
176
|
-
| `PORT`
|
|
177
|
-
| `
|
|
178
|
-
| `
|
|
179
|
-
| `DOMAIN`
|
|
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
|
-
|
|
|
216
|
-
|
|
|
217
|
-
| `MAIL_PROVIDER` | `
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
## Intlayer 프로젝트 연결하기
|
|
228
|
-
|
|
229
|
-
스택이 실행되면 프로젝트가 `intlayer.org` 대신 자체 호스팅된 백엔드 및 대시보드를 가리키도록 설정하세요.
|
|
230
|
-
|
|
231
|
-
### 프로젝트 설정
|
|
406
|
+
두 Docker 모드 모두 [`docker/selfhost/.env.template`](https://github.com/aymericzip/intlayer/blob/main/docker/selfhost/.env.template)에서 생성된 동일한 파일(컨테이너의 경우 `intlayer.env`, Compose의 경우 `.env`)을 읽습니다.
|
|
407
|
+
|
|
408
|
+
### 필수 항목
|
|
409
|
+
|
|
410
|
+
| Variable | Example | Description |
|
|
411
|
+
| ---------------------- | ------------- | --------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
412
|
+
| `BETTER_AUTH_SECRET` | _(generated)_ | 32-byte secret for session signing |
|
|
413
|
+
| `S3_SECRET_ACCESS_KEY` | _(generated)_ | Secret for the bundled MinIO |
|
|
414
|
+
| `RESEND_API_KEY` | _(your key)_ | Transactional email via Resend. Required for first-run setup unless an SMTP relay is configured instead (see [Global mailer](#global-mailer)) |
|
|
415
|
+
|
|
416
|
+
### 배포에 의해 고정됨
|
|
417
|
+
|
|
418
|
+
These are set by the image (all-in-one) or by the compose file, and only need overriding for a non-standard topology.
|
|
419
|
+
|
|
420
|
+
| Variable | All-in-one | Docker Compose | Description |
|
|
421
|
+
| ------------------ | --------------------------------------------------- | -------------------------------- | ----------------------------------------------------------------------------- |
|
|
422
|
+
| `PORT` | `3100` | `3100` | Backend listening port |
|
|
423
|
+
| `APP_URL` | `http://localhost:3000` | `http://localhost:3000` | Public URL of the dashboard |
|
|
424
|
+
| `BACKEND_URL` | `http://localhost:3100` | `http://localhost:3100` | Public URL of the backend API |
|
|
425
|
+
| `DOMAIN` | `localhost` | `localhost` | Cookie domain |
|
|
426
|
+
| `SELF_HOSTED` | `true` | `true` | Disables the cloud-only API endpoints (billing, subscriptions, marketplace) |
|
|
427
|
+
| `MONGODB_URI` | `mongodb://127.0.0.1:27017/intlayer?replicaSet=rs0` | `mongodb://mongo:27017/…` | MongoDB connection string, any `mongodb://` or `mongodb+srv://` cluster works |
|
|
428
|
+
| `REDIS_URL` | `redis://127.0.0.1:6379` | `redis://redis:6379` | Redis |
|
|
429
|
+
| `S3_ENDPOINT` | `http://127.0.0.1:9000` | `http://minio:9000` | MinIO (server-to-server) |
|
|
430
|
+
| `S3_PUBLIC_URL` | `http://localhost:9000/intlayer` | `http://localhost:9000/intlayer` | Public URL for browser asset loading |
|
|
431
|
+
| `S3_BUCKET_NAME` | `intlayer` | `intlayer` | Bucket name |
|
|
432
|
+
| `S3_ACCESS_KEY_ID` | `intlayer` | `intlayer` | MinIO access key |
|
|
433
|
+
|
|
434
|
+
Compose `app` 서비스는 추가로 `INTLAYER_BACKEND_INTERNAL_URL=http://backend:3100`을 받습니다: 브라우저는 `localhost:3100`에서 API에 연결하지만 서버 측 렌더링은 Compose 네트워크 내부에서 실행되므로 서비스 이름을 사용해야 합니다.
|
|
435
|
+
|
|
436
|
+
### 선택 항목 (누락 시 기능이 점진적으로 저하됨)
|
|
437
|
+
|
|
438
|
+
| Variable | Feature |
|
|
439
|
+
| ------------------------------------------------ | ----------------------------------------- |
|
|
440
|
+
| `OPENAI_API_KEY` | AI-assisted translation and content audit |
|
|
441
|
+
| `GITHUB_CLIENT_ID`, `GITHUB_CLIENT_SECRET` | GitHub OAuth login |
|
|
442
|
+
| `GOOGLE_CLIENT_ID`, `GOOGLE_CLIENT_SECRET` | Google OAuth login |
|
|
443
|
+
| `GITLAB_CLIENT_ID`, `GITLAB_CLIENT_SECRET` | GitLab OAuth login |
|
|
444
|
+
| `MICROSOFT_CLIENT_ID`, `MICROSOFT_CLIENT_SECRET` | Microsoft OAuth login |
|
|
445
|
+
|
|
446
|
+
### 글로벌 메일러
|
|
447
|
+
|
|
448
|
+
비조직 이메일(비밀번호 재설정 및 매직 링크)을 포함한 모든 트랜잭션 이메일은 두 가지 글로벌 전송 방식 중 하나를 거칩니다:
|
|
449
|
+
|
|
450
|
+
- **Resend**: `RESEND_API_KEY` 사용.
|
|
451
|
+
- **SMTP**: `MAIL_SMTP_*` 변수 사용. `MAIL_SMTP_HOST`가 설정되면 즉시 SMTP가 사용되며 `RESEND_API_KEY`는 무시됩니다.
|
|
452
|
+
|
|
453
|
+
`MAIL_PROVIDER`는 둘 다 구성된 경우 하나의 전송 방식을 강제하는 데만 필요합니다(예: SMTP 호스트가 있는 상태에서 Resend를 유지하기 위해 `MAIL_PROVIDER=resend`).
|
|
454
|
+
|
|
455
|
+
| Variable | Example | Description |
|
|
456
|
+
| -------------------- | ------------------------------ | ---------------------------------------------------------------------------- |
|
|
457
|
+
| `MAIL_FROM` | `Intlayer <no-reply@acme.com>` | Sender header for either transport. Accepts a bare address or `Name <email>` |
|
|
458
|
+
| `MAIL_SMTP_HOST` | `smtp.acme.com` | SMTP host. Setting it selects the SMTP transport |
|
|
459
|
+
| `MAIL_SMTP_PORT` | `587` | SMTP port (defaults to `587`) |
|
|
460
|
+
| `MAIL_SMTP_SECURE` | `false` | Implicit TLS. Set `true` for port `465` |
|
|
461
|
+
| `MAIL_SMTP_USER` | _(your user)_ | SMTP username (optional; omit for unauthenticated relays) |
|
|
462
|
+
| `MAIL_SMTP_PASSWORD` | _(your password)_ | SMTP password |
|
|
463
|
+
| `MAIL_PROVIDER` | `resend` | Optional override: `smtp` or `resend`. Leave unset to auto-select |
|
|
464
|
+
|
|
465
|
+
> 우선순위: 조직 자체 메일러(**조직** 대시보드에서 구성)가 글로벌 메일러보다 우선하며, 글로벌 메일러는 기본 Resend 키보다 우선합니다.
|
|
466
|
+
|
|
467
|
+
## Intlayer 프로젝트 연결
|
|
468
|
+
|
|
469
|
+
스택이 실행되면 `intlayer.org` 대신 자체 호스팅된 백엔드 및 대시보드를 가리키도록 프로젝트를 설정합니다.
|
|
470
|
+
|
|
471
|
+
### 프로젝트 구성
|
|
232
472
|
|
|
233
473
|
```typescript fileName="intlayer.config.ts" codeFormat={["typescript", "esm", "commonjs"]}
|
|
234
474
|
import type { IntlayerConfig } from "intlayer";
|
|
@@ -239,23 +479,23 @@ const config: IntlayerConfig = {
|
|
|
239
479
|
clientSecret: process.env.INTLAYER_CLIENT_SECRET,
|
|
240
480
|
|
|
241
481
|
/**
|
|
242
|
-
*
|
|
243
|
-
*
|
|
482
|
+
* URL of the self-hosted CMS dashboard.
|
|
483
|
+
* Default: https://app.intlayer.org
|
|
244
484
|
*/
|
|
245
|
-
cmsURL: process.env.INTLAYER_CMS_URL, //
|
|
485
|
+
cmsURL: process.env.INTLAYER_CMS_URL, // e.g. http://localhost:3000
|
|
246
486
|
|
|
247
487
|
/**
|
|
248
|
-
*
|
|
249
|
-
*
|
|
488
|
+
* URL of the self-hosted backend API.
|
|
489
|
+
* Default: https://back.intlayer.org
|
|
250
490
|
*/
|
|
251
|
-
backendURL: process.env.INTLAYER_BACKEND_URL, //
|
|
491
|
+
backendURL: process.env.INTLAYER_BACKEND_URL, // e.g. http://localhost:3100
|
|
252
492
|
},
|
|
253
493
|
};
|
|
254
494
|
|
|
255
495
|
export default config;
|
|
256
496
|
```
|
|
257
497
|
|
|
258
|
-
|
|
498
|
+
Set the environment variables in your project's `.env`:
|
|
259
499
|
|
|
260
500
|
```sh
|
|
261
501
|
INTLAYER_CMS_URL=http://localhost:3000
|
|
@@ -264,11 +504,11 @@ INTLAYER_CLIENT_ID=<your-client-id>
|
|
|
264
504
|
INTLAYER_CLIENT_SECRET=<your-client-secret>
|
|
265
505
|
```
|
|
266
506
|
|
|
267
|
-
`http://localhost:3000/projects`의 자체 호스팅
|
|
507
|
+
`http://localhost:3000/projects`의 자체 호스팅 대시보드에서 **Projects → Access keys** 아래에 액세스 자격 증명을 만듭니다.
|
|
268
508
|
|
|
269
509
|
### `@intlayer/api` SDK
|
|
270
510
|
|
|
271
|
-
`@intlayer/api` SDK를
|
|
511
|
+
프로그래밍 방식으로 `@intlayer/api` SDK를 사용할 때 `backendURL`을 명시적으로 전달합니다:
|
|
272
512
|
|
|
273
513
|
```typescript fileName="cms.ts" codeFormat="typescript"
|
|
274
514
|
import { createIntlayerCMS } from "@intlayer/api";
|
|
@@ -285,84 +525,17 @@ const cms = createIntlayerCMS({
|
|
|
285
525
|
const { data: dictionaries } = await dictionaryEndpoint(cms).getDictionaries();
|
|
286
526
|
```
|
|
287
527
|
|
|
288
|
-
## 업그레이드
|
|
289
|
-
|
|
290
|
-
이는 최신 이미지를 가져오고 `docker compose pull && docker compose up -d`를 사용하여 컨테이너를 다시 시작합니다. 기존 볼륨(`mongo-data`, `redis-data`, `minio-data`)은 보존되므로 데이터 손실이 없습니다.
|
|
291
|
-
|
|
292
|
-
```sh
|
|
293
|
-
docker compose pull
|
|
294
|
-
docker compose up -d
|
|
295
|
-
```
|
|
296
|
-
|
|
297
|
-
## 백업 및 복원
|
|
298
|
-
|
|
299
|
-
모든 영구 데이터는 세 개의 명명된 Docker 볼륨에 저장됩니다.
|
|
300
|
-
|
|
301
|
-
### 백업
|
|
302
|
-
|
|
303
|
-
```sh
|
|
304
|
-
docker run --rm \
|
|
305
|
-
-v intlayer_mongo-data:/data \
|
|
306
|
-
-v "$(pwd)":/backup \
|
|
307
|
-
busybox tar czf /backup/mongo-data.tar.gz /data
|
|
308
|
-
|
|
309
|
-
docker run --rm \
|
|
310
|
-
-v intlayer_redis-data:/data \
|
|
311
|
-
-v "$(pwd)":/backup \
|
|
312
|
-
busybox tar czf /backup/redis-data.tar.gz /data
|
|
313
|
-
|
|
314
|
-
docker run --rm \
|
|
315
|
-
-v intlayer_minio-data:/data \
|
|
316
|
-
-v "$(pwd)":/backup \
|
|
317
|
-
busybox tar czf /backup/minio-data.tar.gz /data
|
|
318
|
-
```
|
|
319
|
-
|
|
320
|
-
### 복원
|
|
321
|
-
|
|
322
|
-
```sh
|
|
323
|
-
docker run --rm \
|
|
324
|
-
-v intlayer_mongo-data:/data \
|
|
325
|
-
-v "$(pwd)":/backup \
|
|
326
|
-
busybox tar xzf /backup/mongo-data.tar.gz -C /
|
|
327
|
-
|
|
328
|
-
# redis-data 및 minio-data에 대해서도 반복합니다.
|
|
329
|
-
```
|
|
330
|
-
|
|
331
528
|
## 제한 사항
|
|
332
529
|
|
|
333
|
-
-
|
|
334
|
-
-
|
|
335
|
-
-
|
|
336
|
-
|
|
337
|
-
## 문제 해결
|
|
338
|
-
|
|
339
|
-
### 첫 시작 시 백엔드 충돌 반복
|
|
340
|
-
|
|
341
|
-
백엔드가 시작되기 전에 MongoDB와 Redis가 정상 상태여야 합니다. compose 파일은 `condition: service_healthy`와 함께 `depends_on`을 사용합니다. 백엔드 재시작이 반복적으로 발생하면 `mongo` 및 `redis` 헬스체크가 통과하는지 확인하세요:
|
|
342
|
-
|
|
343
|
-
```sh
|
|
344
|
-
docker compose ps
|
|
345
|
-
docker compose logs mongo
|
|
346
|
-
docker compose logs redis
|
|
347
|
-
```
|
|
348
|
-
|
|
349
|
-
로그의 상단 근처에서 `MongoDB connection error`를 찾아보세요.
|
|
350
|
-
|
|
351
|
-
### 대시보드가 API에 연결할 수 없음
|
|
352
|
-
|
|
353
|
-
`VITE_BACKEND_URL`이 **브라우저**에서 백엔드에 접근 가능한 URL(Docker 네트워크가 아님)과 일치하는지 확인하세요. 백엔드 포트를 변경했거나 리버스 프록시를 추가했다면, 대시보드 이미지를 다시 빌드해야 합니다:
|
|
354
|
-
|
|
355
|
-
### MinIO 버킷 누락
|
|
356
|
-
|
|
357
|
-
`minio-init` 일회성 서비스가 실행되지 않았거나(또는 MinIO가 준비되기 전에 실행된 경우), 수동으로 버킷을 생성하세요:
|
|
358
|
-
|
|
359
|
-
```sh
|
|
360
|
-
docker compose run --rm minio-init
|
|
361
|
-
```
|
|
530
|
+
- **사용자 지정 도메인 및 포트 재매핑 미지원.** 브라우저용 모든 `VITE_*` URL은 빌드 시 대시보드에 번들링되며 게시된 이미지(및 데스크톱 앱)는 `localhost` / Intlayer Cloud 값과 함께 제공됩니다. 대시보드는 `http://localhost:3000`, API는 `:3100`, MinIO는 `:9000`에서 액세스해야 합니다. 공개 도메인에서 제공하거나 데스크톱 앱을 자체 호스팅 백엔드로 지정하려면 대상 URL이 포함된 상태로 다시 빌드해야 하며(`docker/selfhost/Dockerfile` 또는 `docker-compose.build.yml`에서 `--build-arg VITE_BACKEND_URL=… VITE_SITE_URL=… VITE_DOMAIN=…`), 기본적으로 지원되지 않습니다.
|
|
531
|
+
- **이메일 전송을 위해 작동하는 메일러가 필요합니다.** 초기 설정에서는 이메일 인증이 강제되므로 `RESEND_API_KEY` 또는 [SMTP 릴레이](#global-mailer)(`MAIL_SMTP_*`)를 구성해야 합니다. 첫 번째 관리자가 로그인한 후 각 조직은 대시보드에서 자체 SMTP 또는 Resend 메일러를 구성할 수도 있습니다.
|
|
532
|
+
- **데스크톱 앱은 임베디드 서버를 시작하기 위해 머신에 Node.js가 필요합니다.**
|
|
362
533
|
|
|
363
534
|
## 유용한 링크
|
|
364
535
|
|
|
365
536
|
- [Intlayer CMS 문서](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ko/intlayer_CMS.md)
|
|
366
|
-
- [
|
|
367
|
-
- [CMS SDK
|
|
368
|
-
- [
|
|
537
|
+
- [구성 레퍼런스](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ko/configuration.md)
|
|
538
|
+
- [CMS SDK: `@intlayer/api`](https://github.com/aymericzip/intlayer/blob/main/docs/docs/ko/intlayer_CMS.md#programmatic-access-with-the-intlayerapi-sdk)
|
|
539
|
+
- [데스크톱 앱 릴리스](https://github.com/aymericzip/intlayer/releases/latest)
|
|
540
|
+
- 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), GHCR 미러: `ghcr.io/aymericzip/intlayer/`
|
|
541
|
+
- [`docker/selfhost/`](https://github.com/aymericzip/intlayer/tree/main/docker/selfhost): Dockerfile, `docker-compose.yml` 및 `.env.template`
|