Zadaj pytanie i otrzymaj streszczenie dokumentu, odwołując się do tej strony i wybranego dostawcy AI
Treść tej strony została przetłumaczona przy użyciu sztucznej inteligencji.
Zobacz ostatnią wersję oryginalnej treści w języku angielskimIf you have an idea for improving this documentation, please feel free to contribute by submitting a pull request on GitHub.
GitHub link to the documentationCopy doc Markdown to clipboard
Samodzielne hostowanie Intlayer
Intlayer może działać w całości na Twojej własnej infrastrukturze — konto Intlayer Cloud nie jest wymagane. Jedno polecenie uruchamia gotowy do produkcji stos:
Skopiuj kod do schowka
curl -fsSL https://intlayer.org/install.sh | shInstalator pobiera plik docker-compose.yml oraz .env, automatycznie generuje wymagane sekrety i uruchamia wszystkie kontenery za pomocą docker compose up -d.
Spis treści
Architektura
Skopiuj kod do schowka
┌─────────────────────────────┐ przeglądarka ──────▶ │ aplikacja (TanStack Start) :3000│ ──┐ └─────────────────────────────┘ │ VITE_BACKEND_URL ┌─────────────────────────────┐ │ │ backend (Fastify/Bun) :3100│ ◀─┘ └──────────────┬──────────────┘ ┌──────────┬─────────┼──────────┬───────────┐ ▼ ▼ ▼ ▼ ▼ mongo:27017 redis:6379 minio:9000 mailpit:1025 Chromium (RS z 1 węzłem) (API S3) (SMTP) (w obrazie) minio:9001 mailpit:8025 (konsola) (interfejs webowy)Chromium (używany do generowania zrzutów ekranu przez Puppeteer) jest dołączony do obrazu backendu — nie jest potrzebny oddzielny kontener.
Wymagania wstępne
- Docker ≥ 24 i Docker Compose ≥ v2. Jeśli którykolwiek z nich jest brakujący, instalator wyświetli link do instalacji i zakończy działanie.
- Porty
3000,3100,8025,9000i9001dostępne na hoście. - Host Linux lub macOS (lub WSL2 na Windows).
Szybki start
Skopiuj kod do schowka
curl -fsSL https://intlayer.org/install.sh | shCo robi instalator:
- Sprawdza, czy
dockeridocker composesą obecne. - Pobiera
docker-compose.ymli.env.exampledo./intlayer/. - Jeśli plik
.envnie istnieje, kopiuje przykład i generuje losowe sekrety dlaBETTER_AUTH_SECRET,S3_ACCESS_KEY_IDiS3_SECRET_ACCESS_KEYza pomocąopenssl rand. - Uruchamia
docker compose pull+docker compose up -d. - Wyświetla adresy URL: pulpit nawigacyjny
:3000, API:3100, interfejs e-mail:8025, konsola MinIO:9001.
Po uruchomieniu stosu, otwórz http://localhost:3000 i utwórz swoje pierwsze konto.
Usługi
Otwórz tabelę w oknie modalnym, aby wyraźnie zobaczyć całą zawartość
| Usługa | Obraz | Port(y) hosta | Cel |
|---|---|---|---|
| aplikacja | zbudowana z apps/app/Dockerfile | 3000 | Pulpit nawigacyjny TanStack Start (interfejs użytkownika CMS) |
| backend | zbudowany z apps/backend/Dockerfile | 3100 | Fastify REST API (punkt końcowy /health) |
| mongo | mongo:7 | wewnętrzny | Zestaw replikacji z jednym węzłem (rs0) |
| redis | redis:7-alpine | wewnętrzny | Kolejki zadań (BullMQ) i buforowanie (ioredis) |
| minio | minio/minio | 9000 (S3), 9001 (konsola) | Przechowywanie obiektów zgodne z S3 dla awatarów i zrzutów ekranu |
| mailpit | axllent/mailpit | 1025 (SMTP), 8025 (interfejs webowy) | Lokalny odbiornik transakcyjnych wiadomości e-mail |
Wewnętrzne porty (mongo, redis) nie są domyślnie udostępniane na hoście.
Port MinIO9000musi być osiągalny przez przeglądarkę, ponieważ przesłane zasoby (awatary, zrzuty ekranu) są ładowane bezpośrednio zS3_PUBLIC_URL=http://localhost:9000/intlayer.
Zmienne środowiskowe
Instalator generuje gotowy do użycia plik .env. Poniższa tabela opisuje każdą zmienną.
Wymagane (generowane automatycznie lub monitowane)
Otwórz tabelę w oknie modalnym, aby wyraźnie zobaczyć całą zawartość
| Zmienna | Przykład | Opis |
|---|---|---|
NODE_ENV | production | Środowisko uruchomieniowe |
PORT | 3100 | Port nasłuchiwania backendu |
BACKEND_URL | http://localhost:3100 | Publiczny URL API backendu |
APP_URL | http://localhost:3000 | Publiczny URL pulpitu nawigacyjnego |
DOMAIN | localhost | Domena plików cookie |
MONGODB_URI | mongodb://mongo:27017/intlayer?replicaSet=rs0 | Pełny URI połączenia z MongoDB |
REDIS_URL | redis://redis:6379 | URL połączenia z Redis |
BETTER_AUTH_SECRET | (generated) | 32-bajtowy sekret do podpisywania sesji |
MAIL_PROVIDER | smtp | Transport poczty: smtp lub resend |
MAIL_SMTP_HOST | mailpit | Nazwa hosta SMTP (nazwa kontenera Mailpit) |
MAIL_SMTP_PORT | 1025 | Port SMTP |
MAIL_FROM | Intlayer <no-reply@localhost> | Adres nadawcy |
S3_ENDPOINT | http://minio:9000 | Punkt końcowy zgodny z S3 |
S3_PUBLIC_URL | http://localhost:9000/intlayer | Publiczny URL do ładowania zasobów przez przeglądarkę |
S3_BUCKET_NAME | intlayer | Nazwa zasobnika (bucket) |
S3_ACCESS_KEY_ID | (generated) | Klucz dostępu MinIO |
S3_SECRET_ACCESS_KEY | (generated) | Tajny klucz MinIO |
VITE_BACKEND_URL | http://localhost:3100 | URL backendu wbudowany w pulpit nawigacyjny w czasie kompilacji |
VITE_DOMAIN | localhost | Domena wbudowana w pulpit nawigacyjny w czasie kompilacji |
Opcjonalne (funkcje działają z ograniczoną funkcjonalnością, gdy ich brakuje)
Otwórz tabelę w oknie modalnym, aby wyraźnie zobaczyć całą zawartość
| Zmienna | Funkcja |
|---|---|
OPENAI_API_KEY | Tłumaczenie wspomagane AI i audyt treści |
STRIPE_SECRET_KEY, STRIPE_WEBHOOK_SECRET, STRIPE_* | Zarządzanie płatnościami i subskrypcjami |
RESEND_API_KEY | Transakcyjne wiadomości e-mail za pośrednictwem Resend (przesłania Mailpit, gdy jest ustawione) |
GITHUB_CLIENT_ID, GITHUB_CLIENT_SECRET | Logowanie GitHub OAuth |
GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET | Logowanie Google OAuth |
GITLAB_CLIENT_ID, GITLAB_CLIENT_SECRET | Logowanie GitLab OAuth |
MICROSOFT_CLIENT_ID, MICROSOFT_CLIENT_SECRET | Logowanie Microsoft OAuth |
LINKEDIN_CLIENT_ID, LINKEDIN_CLIENT_SECRET | Logowanie LinkedIn OAuth |
ATLASSIAN_CLIENT_ID, ATLASSIAN_CLIENT_SECRET | Logowanie Atlassian OAuth |
Łączenie Twojego projektu Intlayer
Po uruchomieniu stosu, skieruj swój projekt na samodzielnie hostowany backend i pulpit nawigacyjny zamiast na intlayer.org.
Konfiguracja projektu
Skopiuj kod do schowka
import type { IntlayerConfig } from "intlayer";
const config: IntlayerConfig = {
editor: {
clientId: process.env.INTLAYER_CLIENT_ID,
clientSecret: process.env.INTLAYER_CLIENT_SECRET,
/**
* URL samodzielnie hostowanego pulpitu nawigacyjnego CMS.
* Domyślnie: https://app.intlayer.org
*/
cmsURL: process.env.INTLAYER_CMS_URL, // np. http://localhost:3000
/**
* URL samodzielnie hostowanego API backendu.
* Domyślnie: https://back.intlayer.org
*/
backendURL: process.env.INTLAYER_BACKEND_URL, // np. http://localhost:3100
},
};
export default config;Ustaw zmienne środowiskowe w pliku .env Twojego projektu:
Skopiuj kod do schowka
INTLAYER_CMS_URL=http://localhost:3000INTLAYER_BACKEND_URL=http://localhost:3100INTLAYER_CLIENT_ID=<your-client-id>INTLAYER_CLIENT_SECRET=<your-client-secret>Utwórz dane uwierzytelniające dostęp w swoim samodzielnie hostowanym pulpicie nawigacyjnym w sekcji Projects → Access keys pod adresem http://localhost:3000/projects.
SDK @intlayer/api
Używając SDK @intlayer/api programowo, przekaż backendURL jawnie:
Skopiuj kod do schowka
import { createIntlayerCMS } from "@intlayer/api";import { dictionaryEndpoint } from "@intlayer/api/dictionary";const cms = createIntlayerCMS({ editor: { clientId: process.env.INTLAYER_CLIENT_ID, clientSecret: process.env.INTLAYER_CLIENT_SECRET, backendURL: process.env.INTLAYER_BACKEND_URL, // http://localhost:3100 },});const { data: dictionaries } = await dictionaryEndpoint(cms).getDictionaries();Aktualizacja
Ponowne uruchomienie instalatora na istniejącym wdrożeniu wykonuje aktualizację krokową:
Skopiuj kod do schowka
curl -fsSL https://intlayer.org/install.sh | shSpowoduje to pobranie najnowszych obrazów i ponowne uruchomienie kontenerów za pomocą docker compose pull && docker compose up -d. Istniejące woluminy (mongo-data, redis-data, minio-data) zostaną zachowane — brak utraty danych.
Aby ręcznie zaktualizować z poziomu katalogu ./intlayer/:
Skopiuj kod do schowka
docker compose pulldocker compose up -dKopia zapasowa i przywracanie
Wszystkie trwałe dane znajdują się w trzech nazwach woluminów Docker.
Kopia zapasowa
Skopiuj kod do schowka
docker run --rm \ -v intlayer_mongo-data:/data \ -v "$(pwd)":/backup \ busybox tar czf /backup/mongo-data.tar.gz /datadocker run --rm \ -v intlayer_redis-data:/data \ -v "$(pwd)":/backup \ busybox tar czf /backup/redis-data.tar.gz /datadocker run --rm \ -v intlayer_minio-data:/data \ -v "$(pwd)":/backup \ busybox tar czf /backup/minio-data.tar.gz /dataPrzywracanie
Skopiuj kod do schowka
docker run --rm \ -v intlayer_mongo-data:/data \ -v "$(pwd)":/backup \ busybox tar xzf /backup/mongo-data.tar.gz -C /# Powtórz dla redis-data i minio-dataUżywanie reverse proxy (Nginx / Caddy)
W przypadku wdrożeń produkcyjnych, umieść reverse proxy przed kontenerami aplikacji i backendu, zamiast udostępniać je bezpośrednio.
Przykład Nginx
Skopiuj kod do schowka
server { listen 80; server_name cms.example.com; location / { proxy_pass http://localhost:3000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; }}server { listen 80; server_name api.example.com; location / { proxy_pass http://localhost:3100; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; }}Zaktualizuj poniższe zmienne .env, aby odpowiadały Twoim publicznym domenom:
Skopiuj kod do schowka
BACKEND_URL=https://api.example.comAPP_URL=https://cms.example.comDOMAIN=example.comVITE_BACKEND_URL=https://api.example.comVITE_DOMAIN=example.comZmienneVITE_*są wbudowywane w obraz pulpitu nawigacyjnego podczas kompilacji. Jeśli zmienisz je po zbudowaniu obrazu, musisz ponownie zbudować obrazapp(docker compose build app) lub użyć wstrzykiwania konfiguracji w czasie uruchomienia.
Rozwiązywanie problemów
Backend w pętli awarii przy pierwszym uruchomieniu
MongoDB i Redis muszą być sprawne przed uruchomieniem backendu. Plik compose używa depends_on z condition: service_healthy. Jeśli widzisz powtarzające się restarty backendu, sprawdź, czy testy kondycji mongo i redis przechodzą pomyślnie:
Skopiuj kod do schowka
docker compose psdocker compose logs mongodocker compose logs redisPulpit nawigacyjny nie może dotrzeć do API
Sprawdź, czy VITE_BACKEND_URL odpowiada adresowi URL, pod którym backend jest osiągalny z przeglądarki (nie z sieci Docker). Jeśli zmieniłeś port backendu lub dodałeś reverse proxy, ponownie zbuduj obraz pulpitu nawigacyjnego:
Skopiuj kod do schowka
docker compose build appdocker compose up -d appE-mail nie jest wysyłany
Domyślnie wszystkie wychodzące wiadomości e-mail są przechwytywane przez Mailpit. Otwórz http://localhost:8025, aby zobaczyć wysłane wiadomości. Aby wysyłać prawdziwe wiadomości e-mail, ustaw MAIL_PROVIDER=resend i RESEND_API_KEY=<your-key> w .env, a następnie zrestartuj backend:
Skopiuj kod do schowka
docker compose restart backendBrak zasobnika MinIO
Jeśli jednorazowa usługa minio-init nie uruchomiła się (lub uruchomiła się, zanim MinIO było gotowe), utwórz zasobnik ręcznie:
Skopiuj kod do schowka
docker compose run --rm minio-init