Yazar:
    Oluşturma:2026-06-30Son güncelleme:2026-06-30

    Intlayer'ı Kendi Sunucunuzda Barındırma

    Intlayer, tamamen kendi altyapınızda çalışabilir; Intlayer Cloud hesabı gerekmez. Tek bir komutla üretime hazır bir yığını başlatabilirsiniz:

    Tek bir komut her şeyi kurar:

    sh
    curl -fsSL https://intlayer.org/install.sh | sh
    

    Yükleyici, bir docker-compose.yml ve bir .env indirir, gerekli gizli anahtarları otomatik olarak oluşturur ve tüm kapsayıcıları docker compose up -d ile başlatır.

    Tek dış bağımlılık MongoDB'dir: backend, sağladığınız bir MongoDB Atlas cluster'ına bağlanır. Diğer her şey kontainer içinde çalışır.

    İçindekiler

    Mimari

    plaintext
                    ┌─────────────────────────────┐
     browser ──────▶ │  app  (TanStack Start)  :3000│ ──┐
                    └─────────────────────────────┘   │ VITE_BACKEND_URL
                    ┌─────────────────────────────┐   │
                    │  backend (Fastify/Bun)  :3100│ ◀─┘
                    └──────────────┬──────────────┘
              ┌──────────┬─────────┼──────────┬───────────┐
              ▼          ▼         ▼          ▼           ▼
         mongo:27017  redis:6379  minio:9000  mailpit:1025  Chromium
         (1-düğüm RS)            (S3 API)     (SMTP)        (görüntü içinde)
                                 minio:9001   mailpit:8025
                                 (konsol)     (web arayüzü)
    

    Chromium (Puppeteer ekran görüntüsü oluşturma için kullanılır) backend görüntüsünün içine dahil edilmiştir; ayrı bir kapsayıcıya gerek yoktur.

    Önkoşullar

    • Docker ≥ 24 ve Docker Compose ≥ v2. Herhangi biri eksikse, yükleyici kurulum bağlantısını yazdırır ve çıkar.
    • Ana bilgisayarda 3000, 3100, 8025, 9000 ve 9001 bağlantı noktalarının kullanılabilir olması.
    • Bir Linux veya macOS ana bilgisayarı (veya Windows'ta WSL2).

    Diğer her şey — Bun, Redis, MinIO, Chromium — image içinde gelir.

    Hızlı başlangıç

    1. Installer'ı çalıştırın

    sh
    curl -fsSL https://intlayer.org/install.sh | sh
    

    Docker'ın yüklü ve çalışır durumda olduğunu doğrular, BETTER_AUTH_SECRET ve S3_SECRET_ACCESS_KEY zaten oluşturulmuş şekilde ./intlayer.env dosyasını yazar ve image'ı çeker. Container'ı başlatmaz — backend, veritabanı kimlik bilgileriniz olmadan önyüklenemiyor.

    Installer'ı yeniden çalıştırmak güvenlidir: mevcut intlayer.env asla üzerine yazılmaz, bu nedenle güncelleme yolu olarak da işlev görür.

    2. Kimlik bilgilerinizi doldurun

    intlayer.env dosyasını açın ve TODO ile işaretlenmiş değerleri tamamlayın:

    intlayer.env
    DB_ID=<atlas-user>
    DB_MDP=<atlas-password>
    DB_CLUSTER=<cluster>.xxxxx.mongodb.net
    RESEND_API_KEY=<your-resend-key>
    

    Dosya ayrıca isteğe bağlı özellikler için yorum satırı içeren bloklar taşır — SMTP mailer, OPENAI_API_KEY ve OAuth sağlayıcıları. İhtiyacınız olanların yorum satırını kaldırın.

    Dosya docker run --env-file tarafından okunur ve tırnak işaretlerini kaldırmaz ve = işaretinden sonraki her şeyi değer olarak kabul eder. Çıplak değerler yazın ve açıklamaları kendi satırlarında tutun.

    3. Container'ı başlat

    Bu, yükleyici bittiğinde yazdıran komuttur:

    sh
    docker run -d --name intlayer \
      --restart unless-stopped \
      -p 3000:3000 \
      -p 3100:3100 \
      -p 9000:9000 \
      -p 9001:9001 \
      -v intlayer-data:/data \
      --env-file ./intlayer.env \
      ghcr.io/aymericzip/intlayer-selfhost:latest
    

    Ardından http://localhost:3000 adresini açın. İlk başlangıçta veri depolarını başlatır, bu nedenle bir dakika bekleyin.

    Dashboard localhost üzerinde sunulur. Bkz. Sınırlamalar — yayınlanan görüntü özel alanları desteklemez.

    Installer ayarları

    Installer birkaç ortam değişkenini okur. sh içine yönlendirildiği için, onları curl yerine shell'e iletin:

    sh
    curl -fsSL https://intlayer.org/install.sh | INTLAYER_ENV_FILE=./config/intlayer.env sh
    
    DeğişkenVarsayılanAçıklama
    INTLAYER_IMAGEghcr.io/aymericzip/intlayer-selfhost:latestÇekilecek image
    INTLAYER_ENV_FILE./intlayer.envEnv dosyasının yazılacağı yer
    INTLAYER_CONTAINER_NAMEintlayerContainer adı
    INTLAYER_DATA_VOLUMEintlayer-data/data dizinine bağlı volume
    INTLAYER_APP_PORT3000Dashboard için host portu
    INTLAYER_API_PORT3100API için host portu
    INTLAYER_S3_PORT9000MinIO S3 API için host portu
    INTLAYER_CONSOLE_PORT9001MinIO konsolu için host portu
    Dört port değişkeni yalnızca docker run komutunda yazdırılan eşlemenin host tarafını değiştirir. Yayınlanan image, derleme zamanında dashboard bundle'ına http://localhost:3000, http://localhost:3100 ve http://localhost:9000 derlenmiş olarak sahiptir, bu nedenle onları yeniden eşlemek tarayıcıyı eski portlara işaret ettirir. Kendi image'ınızı oluşturmıyorsanız varsayılanları tutun — Sınırlamalar'a bakın.

    İlk çalıştırma kurulumu

    Yeni bir instance'ta (boş veritabanı), dashboard'u açmak sizi /init sayfasına yönlendirir:

    1. İlk hesabı oluşturun. Kullanıcılar koleksiyonu boş olduğundan, bu hesap otomatik olarak super admin olarak yükseltilir.
    2. Bir doğrulama e-postası gönderilir (Resend aracılığıyla). E-posta doğrulaması zorunludur — bu nedenle RESEND_API_KEY başlamadan önce ayarlanmalıdır.
    3. E-postadaki bağlantıyı tıklayın, ardından oturum açın.

    Bir admin mevcut olduğunda, /init standart oturum açma sayfasına yönlendirilir.

    Servisler

    ServisGörüntüAna Bilgisayar Bağlantı Noktası(ları)Amaç
    appapps/app/Dockerfile dosyasından oluşturuldu3000TanStack Start kontrol paneli (CMS UI)
    backendapps/backend/Dockerfile dosyasından oluşturuldu3100Fastify REST API (/health uç noktası)
    mongomongo:7dahiliTek düğümlü replika seti (rs0)
    redisredis:7-alpinedahiliİş kuyrukları (BullMQ) ve önbellekleme (ioredis)
    miniominio/minio9000 (S3), 9001 (konsol)Avatarlar ve ekran görüntüleri için S3 uyumlu nesne depolama
    mailpitaxllent/mailpit1025 (SMTP), 8025 (web UI)Yerel işlem e-postası alıcısı
    MinIO bağlantı noktası 9000 tarayıcı tarafından erişilebilir olmalıdır çünkü yüklenen varlıklar (avatarlar, ekran görüntüleri) doğrudan S3_PUBLIC_URL=http://localhost:9000/intlayer adresinden yüklenir.

    Ortam değişkenleri

    Gerekli

    VariableExampleDescription
    DB_IDintlayerMongoDB Atlas kullanıcısı
    DB_MDP(şifreniz)MongoDB Atlas şifresi
    DB_CLUSTERcluster0.xxxxx.mongodb.netMongoDB Atlas cluster host'u (mongodb+srv:// URI'de kullanılır)
    BETTER_AUTH_SECRET(generated)Session imzalama için 32-byte secret
    S3_SECRET_ACCESS_KEY(generated)Bundled MinIO için secret
    RESEND_API_KEY(your key)Resend aracılığıyla işlemsel e-posta. Global SMTP mailer'ı yapılandırmadığınız sürece ilk çalıştırma kurulumu için gereklidir (bkz. Global mailer)

    Gerekli (otomatik oluşturulur veya istenir)

    DeğişkenÖrnekAçıklama
    NODE_ENVproductionÇalışma zamanı ortamı
    PORT3100Backend dinleme portu
    BACKEND_URLhttp://localhost:3100Backend API'sinin genel URL'si
    APP_URLhttp://localhost:3000Kontrol panelinin genel URL'si
    DOMAINlocalhostÇerez alanı
    MONGODB_URImongodb://mongo:27017/intlayer?replicaSet=rs0Tam MongoDB bağlantı URI'si
    REDIS_URLredis://redis:6379Redis bağlantı URL'si
    BETTER_AUTH_SECRET(oluşturuldu)Oturum imzalamak için 32 baytlık gizli anahtar
    MAIL_PROVIDERsmtpE-posta taşıma yöntemi: smtp veya resend
    MAIL_SMTP_HOSTmailpitSMTP ana bilgisayar adı (Mailpit kapsayıcı adı)
    MAIL_SMTP_PORT1025SMTP portu
    MAIL_FROMIntlayer <no-reply@localhost>Gönderen adresi
    S3_ENDPOINThttp://minio:9000S3 uyumlu uç nokta
    S3_PUBLIC_URLhttp://localhost:9000/intlayerTarayıcı varlık yüklemesi için genel URL
    S3_BUCKET_NAMEintlayerKova adı
    S3_ACCESS_KEY_ID(oluşturuldu)MinIO erişim anahtarı
    S3_SECRET_ACCESS_KEY(oluşturuldu)MinIO gizli anahtarı
    VITE_BACKEND_URLhttp://localhost:3100Oluşturma zamanında kontrol paneline gömülü backend URL'si
    VITE_DOMAINlocalhostOluşturma zamanında kontrol paneline gömülü alan adı

    İsteğe Bağlı (yokluğunda özellikler sorunsuz şekilde bozulur)

    DeğişkenÖzellik
    OPENAI_API_KEYAI destekli çeviri ve içerik denetimi
    STRIPE_SECRET_KEY, STRIPE_WEBHOOK_SECRET, STRIPE_*Faturalandırma ve abonelik yönetimi
    RESEND_API_KEYResend aracılığıyla işlemsel e-posta (ayarlanırsa Mailpit'i geçersiz kılar)
    GITHUB_CLIENT_ID, GITHUB_CLIENT_SECRETGitHub OAuth girişi
    GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRETGoogle OAuth girişi
    GITLAB_CLIENT_ID, GITLAB_CLIENT_SECRETGitLab OAuth girişi
    MICROSOFT_CLIENT_ID, MICROSOFT_CLIENT_SECRETMicrosoft OAuth girişi
    LINKEDIN_CLIENT_ID, LINKEDIN_CLIENT_SECRETLinkedIn OAuth girişi
    ATLASSIAN_CLIENT_ID, ATLASSIAN_CLIENT_SECRETAtlassian OAuth girişi

    Global mailer

    Varsayılan olarak, tüm işlemsel e-postalar Resend üzerinden RESEND_API_KEY kullanılarak gönderilir. Self-hosted dağıtımlar bunun yerine tüm e-postaları — şifre sıfırlamaları ve magic linkler gibi organizasyon dışı e-postalar dahil — ortam değişkenleriyle yapılandırılmış global bir mailer üzerinden yönlendirebilir.

    Etkinleştirmek için MAIL_PROVIDER ayarlayın. Ayarlanmadığında, varsayılan Resend mailer kullanılır.

    DeğişkenÖrnekAçıklama
    MAIL_PROVIDERsmtpGlobal transport: smtp veya resend. Varsayılanları kullanmak için ayarlamayın
    MAIL_FROMIntlayer <no-reply@acme.com>Gönderen başlığı. Düz bir adres veya Name <email> formatını kabul eder
    MAIL_SMTP_HOSTsmtp.acme.comSMTP host (MAIL_PROVIDER=smtp olduğunda gerekli)
    MAIL_SMTP_PORT587SMTP port (varsayılan 587)
    MAIL_SMTP_SECUREfalseImplicit TLS. Port 465 için true olarak ayarlayın
    MAIL_SMTP_USER(your user)SMTP kullanıcı adı (isteğe bağlı; kimliği doğrulanmamış relayler için atlayın)
    MAIL_SMTP_PASSWORD(your password)SMTP şifresi
    Öncelik: bir organizasyonun kendi mailer'ı (Organization panosundan yapılandırılmış) global mailer'dan daha yüksek önceliğe sahiptir ve bu da varsayılan Resend anahtarından daha yüksek önceliğe sahiptir.

    Intlayer projenizi bağlama

    Yığın çalışmaya başladıktan sonra, projenizi intlayer.org yerine kendi barındırılan backend ve kontrol paneline yönlendirin.

    Proje yapılandırması

    intlayer.config.ts
    import type { IntlayerConfig } from "intlayer";
    
    const config: IntlayerConfig = {
      editor: {
        clientId: process.env.INTLAYER_CLIENT_ID,
        clientSecret: process.env.INTLAYER_CLIENT_SECRET,
    
        /**
         * Kendi sunucunuzda barındırılan CMS kontrol panelinin URL'si.
         * Varsayılan: https://app.intlayer.org
         */
        cmsURL: process.env.INTLAYER_CMS_URL, // örn. http://localhost:3000
    
        /**
         * Kendi sunucunuzda barındırılan backend API'sinin URL'si.
         * Varsayılan: https://back.intlayer.org
         */
        backendURL: process.env.INTLAYER_BACKEND_URL, // örn. http://localhost:3100
      },
    };
    
    export default config;
    

    Projenizin .env dosyasında ortam değişkenlerini ayarlayın:

    sh
    INTLAYER_CMS_URL=http://localhost:3000
    INTLAYER_BACKEND_URL=http://localhost:3100
    INTLAYER_CLIENT_ID=<your-client-id>
    INTLAYER_CLIENT_SECRET=<your-client-secret>
    

    Kendi barındırılan kontrol panelinizde Projeler → Erişim Anahtarları altında http://localhost:3000/projects adresinde erişim kimlik bilgileri oluşturun.

    @intlayer/api SDK

    @intlayer/api SDK'sını programlı olarak kullanırken, backendURL'i açıkça geçirin:

    cms.ts
    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();
    

    Yükseltme

    Bu, en son görüntüleri çeker ve kapsayıcıları docker compose pull && docker compose up -d ile yeniden başlatır. Mevcut birimler (mongo-data, redis-data, minio-data) korunur; veri kaybı olmaz.

    sh
    docker compose pull
    docker compose up -d
    

    Yedekleme ve Geri Yükleme

    Tüm kalıcı veriler, üç adet adlandırılmış Docker biriminde bulunur.

    Yedekleme

    sh
    docker run --rm \
      -v intlayer_mongo-data:/data \
      -v "$(pwd)":/backup \
      busybox tar czf /backup/mongo-data.tar.gz /data
    
    docker run --rm \
      -v intlayer_redis-data:/data \
      -v "$(pwd)":/backup \
      busybox tar czf /backup/redis-data.tar.gz /data
    
    docker run --rm \
      -v intlayer_minio-data:/data \
      -v "$(pwd)":/backup \
      busybox tar czf /backup/minio-data.tar.gz /data
    

    Geri Yükleme

    sh
    docker run --rm \
      -v intlayer_mongo-data:/data \
      -v "$(pwd)":/backup \
      busybox tar xzf /backup/mongo-data.tar.gz -C /
    
    # redis-data ve minio-data için tekrarlayın
    

    Sınırlamalar

    • MongoDB harici (Atlas) olmalıdır. Backend yalnızca mongodb+srv:// üzerinden bağlanır (DB_ID / DB_MDP / DB_CLUSTER öğesinden oluşturulur), bu nedenle düz mongodb://host:27017 — konteyner'ın kendi paketlenmiş mongod dahil — kullanılamaz. Bir MongoDB Atlas kümesi sağlayın.
    • Özel alan adı yok. Tüm tarayıcıya yönelik VITE_* URL'leri derleme zamanında uygulamaya satır içine alınır ve yayınlanan görüntü localhost değerleriyle gemi. Pano şu adreste erişilmelidir: http://localhost:3000; bunu genel bir alan adında sunmak, görüntüyü hedef URL'ler ile yeniden oluşturmayı gerektiriyor ve kutudan hemen çıkar desteklenmiyor.
    • E-posta çalışan bir postacı gerektirir. İlk çalıştırma kurulumu e-posta doğrulamasını uygular, bu nedenle RESEND_API_KEY veya bir global SMTP postacısı (MAIL_PROVIDER=smtp + MAIL_SMTP_*) yapılandırılmalıdır. İlk yönetici oturum açtıktan sonra, her kuruluş panodan kendi SMTP veya Resend postacısını da yapılandırabilir.

    Sorun Giderme

    İlk Başlangıçta Backend Sürekli Çöküyor

    Backend başlamadan önce MongoDB ve Redis'in sağlıklı olması gerekir. Compose dosyası condition: service_healthy ile depends_on kullanır. Tekrarlayan backend yeniden başlatmaları görüyorsanız, mongo ve redis sağlık kontrollerinin geçtiğinden emin olun:

    sh
    docker compose ps
    docker compose logs mongo
    docker compose logs redis
    

    Log dosyasının üst kısmına yakın yerde MongoDB connection error (MongoDB bağlantı hatası) ifadesini arayın.

    Kontrol Paneli API'ye Ulaşamıyor

    VITE_BACKEND_URL'in backend'e tarayıcıdan (Docker ağı değil) erişilebilen URL ile eşleştiğini doğrulayın. Backend portunu değiştirdiyseniz veya bir ters proxy eklediyseniz, kontrol paneli görüntüsünü yeniden oluşturun:

    MinIO Kovası Eksik

    Eğer minio-init tek seferlik servisi çalışmadıysa (veya MinIO hazır olmadan önce çalıştıysa), kovayı manuel olarak oluşturun:

    sh
    docker compose run --rm minio-init
    

    Faydalı Bağlantılar