> ## Documentation Index
> Fetch the complete documentation index at: https://help.teable.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Docker Dağıtımı

<Callout type="info">
  **Docker Compose küçük ekipler ve değerlendirme için önerilir** (\< 50 kullanıcı).
  Doğru yolu seçtiğinizden emin değil misiniz? [Dağıtım](/tr/deploy/choose) sayfasından başlayın. AI özelliklerine veya App Builder'a mı ihtiyacınız var? Yeni bir kurulumda [tüm özelliklere sahip platformu](/tr/deploy/architecture) dağıtın; bu bağımsız kurulum zaten çalışıyorsa [taşıma kılavuzunu](https://github.com/teableio/teable-deployment/blob/main/migration/2026-07-basic-to-full-featured.md) izleyin. Verileriniz yerinde kalır.
</Callout>

## Docker Compose Dağıtımı

**Önerilen Ölçek**: 0-50 kullanıcı

| Avantajlar         | Dezavantajlar                                |
| ------------------ | -------------------------------------------- |
| Basit dağıtım      | Tek makinede dağıtım, karmaşık ölçeklendirme |
| Tam denetim        |                                              |
| Esnek yapılandırma |                                              |

**Sunucu Gereksinimleri**

Sunucunuzun aşağıdaki temel gereksinimleri karşıladığından emin olun:

* İşletim Sistemi: Ubuntu 20.04 LTS gibi önerilen bir Linux dağıtımı
* Bellek: En az 4 GB RAM
* CPU: En az 2 çekirdek
* Disk Alanı: En az 40 GB kullanılabilir alan
* Ağ: Gerekli bağlantı noktalarına erişimi olan kararlı internet bağlantısı

#### Ön Koşullar

Başlamadan önce şunlara sahip olduğunuzdan emin olun:

* Docker ve kapsayıcılaştırma ilkeleri hakkında temel bilgi
* Makinenizde Docker ve Docker Compose yüklü olmalıdır. Yükleme kılavuzları için resmî Docker belgelerini ziyaret edin.

### **Docker'ı Yükleme**

```bash theme={null}
# Docker'ın en yeni sürümünü indirin
curl -fsSL https://get.docker.com | bash -s docker

# Yüklemeyi doğrulayın
docker --version
docker-compose --version
```

### Uygulamayı Yükleme

#### docker-compose.yaml Dosyasını Oluşturma

Sunucunuza erişin, teable klasörünü oluşturup içine girin:

```bash theme={null}
mkdir teable

cd teable
```

Bir `docker-compose.yaml` ve `.env` dosyası oluşturup aşağıdaki içeriği yapıştırın:

```bash theme={null}
vim docker-compose.yaml
```

#### **Asgari Dağıtım:**

```yaml docker-compose.yaml theme={null}
services:
  teable:
    image: ghcr.io/teableio/teable:latest
    restart: always
    ports:
      - '3000:3000'
    volumes:
      - teable-data:/app/.assets:rw
    env_file:
      - .env
    environment:
      - NEXT_ENV_IMAGES_ALL_REMOTE=true
    networks:
      - teable
    depends_on:
      teable-db:
        condition: service_healthy
      teable-cache:
        condition: service_healthy
    healthcheck:
      test: ['CMD', 'curl', '-f', 'http://localhost:3000/health']
      start_period: 5s
      interval: 5s
      timeout: 3s
      retries: 3

  teable-db:
    image: postgres:15.4
    restart: always
    ports:
      - '42345:5432'
    volumes:
      - teable-db:/var/lib/postgresql/data:rw
    environment:
      - POSTGRES_DB=${POSTGRES_DB}
      - POSTGRES_USER=${POSTGRES_USER}
      - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
    networks:
      - teable
    healthcheck:
      test: ['CMD-SHELL', "sh -c 'pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DB}'"]
      interval: 10s
      timeout: 3s
      retries: 3

  teable-cache:
    image: redis:7.2.4
    restart: always
    expose:
      - '6379'
    volumes:
      - teable-cache:/data:rw
    networks:
      - teable
    command: redis-server --appendonly yes --requirepass ${REDIS_PASSWORD}
    healthcheck:
      test: ['CMD', 'redis-cli', '--raw', 'incr', 'ping']
      interval: 10s
      timeout: 3s
      retries: 3

networks:
  teable:
    name: teable-network

volumes:
  teable-db: {}
  teable-data: {}
  teable-cache: {}
```

```bash .env theme={null}
# Aşağıdaki varsayılan parolayı en az 8 karakterden oluşan güçlü bir parolayla (ASCII) değiştirin.
POSTGRES_PASSWORD=replace_this_password
REDIS_PASSWORD=replace_this_password
SECRET_KEY=replace_this_secret_key

# Aşağıdaki değeri genel olarak erişilebilir bir adresle değiştirin
PUBLIC_ORIGIN=http://127.0.0.1:3000

# ---------------------

# Postgres
POSTGRES_HOST=teable-db
POSTGRES_PORT=5432
POSTGRES_DB=teable
POSTGRES_USER=teable

# Redis
REDIS_HOST=teable-cache
REDIS_PORT=6379
REDIS_DB=0

# Uygulama
PRISMA_DATABASE_URL=postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@${POSTGRES_HOST}:${POSTGRES_PORT}/${POSTGRES_DB}
BACKEND_CACHE_PROVIDER=redis
BACKEND_CACHE_REDIS_URI=redis://default:${REDIS_PASSWORD}@${REDIS_HOST}:${REDIS_PORT}/${REDIS_DB}
```

#### **Depolama Hizmeti Ekleme (İsteğe Bağlı)**

Üretim dağıtımlarında daha iyi dayanıklılık ve ölçeklendirme için **S3 uyumlu nesne depolama** (S3, MinIO, S3 uyumlu uç noktalara sahip OSS/OBS/COS veya başka bir S3 uyumlu hizmet gibi) kullanın.

<Tabs>
  <Tab title="docker-compose'a MinIO Ekleme">
    MinIO, ek bir depolama yönetimi arayüzü (9001 bağlantı noktası) ve daha güçlü, kararlı bir dosya hizmeti sağlar.

    ```yaml docker-compose.yaml theme={null}
    services:
      # ...önceki içerik
      teable-storage:
        image: minio/minio:RELEASE.2024-02-17T01-15-57Z
        ports:
          - "9000:9000"
          - "9001:9001"
        environment:
          - MINIO_ACCESS_KEY=${MINIO_ACCESS_KEY}
          - MINIO_SECRET_KEY=${MINIO_SECRET_KEY}
        volumes:
          - teable-storage:/data:rw
        networks:
          - teable
        command: server /data --console-address ":9001"
      createbuckets:
        image: minio/mc
        networks:
          - teable
        entrypoint: >
          /bin/sh -c "
          /usr/bin/mc alias set teable-storage http://teable-storage:9000 ${MINIO_ACCESS_KEY} ${MINIO_SECRET_KEY};
          /usr/bin/mc mb teable-storage/public;
          /usr/bin/mc anonymous set public teable-storage/public;
          /usr/bin/mc mb teable-storage/private;
          exit 0;
          "
        depends_on:
          teable-storage:
            condition: service_started

    networks:
      teable:
        name: teable-network

    volumes:
      teable-db: {}
      teable-cache: {}
      # Yeni bir birim ekleyin
      teable-storage: {}

    ```

    ```bash .env theme={null}
    # Aşağıdaki varsayılan parolaları en az 8 karakterden oluşan güçlü parolalarla (ASCII) değiştirin.
    POSTGRES_PASSWORD=replace_this_password
    REDIS_PASSWORD=replace_this_password
    SECRET_KEY=replace_this_secret_key

    # HTTPS'yi etkinleştirirseniz PROTOCOL değerini https olarak ayarlayın.
    PROTOCOL=http
    # PUBLIC_HOST değerini dağıtımınızın IP adresi veya alan adı olarak ayarlayın. localhost veya 127.0.0.1 kullanılamaz.
    PUBLIC_HOST=192.168.x.x
    # Son bağlantı noktasını erişim bağlantı noktanızla eşleşecek şekilde değiştirin veya standart bağlantı noktalarını (80/443) kullanıyorsanız :port bölümünü kaldırın.
    PUBLIC_ORIGIN=${PROTOCOL}://${PUBLIC_HOST}:3000

    # ---------------------

    # Postgres
    POSTGRES_HOST=teable-db
    POSTGRES_PORT=5432
    POSTGRES_DB=teable
    POSTGRES_USER=teable

    # Redis
    REDIS_HOST=teable-cache
    REDIS_PORT=6379
    REDIS_DB=0

    # Minio
    MINIO_ACCESS_KEY=teable_minio_access
    MINIO_SECRET_KEY=${SECRET_KEY}

    # Uygulama
    PRISMA_DATABASE_URL=postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@${POSTGRES_HOST}:${POSTGRES_PORT}/${POSTGRES_DB}
    BACKEND_CACHE_PROVIDER=redis
    BACKEND_CACHE_REDIS_URI=redis://default:${REDIS_PASSWORD}@${REDIS_HOST}:${REDIS_PORT}/${REDIS_DB}
    BACKEND_STORAGE_PROVIDER=minio
    BACKEND_STORAGE_PUBLIC_BUCKET=public
    BACKEND_STORAGE_PRIVATE_BUCKET=private
    BACKEND_STORAGE_MINIO_USE_SSL=false # HTTPS'yi etkinleştirirseniz bu değeri true olarak değiştirin
    BACKEND_STORAGE_MINIO_ENDPOINT=${PUBLIC_HOST}
    BACKEND_STORAGE_MINIO_PORT=9000
    BACKEND_STORAGE_MINIO_ACCESS_KEY=${MINIO_ACCESS_KEY}
    BACKEND_STORAGE_MINIO_SECRET_KEY=${MINIO_SECRET_KEY}
    STORAGE_PREFIX=${PROTOCOL}://${PUBLIC_HOST}:${BACKEND_STORAGE_MINIO_PORT}
    ```
  </Tab>

  <Tab title="Harici MinIO'ya Bağlanma">
    Başlamadan önce MinIO'da iki bucket oluşturmanız gerekir. Genel bucket profil görüntülerini ve form üstbilgilerini, özel bucket ise ek içeriklerini saklar.

    ```sh .env theme={null}
    # ...önceki içerik
    # minio sağlayıcısını kullanın
    BACKEND_STORAGE_PROVIDER=minio
    # Genel bucket adı
    BACKEND_STORAGE_PUBLIC_BUCKET=public
    # Özel bucket adı
    BACKEND_STORAGE_PRIVATE_BUCKET=private
    # Minio hizmeti uç noktasının IP adresi veya alan adı
    BACKEND_STORAGE_MINIO_ENDPOINT=minio.example.com
    # Minio bağlantı noktası
    BACKEND_STORAGE_MINIO_PORT=443
    # HTTPS'nin etkin olup olmadığı
    BACKEND_STORAGE_MINIO_USE_SSL=true
    # minio erişim anahtarı
    BACKEND_STORAGE_MINIO_ACCESS_KEY=_minio_access_key_
    # minio gizli anahtarı
    BACKEND_STORAGE_MINIO_SECRET_KEY=_minio_secret_key_
    # Tam erişim adresi
    STORAGE_PREFIX=https://minio.example.com

    # ---Dahili Ağ Yapılandırması (İsteğe Bağlı)---
    # Dahili minio hizmeti uç noktasının IP adresi veya alan adı (HTTPS için desteklenmez)
    BACKEND_STORAGE_MINIO_INTERNAL_ENDPOINT=teable-storage.internal
    # Dahili minio bağlantı noktası
    BACKEND_STORAGE_MINIO_INTERNAL_PORT=9000
    # ---bölge yapılandırması (İsteğe Bağlı)---
    # Bölge adı
    BACKEND_STORAGE_MINIO_REGION=us-east-1

    ```
  </Tab>

  <Tab title="AWS S3'e Bağlanma">
    <Note>
      Not: **İki bucket** (genel/özel) yapılandırmanız gerekir. **Genel bucket**, **public-read** olmalı ve **her kaynak için CORS'a** izin vermelidir; aksi takdirde tarayıcı erişimi başarısız olabilir.
    </Note>

    Başlamadan önce AWS S3'te iki bucket oluşturmanız gerekir. Genel bucket avatarları ve form üstbilgilerini, özel bucket ise ek içeriklerini saklar.

    ```sh .env theme={null}
    # ...önceki içerik
    # Standart S3 sağlayıcısını kullanın
    BACKEND_STORAGE_PROVIDER=s3
    # Bölge adı
    BACKEND_STORAGE_S3_REGION=us-west-2
    # Uç nokta, protokolü içermelidir (genellikle https)
    BACKEND_STORAGE_S3_ENDPOINT=https://s3.us-west-2.amazonaws.com
    # Erişim anahtarı
    BACKEND_STORAGE_S3_ACCESS_KEY=access_key
    # Gizli anahtar
    BACKEND_STORAGE_S3_SECRET_KEY=secret_key
    # Genel bucket
    BACKEND_STORAGE_PUBLIC_BUCKET=your-public-bucket
    # Özel bucket
    BACKEND_STORAGE_PRIVATE_BUCKET=your-private-bucket
    # Tam erişim adresi, genel bucket'ınızın erişim adresi
    STORAGE_PREFIX=https://your-public-bucket.s3.us-west-2.amazonaws.com

    ```

    Bu işlem yalnızca AWS S3 için değil, çoğu bulut sağlayıcısı için geçerlidir.
  </Tab>
</Tabs>

#### Uygulamayı Başlatma

Uygulamayı başlatmak için mevcut dizinde aşağıdaki komutları çalıştırın. Başlatıldıktan sonra uygulamaya 127.0.0.1:3000 adresinden erişebilirsiniz.

<Note>
  Büyük ölçekli veri kopyalama işlemleri için HTTPS ortamı gerekir; aksi takdirde zaman uyumsuz pano erişimi mümkün olmaz.
</Note>

```bash theme={null}
docker-compose pull

docker-compose up -d
```

#### Yönetilen Veritabanlarını Kullanma (İsteğe Bağlı)

Yönetilen veritabanlarını kullanmayı tercih ediyorsanız dağıtım sürecini daha da basitleştirebilirsiniz:

1. services.teable-db öğesini kaldırın
2. volumes.teable-db öğesini kaldırın
3. Yönetilen veritabanı yapılandırmanızla .env dosyasını güncelleyin

Veritabanı parametrelerini yönetilen veritabanınızın bağlantı parametreleriyle doldurun:

```sh .env theme={null}
POSTGRES_HOST=your-database.com
POSTGRES_PORT=5432
POSTGRES_DB=teable
POSTGRES_USER=teable
```

<Note>
  `127.0.0.1` adresinin kapsayıcının dahili ağı olduğunu unutmayın. Yerel olarak dağıtılmış bir veritabanına bağlanmak istiyorsanız ana bilgisayar adresi olarak `host.docker.internal` kullanın; `127.0.0.1` kullanırsanız bağlantı başarısız olur.
</Note>

**Harici olarak yönetilen Redis için de benzer şekilde:**

* service.teable-cache öğesini kaldırın
* service.teable.depends\_on.teable-cache öğesini kaldırın
* volumes.teable-cache öğesini kaldırın
* Yönetilen Redis yapılandırmanızla .env dosyasını güncelleyin

### Sonraki Adımlar

[E-posta Hizmetini Yapılandırma](/tr/deploy/email)

## Destek ve Geri Bildirim

Dağıtım sırasında herhangi bir sorunla karşılaşırsanız [support@teable.ai](mailto:support@teable.ai) adresinden destek ekibimizle iletişime geçin veya [sorun bildirin](https://github.com/teableio/teable/issues).

## Lisans

Teable, AGPL-3.0 lisansı kapsamında açık kaynaklı Community özelliklerini içerir. Kendi sunucunuzdaki dağıtımlarda ücretli özellikleri kullanıma açmak için [fiyatlandırma sayfamızdan](https://app.teable.ai/public/pricing?host=self-hosted\&billing=year) abone olun.

<Note>
  `ghcr.io/teableio/teable:latest` imajı tüm özellik kümesini içerir. Ücretli özellikleri etkinleştirmek için geçerli bir abonelik lisansı gerekir.

  Yalnızca açık kaynaklı Community özelliklerine ihtiyacınız varsa `ghcr.io/teableio/teable-community:latest` imajını seçebilirsiniz.
</Note>

## Yaygın Sorunlar

<Accordion title="İlk dağıtımdan sonra nasıl oturum açarım?">
  Örnek başlatıldıktan sonra örnek URL'nizi açıp burada bir hesap oluşturun. Teable önceden ayarlanmış bir yönetici hesabıyla sunulmaz ve kendi sunucunuzdaki örnek teable.ai bulut hesabınızı kullanmaz.

  Örnekte kaydolan ilk kullanıcı örnek yöneticisi olur.
</Accordion>

<Accordion title="Yüklemeden sonra neden CSV/xlsx dosyalarını içe aktaramıyor veya görüntü yükleyemiyorum?">
  Dosyaları içe aktarma sorunları genellikle PUBLIC\_ORIGIN ortam değişkeninin yanlış yapılandırılmasından kaynaklanır. PUBLIC\_ORIGIN değerini o anda erişilebilen adres olarak ayarlamanız gerekir:

  ```bash theme={null}
  # Yerel geliştirme için
  PUBLIC_ORIGIN=http://127.0.0.1:3000

  # Yerel ağ erişimi için
  PUBLIC_ORIGIN=http://192.168.1.100:3000

  # Alan adıyla erişim için
  PUBLIC_ORIGIN=https://teable.example.com
  ```

  <Callout type="warning">
    Önemli: URL'nin sonuna eğik çizgi ("/") eklemeyin.
  </Callout>

  Bu yapılandırmayı değiştirdikten sonra değişikliklerin geçerli olması için Teable örneğinizi yeniden başlatmanız gerekir.
</Accordion>

<Accordion title="HTTPS nasıl etkinleştirilir?">
  HTTPS'yi etkinleştirmek için şu adımlar gerekir:

  * Geçerli bir SSL sertifikası alın
  * `PROTOCOL=https` değerini ayarlayın (veya kurulumunuza bağlı olarak `PUBLIC_ORIGIN=https://teable.example.com` değerini ayarlayın)
  * MinIO kullanıyorsanız `BACKEND_STORAGE_MINIO_USE_SSL=true` değerini ayarlayın

  <Tip>
    SSL sonlandırmasını yönetmek için ters proxy (Nginx veya Traefik gibi) kullanmanız önerilir.
  </Tip>

  <Tip>
    Nginx'i nasıl yapılandıracağınızdan emin değilseniz (HTTPS/sertifikalar, WebSocket, Docker ağı, Nginx Proxy Manager vb.), [Nginx (Ters Proxy)](/tr/deploy/nginx) bölümüne bakın.
  </Tip>
</Accordion>

<Accordion title="Verilerimi nasıl yedeklerim?">
  Docker Compose dağıtımlarında birkaç yedekleme seçeneğiniz vardır:

  **1. Seçenek: Tam Sanal Makine Yedeği** (Kolaylık için önerilir)

  * Teable'ı barındıran sanal makinenin tamamını düzenli olarak yedekleyin
  * Sistemin eksiksiz kurtarılmasını sağlar

  **2. Seçenek: Docker Birimi Yedeği**

  * `docker-compose.yaml` dosyanızda tanımlanan tüm Docker birimlerini yedekleyin
  * Birimleri listeleyin: `docker volume ls`
  * Bir birimi yedekleyin:
    ```bash theme={null}
    docker run --rm -v <volume_name>:/data -v $(pwd):/backup alpine tar czf /backup/<volume_name>.tar.gz /data
    ```

  **3. Seçenek: Bileşen Düzeyinde Yedekleme** (Ayrıntılı denetim için önerilir)

  * **PostgreSQL veritabanı**: Tüm Tablo verilerini içerir
    ```bash theme={null}
    docker exec teable-db pg_dump -U teable teable > backup.sql
    ```
  * **Redis veritabanı**: Otomasyon kuyruğu verilerini içerir
    ```bash theme={null}
    docker exec teable-cache redis-cli --rdb /data/dump.rdb
    ```
  * **Veri dizini**: `teable-data` birimini yedekleyin (tüm ek dosyalarını içerir)
    ```bash theme={null}
    docker run --rm -v teable-data:/data -v $(pwd):/backup alpine tar czf /backup/teable-data.tar.gz /data
    ```

  Üretim ortamlarında saklama politikalarıyla birlikte otomatik günlük yedeklemeler yapılandırmanızı öneririz.
</Accordion>
