Ajukan pertanyaan Anda dan dapatkan ringkasan dokumen dengan merujuk halaman ini dan penyedia AI pilihan Anda
Konten halaman ini diterjemahkan menggunakan AI.
Lihat versi terakhir dari konten aslinya dalam bahasa InggrisIf 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
Self-Hosting Intlayer
Intlayer dapat berjalan sepenuhnya di infrastruktur Anda sendiri — tidak memerlukan akun Intlayer Cloud. Satu perintah akan mem-boot stack yang siap produksi:
Salin kode ke clipboard
curl -fsSL https://intlayer.org/install.sh | shInstaller mengunduh docker-compose.yml dan .env, membuat secret yang diperlukan secara otomatis, dan memulai semua kontainer dengan docker compose up -d.
Daftar Isi
Arsitektur
Salin kode ke clipboard
┌─────────────────────────────┐ browser ──────▶ │ app (TanStack Start) :3000│ ──┐ └─────────────────────────────┘ │ VITE_BACKEND_URL ┌─────────────────────────────┐ │ │ backend (Fastify/Bun) :3100│ ◀─┘ └──────────────┬──────────────┘ ┌──────────┬─────────┼──────────┬───────────┐ ▼ ▼ ▼ ▼ ▼ mongo:27017 redis:6379 minio:9000 mailpit:1025 Chromium (1-node RS) (S3 API) (SMTP) (in-image) minio:9001 mailpit:8025 (console) (web UI)Chromium (digunakan untuk pembuatan screenshot Puppeteer) dibundel di dalam image backend — tidak diperlukan kontainer terpisah.
Prasyarat
- Docker ≥ 24 dan Docker Compose ≥ v2. Jika salah satunya tidak ada, installer akan mencetak tautan instalasi dan keluar.
- Port
3000,3100,8025,9000, dan9001tersedia di host. - Host Linux atau macOS (atau WSL2 di Windows).
Memulai Cepat
Salin kode ke clipboard
curl -fsSL https://intlayer.org/install.sh | shApa yang dilakukan installer:
- Memeriksa bahwa
dockerdandocker composeada. - Mengunduh
docker-compose.ymldan.env.exampleke./intlayer/. - Jika tidak ada
.envyang ada, menyalin contoh dan menghasilkan secret acak untukBETTER_AUTH_SECRET,S3_ACCESS_KEY_ID, danS3_SECRET_ACCESS_KEYmelaluiopenssl rand. - Menjalankan
docker compose pull+docker compose up -d. - Mencetak URL: dashboard
:3000, API:3100, UI email:8025, konsol MinIO:9001.
Setelah stack aktif, buka http://localhost:3000 dan buat akun pertama Anda.
Layanan
Buka tabel dalam modal untuk melihat semua isi data dengan jelas
| Layanan | Image | Port Host | Tujuan |
|---|---|---|---|
| app | dibuat dari apps/app/Dockerfile | 3000 | Dashboard TanStack Start (UI CMS) |
| backend | dibuat dari apps/backend/Dockerfile | 3100 | Fastify REST API (/health endpoint) |
| mongo | mongo:7 | internal | Replika set node tunggal (rs0) |
| redis | redis:7-alpine | internal | Job queues (BullMQ) dan caching (ioredis) |
| minio | minio/minio | 9000 (S3), 9001 (konsol) | Penyimpanan objek yang kompatibel dengan S3 untuk avatar dan screenshot |
| mailpit | axllent/mailpit | 1025 (SMTP), 8025 (UI web) | Sink email transaksional lokal |
Port internal (mongo, redis) tidak terekspos ke host secara default.
Port MinIO9000harus dapat dijangkau oleh browser karena aset yang diunggah (avatar, screenshot) dimuat langsung dariS3_PUBLIC_URL=http://localhost:9000/intlayer.
Variabel Lingkungan
Installer menghasilkan .env yang siap pakai. Tabel di bawah ini menjelaskan setiap variabel.
Wajib (dibuat secara otomatis atau diminta)
Buka tabel dalam modal untuk melihat semua isi data dengan jelas
| Variabel | Contoh | Deskripsi |
|---|---|---|
NODE_ENV | production | Lingkungan runtime |
PORT | 3100 | Port listen backend |
BACKEND_URL | http://localhost:3100 | URL publik API backend |
APP_URL | http://localhost:3000 | URL publik dashboard |
DOMAIN | localhost | Domain cookie |
MONGODB_URI | mongodb://mongo:27017/intlayer?replicaSet=rs0 | URI koneksi MongoDB lengkap |
REDIS_URL | redis://redis:6379 | URL koneksi Redis |
BETTER_AUTH_SECRET | (dibuat) | Secret 32-byte untuk penandatanganan sesi |
MAIL_PROVIDER | smtp | Transportasi mail: smtp atau resend |
MAIL_SMTP_HOST | mailpit | Nama host SMTP (nama kontainer Mailpit) |
MAIL_SMTP_PORT | 1025 | Port SMTP |
MAIL_FROM | Intlayer <no-reply@localhost> | Alamat pengirim |
S3_ENDPOINT | http://minio:9000 | Endpoint yang kompatibel dengan S3 |
S3_PUBLIC_URL | http://localhost:9000/intlayer | URL publik untuk pemuatan aset browser |
S3_BUCKET_NAME | intlayer | Nama bucket |
S3_ACCESS_KEY_ID | (dibuat) | Kunci akses MinIO |
S3_SECRET_ACCESS_KEY | (dibuat) | Kunci secret MinIO |
VITE_BACKEND_URL | http://localhost:3100 | URL backend yang tertanam di dashboard pada waktu build |
VITE_DOMAIN | localhost | Domain yang tertanam di dashboard pada waktu build |
Opsional (fitur akan menurun secara bertahap jika tidak ada)
Buka tabel dalam modal untuk melihat semua isi data dengan jelas
| Variabel | Fitur |
|---|---|
OPENAI_API_KEY | Terjemahan berbantuan AI dan audit konten |
STRIPE_SECRET_KEY, STRIPE_WEBHOOK_SECRET, STRIPE_* | Penagihan dan manajemen langganan |
RESEND_API_KEY | Email transaksional via Resend (menimpa Mailpit jika disetel) |
GITHUB_CLIENT_ID, GITHUB_CLIENT_SECRET | Login GitHub OAuth |
GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET | Login Google OAuth |
GITLAB_CLIENT_ID, GITLAB_CLIENT_SECRET | Login GitLab OAuth |
MICROSOFT_CLIENT_ID, MICROSOFT_CLIENT_SECRET | Login Microsoft OAuth |
LINKEDIN_CLIENT_ID, LINKEDIN_CLIENT_SECRET | Login LinkedIn OAuth |
ATLASSIAN_CLIENT_ID, ATLASSIAN_CLIENT_SECRET | Login Atlassian OAuth |
Menghubungkan proyek Intlayer Anda
Setelah stack berjalan, arahkan proyek Anda ke backend dan dashboard yang di-self-host, bukan ke intlayer.org.
Konfigurasi proyek
Salin kode ke clipboard
import type { IntlayerConfig } from "intlayer";
const config: IntlayerConfig = {
editor: {
clientId: process.env.INTLAYER_CLIENT_ID,
clientSecret: process.env.INTLAYER_CLIENT_SECRET,
/**
* URL dashboard CMS yang di-self-host.
* Default: https://app.intlayer.org
*/
cmsURL: process.env.INTLAYER_CMS_URL, // e.g. http://localhost:3000
/**
* URL API backend yang di-self-host.
* Default: https://back.intlayer.org
*/
backendURL: process.env.INTLAYER_BACKEND_URL, // e.g. http://localhost:3100
},
};
export default config;Setel variabel lingkungan di .env proyek Anda:
Salin kode ke clipboard
INTLAYER_CMS_URL=http://localhost:3000INTLAYER_BACKEND_URL=http://localhost:3100INTLAYER_CLIENT_ID=<your-client-id>INTLAYER_CLIENT_SECRET=<your-client-secret>Buat kredensial akses di dashboard self-host Anda di bawah Projects → Access keys di http://localhost:3000/projects.
@intlayer/api SDK
Saat menggunakan @intlayer/api SDK secara terprogram, teruskan backendURL secara eksplisit:
Salin kode ke clipboard
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();Peningkatan
Menjalankan ulang installer pada deployment yang ada akan melakukan rolling upgrade:
Salin kode ke clipboard
curl -fsSL https://intlayer.org/install.sh | shIni menarik image terbaru dan memulai ulang kontainer dengan docker compose pull && docker compose up -d. Volume yang sudah ada (mongo-data, redis-data, minio-data) dipertahankan — tidak ada kehilangan data.
Untuk meningkatkan secara manual dari dalam direktori ./intlayer/:
Salin kode ke clipboard
docker compose pulldocker compose up -dCadangkan dan pulihkan
Semua data persisten berada dalam tiga volume Docker bernama.
Cadangkan
Salin kode ke clipboard
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 /dataPulihkan
Salin kode ke clipboard
docker run --rm \ -v intlayer_mongo-data:/data \ -v "$(pwd)":/backup \ busybox tar xzf /backup/mongo-data.tar.gz -C /# Ulangi untuk redis-data dan minio-dataMenggunakan reverse proxy (Nginx / Caddy)
Untuk deployment produksi, letakkan reverse proxy di depan kontainer aplikasi dan backend daripada mengeksposnya secara langsung.
Contoh Nginx
Salin kode ke clipboard
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; }}Perbarui variabel .env berikut agar sesuai dengan domain publik Anda:
Salin kode ke clipboard
BACKEND_URL=https://api.example.comAPP_URL=https://cms.example.comDOMAIN=example.comVITE_BACKEND_URL=https://api.example.comVITE_DOMAIN=example.comVariabelVITE_*tertanam dalam image dashboard pada waktu build. Jika Anda mengubahnya setelah image dibuat, Anda perlu membangun ulang imageapp(docker compose build app) atau menggunakan injeksi konfigurasi runtime.
Pemecahan Masalah
Backend crash-loops pada start pertama
MongoDB dan Redis harus sehat sebelum backend dimulai. File compose menggunakan depends_on dengan condition: service_healthy. Jika Anda melihat restart backend berulang, periksa apakah healthchecks mongo dan redis lulus:
Salin kode ke clipboard
docker compose psdocker compose logs mongodocker compose logs redisDashboard tidak dapat mencapai API
Verifikasi bahwa VITE_BACKEND_URL cocok dengan URL di mana backend dapat dijangkau dari browser (bukan jaringan Docker). Jika Anda mengubah port backend atau menambahkan reverse proxy, bangun ulang image dashboard:
Salin kode ke clipboard
docker compose build appdocker compose up -d appEmail tidak terkirim
Secara default, semua email keluar ditangkap oleh Mailpit. Buka http://localhost:8025 untuk melihat pesan yang terkirim. Untuk mengirim email sungguhan, setel MAIL_PROVIDER=resend dan RESEND_API_KEY=<your-key> di .env, lalu restart backend:
Salin kode ke clipboard
docker compose restart backendBucket MinIO hilang
Jika layanan one-shot minio-init tidak berjalan (atau berjalan sebelum MinIO siap), buat bucket secara manual:
Salin kode ke clipboard
docker compose run --rm minio-init